如何使用 fish shell 设置 Terminal.app 的标题?

如何使用 fish shell 设置 Terminal.app 的标题?

我正在尝试鱼壳在 Mac OS X 中,使用 MacPorts 安装。我希望终端窗口的标题为当前目录。目前,标题只是说

Terminal - fish - 80x24

根据 fish 文档,默认fish_title函数应该提供这种行为。它在 Terminal.app 中没有做正确的事情,尽管它确实适用于终端。定义我自己的 fish_title 函数并不能解决问题。

有人能让这个工作吗?

答案1

我安装了 fish (1.23.1) 来调查这个问题。结果发现,只有当$TERM满足以下条件之一时,fish 才会更新标题:xtermscreennxtermrxvt。否则,它永远不会调用该fish_title函数。

Terminal 的默认值是xterm-256color,而在 Mac OS X Lion 10.7 之前是xterm-color,fish 都无法识别这两个值。Fish 对于它认为哪些 terminfo 值支持此功能过于保守。例如,fish_title不要求任何变体。xterm*

要解决此鱼类限制,您可以设置$TERMxterm。最简单的方法是使用终端首选项设置:

终端 > 首选项 > 设置 > [配置文件] > 高级 > 将终端声明为

从弹出菜单中选择xterm。此首选项控制的值$TERM(这就是它的全部功能)。

请注意,使用而不是终端的默认设置可能会禁用某些终端功能,或者在 Lion 之前,由于terminfo 描述和旧版本的终端xterm之间不兼容而导致不当行为。xterm

因此,如果 fish 不是您的默认 shell,您可能只想$TERM在调用 fish 时进行更改。例如,您可以TERM=xterm fish从 shell 调用 fish,或者您可以创建一个自定义终端设置配置文件以仅用于运行 fish(您可以设置“运行命令”首选项来调用 fish,因此使用此配置文件创建一个新的终端窗口或选项卡将自动运行 fish)。

或者,如果您不介意修改 fish:一旦您通过 MacPorts 或 Fink 安装它,您的机器上就有了源代码,您可以扩展其可识别的 $TERM 值列表,甚至可以更新代码以允许在可识别的值上添加后缀。例如,它至少应该允许任何以xterm或开头的值screen。否则,它甚至无法与常见screen变体一起使用。如果您这样做了,请将其贡献回 fish 项目。

答案2

如果你发现这个问题想知道如何更改 fish 中的窗口/选项卡标题,并且该fish_title功能适合你(请参阅Chris Page 的回答),那么这里有一个示例,将标题设置为使用工作目录的缩短版本。

$ funced fish_title

function fish_title
    if [ $_ = 'fish' ]
        echo (prompt_pwd)
    else
        echo $_
    end
end

$ funcsave fish_title

答案3

这可能与 的配置有关Terminal.app。我在 Leopard 上运行 Terminal 2.0.2,它允许我通过首选项配置窗口的标题(参见设置 -> 窗口)。

启用“shell 命令名称”可能会得到您想要的结果。默认设置只是显示,Terminal - $process - $size这可能会覆盖 fish 环境。

相关内容