Change konsole tab title from command line and make it persistent?

江枫思渺然 提交于 2019-12-03 12:17:55

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 -> Settings -> Configure Konsole ...

Enable option "Show window title on the titlebar" then run in console:

echo -ne "\033]2;test change title\007" 

konsole -p tabtitle='some title: %w'

For more options try konsole --list-profile-properties.

Posting my own solution to this old question, because

  • OP solution does not work on newer(?) KDE systems due to the hard-coding of the service name to org.kde.konsole
  • the answers based on echo require a permanent change to konsole settings

After reading the Scripting Konsole chapter in the konsole documentation I wrote these bash functions which can be added to $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 >/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
}

Example 1: set both local & remote tab formats

$ set-konsole-tab-title test

Example 2: leave remote tab format unchanged

$ set-konsole-tab-title-type test

Example 3: leave local tab format unchanged

$ set-konsole-tab-title-type test 1

You can also use this function to set the tab title dynamically to %w for the echo solutions.

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

I was never happy with setting the title for konsole windows, then I saw Tim's comment. This was a big improvement for me. Thank you, Tim!!

But that did not quite get me where I wanted to be.

I wanted to go beyond typing in the given command line example because I have a terrible memory and 3 weeks from now, I will not remember the character sequence of the variant.

I wanted to be able to create an alias that would allow me to do the following:

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

The 'T' alias changes the window title to 'titleName' and the alias 'DT' changes the window title to '%d titleName' where %d is the directory name.

It took some experimenting. It is worth mentioning that I took a bad first step by trying to edit my .cshrc first. I could not quite get the backslash escaping to work correctly, not being sure when the escaping was taking place: when reading the .cshrc file or when running the alias. After a few minutes of frustration, I tried defining the alias first, character by character, in a cycle:

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.

This worked and I got my alias to work in a minute or two. Once the aliases were working, I just copied and pasted them into my .cshrc file and the aliases both worked. My working aliases are:

alias T echo -ne \"\033]30\;\$Z\007\"

and

alias DT echo -ne \"\033]30\;\%d\ \$Z\007\"

Note that I had to use the environment variable 'Z' to make the aliases 'variable'. Not too elegant, but it largely satisfies me. So after changing my .cshrc and sourcing the .cshrc file in the window shell, I do this

    set Z=Example
    T

or

    set Z=Example2
    DT

and I get my title set. When I change to a different task, I change Z to a new name and run my alias 'T' or 'DT' again.

Emanuele

To set title "MyTitle" on your new tab the right syntax is:

konsole --new-tab -p "RemoteTabTitleFormat=MyTitle" ...

(tested on Konsole version 17.12.3, S.O. Kubuntu 18.04)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!