【问题标题】:How do I set Mac OS X 10.6 Terminal tab title programmatically?如何以编程方式设置 Mac OS X 10.6 终端选项卡标题?
【发布时间】:2011-10-07 20:57:58
【问题描述】:

我正在尝试学习 Applescript,最终以编程方式将终端中选项卡的标题设置为我目前正在使用的任何上下文。应该是一项简单的任务,我几乎已经完成了我认为是的。这是我目前的实验代码...

tell application "Terminal"
    activate
    set frontIndex to index of the first window whose frontmost is true
    tell window frontIndex
        set title displays custom title of selected tab to true
        set custom title of selected tab to "Bazzy"
    end tell
end tell

问题是当我设置选项卡的标题时,所有其他选项卡的标题也会设置。 但是,如果我右键单击并检查一个选项卡,然后在该选项卡上手动设置标题,则在我运行我的代码时它的标题不会受到影响,并且我手动输入的标题仍然存在。好像title displays custom title 属性没有被读取,或者这个属性没有按照我的想法做。

如何将一个标签的标题设置为自定义值?

【问题讨论】:

  • 请注意,set frontIndex to index of the first window whose frontmost is true 是不必要的。默认情况下front windowwindow 1 始终是最前面的窗口。
  • 在 10.6.8 中,我发现在将“标题显示自定义标题”设置为 true 之前将选项卡/窗口的其他与标题相关的属性设置为 false 很重要:“标题显示设备名称”、“ title 显示 shell 路径”,“title 显示窗口大小”。如果我不这样做,那么另一个布尔值将保持为假,使我的所有标题更新都转到所有窗口的“设置集”,而不是我试图更改的特定窗口/选项卡。适用于 OS X 未来版本的 YMMV。

标签: macos terminal applescript osx-snow-leopard


【解决方案1】:

这个属性并没有像你想象的那样做。根据以下代码,将自定义标题设置为一个选项卡适用于 all 窗口中的 all 选项卡:

tell application "Terminal"
    tell window 1
        set title displays custom title of tab 1 to true
        set custom title of selected tab to "foo"
    end tell
    tell window 2
        set title displays custom title of tab 2 to true
        set custom title of selected tab to "bar"
    end tell
end tell
--> RESULT: All tabs in all windows show "bar"

我想知道它是否与与环境相关的标题有关——即bashcshzshksh——而不是与单个选项卡有关。即使我退出终端并重新进入,“栏”仍然到处显示。我会坦率地承认,我对 CL 接口的工作原理了解得不够多,无法确定。

同时,如果您正在学习 Applescript,我建议您在一些不太可靠的东西上学习它,例如 Finder 或其他东西。与使用 Applescript 的终端相比,可以在那里完成更多有用的事情。

【讨论】:

    【解决方案2】:

    我刚试过,效果很好:

    tell application "Terminal"
        set custom title of tab 2 of window 1 to "beta"
        set custom title of tab 1 of window 1 to "alpha"
    end tell
    

    我承认我没有使用 10.6,所以也许 Apple 改变了它。

    【讨论】:

    • "custom title" 设置标有“Window Title”的输入。这会产生 WindowTitle-TabsWindowTitle。如何在标签检查器中设置标有“标签标题”的输入?
    【解决方案3】:

    当抓取正确的窗口/选项卡时,这些命令有一些奇怪的行为,但这最终在 10.5.8(终端 v2.0.2)中为我工作

    tell application "Terminal"
        do script
        set currWin to index of first window
    
        tell window currWin 
            set custom title of first tab to "A Custom Title"
        end tell
    
        set current settings of window currWin to settings set "Grass"
    end tell
    

    这里的关键是do script会打开一个新的终端窗口,从而强制它成为“第一”(do script也返回创建的标签索引,但我无法使用它)。

    然后自定义标题仅适用于该窗口。还投入了一行来设置终端选项卡的配置文件。

    (参考:AppleScript to open named terminal window

    附加 奇怪行为示例:删除do script 行会导致自定义标题应用于所有窗口,但只有一个窗口接收设置更改!

    【讨论】:

    • 在所有答案中,这个最适合我的用例。
    【解决方案4】:

    从 Mac OS X Lion 10.7 开始,终端仅设置目标选项卡/窗口的 custom title 属性,而不是更改设置配置文件(这会影响具有该配置文件的所有终端)。在 10.7 之前,大多数(但不是全部)终端属性仅适用于目标终端;但是,其中一些适用于终端使用的设置配置文件。这些在 10.7 中已更改为仅影响目标终端。

    【讨论】:

      【解决方案5】:

      如果您是从终端本身执行脚本,您可以使用简单的echo,例如:

      echo -n -e "\033]0;Tech-Recipes rules\007"

      如果你将它放在$PS1 中,它就会起作用,这样每次呈现提示时它都会改变。

      来源:How do I set Mac OS X 10.6 Terminal tab title programmatically?

      【讨论】:

      • 这个源链接是递归的吗?
      • 有人可以解释一下这是如何工作的吗?我总是无法找到正确的人/网页以获取转义序列。
      • 关于如何从 tcsh 执行此操作的任何提示(无需输入 bash 并返回)?我试过一次性的bash -c,但它不起作用。你知道重启后标题是否保留?
      【解决方案6】:

      我一直在寻找这个,正如 @tponthieux 在他的评论中提到的那样,所有这些脚本都会更改终端窗口标题而不是选项卡标题。不幸的是,似乎没有选项可以使用现成的苹果脚本更改选项卡标题,所以我使用键完成了它,它在 OSX El Capitan 上没有问题。

      tell application "Terminal"
          activate
      tell application "System Events"
          keystroke "i" using {shift down,command down}
          keystroke Tab
          keystroke "yourtitlehere"
          key code 53 
      end tell
      

      【讨论】:

        【解决方案7】:

        OSX 终端的标题来自几个不同的来源。

        1) 首选项 > 窗口:选择终端 > 首选项 > 窗口(选项卡)。在这里您可以找到各种用于为窗口命名的配置。

        2) Preferences > Tab:选择Terminal > Preferences > Tab(选项卡)。在这里您可以找到用于为标签命名的各种配置。

        3) 控制台代码:您可以使用的 VT100 命令 (more info by searching for OSC here)

        echo -n -e "\033]0;Set icon name (tab) and window title to this.\007"
        echo -n -e "\033]1;Set the icon name (tab) to this\007"
        echo -n -e "\033]2;Set window title to this\007"
        

        注意:正如Elia Schito 所说,您可以将这些控制台代码放在 $PS1 中,以便更新您输入的每个命令。

        【讨论】:

          【解决方案8】:

          这是我需要做的:

          tell application "Terminal"
            do script "DISABLE_AUTO_TITLE=true" in selected tab of the front window
            do script "echo -n -e \"\\033]0;" & title & "\\007\";" in selected tab of the front window
          end tell
          

          ZSH 需要第一行。

          但是,它仍然不适用于长时间运行的进程,因为它们的名称继续主导选项卡标题。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-06-15
            • 2020-12-11
            • 2011-02-02
            • 1970-01-01
            • 2011-11-02
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多