Commit 6fc810e

Eric Bower  ·  2026-08-11 12:27:34 -0400 EDT
parent 6e94820
fix: window title changes
1 files changed,  +26, -25
+26, -25
 1@@ -76,41 +76,42 @@ PS1='${LOGNAME}@${HOSTNAME%%.*} '$PS1
 2 
 3 # find escape sequence to change terminal window title
 4 case "$TERM" in
 5-  (xterm|xterm[+-]*|gnome|gnome[+-]*|putty|putty[+-]*|cygwin)
 6-    _tsl='\033];' _fsl='\a' ;;
 7+  (xterm*|gnome*|putty*|cygwin*|alacritty*|foot*|kitty*|wezterm*|ghostty*|rxvt*|st*|tmux*|screen*|rio*|contour*)
 8+    _tsl='\033]0;' _fsl='\a' ;;
 9   (*)
10     _tsl=$( (tput tsl 0; echo) 2>/dev/null |
11     sed -e 's/\\/\\\\/g' -e 's/%/%%/g')
12     _fsl=$( (tput fsl  ; echo) 2>/dev/null |
13-    sed -e 's/\\/\\\\/g' -e 's/%/%%/g') ;;
14+    sed -e 's/\\/\\\\/g' -e 's/%/%%/g')
15+    if [ -z "$_tsl" ] || [ -z "$_fsl" ]; then
16+      if [ "${TERM:-dumb}" != "dumb" ] && [ "${TERM:-dumb}" != "linux" ]; then
17+        _tsl='\033]0;' _fsl='\a'
18+      fi
19+    fi
20+    ;;
21 esac
22 # if terminal window title can be changed...
23 if [ "$_tsl" ] && [ "$_fsl" ]; then
24   # set terminal window title on each prompt
25-  _set_term_title()
26-  if [ -t 2 ]; then
27-    printf "$_tsl"'%s@%s:%s'"$_fsl" "${LOGNAME}" "${HOSTNAME%%.*}" \
28-      "${${PWD:/$HOME/\~}/#$HOME\//\~\/}" >&2
29-  fi
30-  PROMPT_COMMAND=("$PROMPT_COMMAND" '_set_term_title')
31-
32-  # reset window title when changing host or user
33-  ssh() {
34-    if [ -t 2 ]; then printf "$_tsl"'ssh %s'"$_fsl" "$*" >&2; fi
35-    command ssh "$@"
36+  _set_term_title() {
37+    if [ -t 2 ]; then
38+      printf "$_tsl"'%s@%s:%s'"$_fsl" "${LOGNAME}" "${HOSTNAME%%.*}" \
39+        "${${PWD:/$HOME/\~}/#$HOME\//\~\/}" >&2
40+    fi
41   }
42-  su() {
43-    if [ -t 2 ]; then printf "$_tsl"'su %s'"$_fsl" "$*" >&2; fi
44-    command su "$@"
45-  }
46-  sudo() {
47-    if [ -t 2 ]; then printf "$_tsl"'sudo %s'"$_fsl" "$*" >&2; fi
48-    command sudo "$@"
49-  }
50-  doas() {
51-    if [ -t 2 ]; then printf "$_tsl"'doas %s'"$_fsl" "$*" >&2; fi
52-    command doas "$@"
53+  # set terminal window title when executing a command
54+  _set_cmd_title() {
55+    if [ -t 2 ] && [ -n "${COMMAND-}" ]; then
56+      local nl="
57+"
58+      local cmd="${COMMAND%%"$nl"*}"
59+      if [ -n "$cmd" ]; then
60+        printf "$_tsl"'%s'"$_fsl" "$cmd" >&2
61+      fi
62+    fi
63   }
64+  PROMPT_COMMAND=("$PROMPT_COMMAND" '_set_term_title')
65+  POST_PROMPT_COMMAND=("$POST_PROMPT_COMMAND" '_set_cmd_title')
66 fi
67 
68 _osc7_cwd() {