从命令行更改 konsole 选项卡标题并使其持久化?
Posted
技术标签:
【中文标题】从命令行更改 konsole 选项卡标题并使其持久化?【英文标题】:Change konsole tab title from command line and make it persistent? 【发布时间】:2013-11-22 17:58:42 【问题描述】:如何更改 konsole 选项卡标题?默认情况下,它设置为%u : %n
,因此它总是会自动更改。
我可以这样设置:
qdbus org.kde.konsole $KONSOLE_DBUS_SESSION setTitle 1 "My Title"
但是一旦你在控制台中运行一些东西,它就会变回%u : %n
。当然。我可以将它设置为%w
,告诉它将标题设置为“shell 设置的窗口标题”,但稍后(如果我没有明确设置它),它将为空。 (除非我设置它,否则每个新标签都是空的。)
问题是如何使其持久化(或如何通过命令行切换配置文件)?我可以制作另一个标题格式设置为%w
的配置文件,然后在设置自定义标题之前切换到该配置文件。
编辑:我想我找到了答案
qdbus org.kde.konsole $KONSOLE_DBUS_SESSION setTabTitleFormat 0 "" qdbus org.kde.konsole $KONSOLE_DBUS_SESSION setTitle 0 "我的标题"
【问题讨论】:
这不起作用:dbus org.kde.konsole $KONSOLE_DBUS_SESSION setTabTitleFormat 0 ""在 org.kde.konsole 的对象 /Sessions/1 中找不到 '.setTabTitleFormat' 【参考方案1】:您可能需要使用此变体:
echo -ne "\033]30;test change title\007"
$ konsole -v
Qt: 4.8.6
KDE Development Platform: 4.13.3
Konsole: 2.13.2
【讨论】:
为我工作 konsole 16.08.1 并且在启动 SSH 会话后仍然存在 仅适用选项卡标题是“%w”,并且选项要在配置中启用窗口标题,请参阅稍后的回答@falko span> 【参考方案2】:Konsole -> 设置 -> 配置 Konsole ...
启用选项“在标题栏上显示窗口标题” 然后在控制台中运行:
echo -ne "\033]2;test change title\007"
【讨论】:
找不到你提到的菜单,我在 centos 6.4 x64 上,命令行在 bash 和 tcsh shell 中不起作用(顺便说一句,我们的默认 shell 是 tcsh) 哦 echo 命令正在运行,但我首先需要将选项卡标题格式设置为 %w(由 shell 设置的窗口标题) 将选项卡标题格式设置为 %w(由 shell 设置的窗口标题) printf "\033]2;test change title\007" 或 echo "\033]2;test change title\007" 或/bin/echo -ne "\033]2;测试更改标题\007"【参考方案3】:konsole -p tabtitle='some title: %w'
如需更多选项,请尝试konsole --list-profile-properties
。
【讨论】:
这是最好的答案! 这会打开一个新窗口,而不是更改当前选项卡的标题(版本 17.12.3)。 能告诉我如何设置konsole标签栏标题高度吗?【参考方案4】:针对这个老问题发布我自己的解决方案,因为
OP 解决方案不适用于较新的(?)KDE 系统,因为服务名称硬编码为org.kde.konsole
基于 echo
的答案需要永久更改 konsole 设置
在阅读了 konsole 文档中的 Scripting Konsole 章节后,我编写了这些 bash 函数,这些函数可以添加到 $HOME/.bashrc
:
set-konsole-tab-title-type ()
local _title="$1"
local _type=$2:-0
[[ -z "$_title" ]] && return 1
[[ -z "$KONSOLE_DBUS_SERVICE" ]] && return 1
[[ -z "$KONSOLE_DBUS_SESSION" ]] && return 1
qdbus-qt5 >/dev/null "$KONSOLE_DBUS_SERVICE" "$KONSOLE_DBUS_SESSION" setTabTitleFormat "$_type" "$_title"
set-konsole-tab-title ()
set-konsole-tab-title-type "$1" && set-konsole-tab-title-type "$1" 1
示例 1:设置本地和远程选项卡格式
$ set-konsole-tab-title test
示例 2:保持远程标签格式不变
$ set-konsole-tab-title-type test
示例 3:保持本地选项卡格式不变
$ set-konsole-tab-title-type test 1
对于echo
解决方案,您还可以使用此功能将选项卡标题动态设置为%w
。
注意
以上代码假定为 KDE Plasma/Qt5。对于 KDE4/Qt4,您需要将 qdbus-qt5
替换为 qdbus
【讨论】:
注明。建议 Konsole 和 KWIN 的 KDE Framework Gear 倡议团队将其工作到文档和 ci 管道中,并将此处的 .sh 逻辑转换为 Konsole Qt5/6/C++ 二进制逻辑。我还没有尝试过,但怀疑这是解决 Konsole/Plasma 终端与其他终端的尴尬不足的关键。希望它也可以根据标题条件提供 KWIN 反应性/响应(除了 .desktop 或 .profile 或直接来自 Konsole 命令的属性分配)。【参考方案5】:this answer 由Stefan Becker 改进。
此脚本接受多个单词作为标题。您可以使用它来更改远程和本地标题。没有参数,它设置为默认标题。
我叫它setTitle
#!/bin/bash
titleLocal=$1:-%d : %n
titleRemote=$2:-(%u) %H
set-konsole-tab-title-type()
local _title="$1"
local _type=$2:-0
[[ -z "$_title" ]] && return 1
[[ -z "$KONSOLE_DBUS_SERVICE" ]] && return 1
[[ -z "$KONSOLE_DBUS_SESSION" ]] && return 1
qdbus >/dev/null "$KONSOLE_DBUS_SERVICE" "$KONSOLE_DBUS_SESSION" setTabTitleFormat "$_type" "$_title"
set-konsole-tab-title-type "$titleLocal" && set-konsole-tab-title-type "$titleRemote" 1
更改两个标题:
setTitle "My Local Title" "My Remote Title"
仅更改本地标题:
setTitle "My Local Title"
仅更改远程标题:
setTitle "" "My Remote Title"
更改为默认值:
setTitle
【讨论】:
是否可以在某些部分使用 html 标签,例如 BOLD?例如“在两个小时内喂猫”。其中 cat 将是粗体 e。 G。 猫. 不能使用 HTML 标签。【参考方案6】:You may need to use this variant:
`echo -ne "\033]30;test change title\007"`
$ konsole -v
Qt: 4.8.6
KDE Development Platform: 4.13.3
Konsole: 2.13.2
我从不喜欢为 konsole windows 设置标题,然后我看到了 Tim 的评论。这对我来说是一个很大的进步。谢谢你,蒂姆!!
但这并没有把我带到我想去的地方。
我不想在给定的命令行示例中键入内容,因为我的记忆力很差,从现在起 3 周后,我将不记得变体的字符序列。
我希望能够创建一个别名来允许我执行以下操作:
define an alias 'T' for my shell (tcsh in my case) so that I can enter:
T titleName
and another alias 'DT' so that I can enter:
DT titleName
“T”别名将窗口标题更改为“titleName”,别名“DT”将窗口标题更改为“%d titleName”,其中 %d 是目录名称。
这需要一些实验。值得一提的是,我首先尝试编辑我的 .cshrc 是迈出了糟糕的第一步。我无法让反斜杠转义正常工作,不确定转义何时发生:读取 .cshrc 文件或运行别名时。经过几分钟的挫折,我尝试先定义别名,逐个字符,循环:
a) add a new character to the alias
b) echo the current alias by enter 'alias T' to verify the csh interpretation
c) add backslashes as needed
d) verify again.
这很奏效,我的别名在一两分钟内就可以工作了。一旦别名工作,我只是将它们复制并粘贴到我的 .cshrc 文件中,并且别名都工作。我的工作别名是:
别名 T echo -ne \"\033]30\;\$Z\007\"
和
别名 DT echo -ne \"\033]30\;\%d\ \$Z\007\"
请注意,我必须使用环境变量“Z”来使别名“可变”。不是太优雅,但它在很大程度上满足了我。因此,在更改了我的 .cshrc 并在窗口外壳中获取 .cshrc 文件之后,我这样做了
set Z=Example
T
or
set Z=Example2
DT
我得到了我的标题集。当我更改为不同的任务时,我将 Z 更改为新名称并再次运行我的别名“T”或“DT”。
【讨论】:
【参考方案7】:要在新标签上设置标题“MyTitle”,正确的语法是:
konsole --new-tab -p "RemoteTabTitleFormat=MyTitle" ...
(在 Konsole 版本 17.12.3、S.O. Kubuntu 18.04 上测试)
【讨论】:
错误答案。这会打开一个新选项卡,而不是更改当前选项卡的窗口标题。以上是关于从命令行更改 konsole 选项卡标题并使其持久化?的主要内容,如果未能解决你的问题,请参考以下文章
每次当前选项卡在 TabBar 颤动中更改时,如何将新页面添加到导航器堆栈?