diff options
author | Kerin Millar <kfm@plushkava.net> | 2024-06-15 04:59:11 +0100 |
---|---|---|
committer | Sam James <sam@gentoo.org> | 2024-06-15 05:39:29 +0100 |
commit | b35701d05b15a831d8319c046203f7a70be339cb (patch) | |
tree | ecab01aefdda3fb56a82ebbd0dceb993a475be37 /app-shells | |
parent | dev-python/cherrypy: Bump to 18.10.0 (diff) | |
download | gentoo-b35701d05b15a831d8319c046203f7a70be339cb.tar.gz gentoo-b35701d05b15a831d8319c046203f7a70be339cb.tar.bz2 gentoo-b35701d05b15a831d8319c046203f7a70be339cb.zip |
app-shells/bash: declare the genfun_set_win_title function unconditionally
Presently, revisions 5.1_p16-r10, 5.2_p26-r3 and bash-5.3_alpha-r2
refrain from declaring the genfun_set_win_title function at all in the
case that the tty belongs to sshd(8). This is to avoid cluttering the
shell's operating environment in situations where the decision is made
not to append 'genfun_set_win_title' to the PROMPT_COMMANDS array.
One might ask why it should not always be appended to the array. The
explanation for this is that Gentoo Linux does not exist in a vacuum;
not all operating systems default to initialising bash in such a way
that it can be assumed that the title will be set at each prompt (or at
all). Where SSH is involved, the server has no knowledge whatsoever of
the particulars of the client OS or its operating environment. This
would previously give rise to the following scenario.
1. User runs ssh(1) from non-Gentoo to connect to sshd(8) on Gentoo
2. The remote shell alters the window title
3. The user eventually exits the remote shell.
4. The window title is never restored to its prior value
Put simply, there is no way for the remote side to know what the
existing window title is, much less guarantee that it be restored on the
client side.
All that being said - and rather unsurprisingly - some Gentoo users will
care nothing for these considerations or are simply operating in a
homogenous environment where they are not an immediate concern. Try to
accommodate the wishes of such users more effectively by declaring the
function unconditionally. Consequently, they will have the option of
restoring Gentoo's historical behaviour in a somewhat straightforward
manner. That is, by setting PROMPT_COMMAND in ~/.bashrc or in an
/etc/bash/bashrc.d/ drop-in to the effect of the following.
PROMPT_COMMAND=(genfun_set_win_title)
Signed-off-by: Kerin Millar <kfm@plushkava.net>
Bug: https://bugs.gentoo.org/934309
Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'app-shells')
-rw-r--r-- | app-shells/bash/bash-5.1_p16-r11.ebuild (renamed from app-shells/bash/bash-5.1_p16-r10.ebuild) | 0 | ||||
-rw-r--r-- | app-shells/bash/bash-5.2_p26-r4.ebuild (renamed from app-shells/bash/bash-5.2_p26-r3.ebuild) | 0 | ||||
-rw-r--r-- | app-shells/bash/bash-5.3_alpha-r3.ebuild (renamed from app-shells/bash/bash-5.3_alpha-r2.ebuild) | 0 | ||||
-rw-r--r-- | app-shells/bash/files/bashrc.d/10-gentoo-title.bash | 49 |
4 files changed, 29 insertions, 20 deletions
diff --git a/app-shells/bash/bash-5.1_p16-r10.ebuild b/app-shells/bash/bash-5.1_p16-r11.ebuild index 863a03b120bd..863a03b120bd 100644 --- a/app-shells/bash/bash-5.1_p16-r10.ebuild +++ b/app-shells/bash/bash-5.1_p16-r11.ebuild diff --git a/app-shells/bash/bash-5.2_p26-r3.ebuild b/app-shells/bash/bash-5.2_p26-r4.ebuild index 980ea4fdba51..980ea4fdba51 100644 --- a/app-shells/bash/bash-5.2_p26-r3.ebuild +++ b/app-shells/bash/bash-5.2_p26-r4.ebuild diff --git a/app-shells/bash/bash-5.3_alpha-r2.ebuild b/app-shells/bash/bash-5.3_alpha-r3.ebuild index 248f30b7b4e1..248f30b7b4e1 100644 --- a/app-shells/bash/bash-5.3_alpha-r2.ebuild +++ b/app-shells/bash/bash-5.3_alpha-r3.ebuild diff --git a/app-shells/bash/files/bashrc.d/10-gentoo-title.bash b/app-shells/bash/files/bashrc.d/10-gentoo-title.bash index 1fbf17c26327..0246d4fa36f0 100644 --- a/app-shells/bash/files/bashrc.d/10-gentoo-title.bash +++ b/app-shells/bash/files/bashrc.d/10-gentoo-title.bash @@ -1,5 +1,31 @@ # /etc/bash/bashrc.d/10-gentoo-title.bash +genfun_set_win_title() { + # Assigns the basename of the current working directory, having + # sanitised it with @Q parameter expansion. Useful for paths containing + # newlines and such. As a special case, names consisting entirely of + # graphemes shall not undergo the expansion, for reasons of cleanliness. + genfun_sanitise_cwd() { + _cwd=${PWD##*/} + if [[ ! ${_cwd} ]]; then + _cwd=${PWD} + elif [[ ${_cwd} == *[![:graph:]]* ]]; then + _cwd=${_cwd@Q} + fi + } + + # Sets the window title with the Set Text Parameters sequence. For + # screen, the sequence defines the hardstatus (%h) and for tmux, the + # window_name (#W). For graphical terminal emulators, it is normal for + # the title bar be affected. + genfun_set_win_title() { + genfun_sanitise_cwd + printf '\033]2;%s@%s - %s\007' "${USER}" "${HOSTNAME%%.*}" "${_cwd}" + } + + genfun_set_win_title +} + # Set window title with the Title Definition String sequence. For screen, the # sequence defines the window title (%t) and for tmux, the pane_title (#T). # For tmux to be affected requires that its allow-rename option be enabled. @@ -15,27 +41,14 @@ case ${TERM} in # If the TTY is that of sshd(8) then proceed no further. Alas, # there exist many operating environments in which the window # title would otherwise not be restored upon ssh(1) exiting. + # Users wishing to coerce the historical behaviour have the + # option of setting PROMPT_COMMAND=(genfun_set_win_title). if [[ ${SSH_TTY} && ${SSH_TTY} == "$(tty)" ]]; then return fi esac -# Assigns the basename of the current working directory, having sanitised it -# with @Q parameter expansion. Useful for paths containing newlines and such. -# As a special case, names consisting entirely of graphemes shall not undergo -# the parameter expansion, for reasons of cleanliness. -genfun_sanitise_cwd() { - _cwd=${PWD##*/} - if [[ ! ${_cwd} ]]; then - _cwd=${PWD} - elif [[ ${_cwd} == *[![:graph:]]* ]]; then - _cwd=${_cwd@Q} - fi -} - -# Set window title with the Set Text Parameters sequence. For screen, the -# sequence defines the hardstatus (%h) and for tmux, the window_name (#W). -# For graphical terminal emulators, it is normal for the title bar be affected. +# Determine whether the terminal can handle the Set Text Parameters sequence. # The only terminals permitted here are those for which there is empirical # evidence that the sequence is supported and that the UTF-8 character encoding # is handled correctly. Quite rightly, this precludes many vintage terminals. @@ -48,9 +61,5 @@ case ${TERM} in st-256color |\ tmux* |\ xterm* ) - genfun_set_win_title() { - genfun_sanitise_cwd - printf '\033]2;%s@%s - %s\007' "${USER}" "${HOSTNAME%%.*}" "${_cwd}" - } PROMPT_COMMAND+=('genfun_set_win_title') esac |