All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@git.madduck.net.
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
2 # Fancy setting of the xterm title
4 # Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
5 # Released under the terms of the Artistic Licence 2.0
7 # Source repository: http://git.madduck.net/v/etc/zsh.git
9 # Based on http://www.zshwiki.org/cgi-bin/wiki.pl?ZshHardStatus
12 autoload -U add-zsh-hook
18 (tmux|tmux-*) typ=tmux;;
19 (screen|screen-*) if [ -n "$TMUX" ]; then typ=tmux else typ=screen fi;;
24 (xterm) print -nR $'\033]0;'$*$'\a';;
26 print -nR $'\033k'$1$'\033'\\
27 print -nR $'\033]0;'$2$'\a'
29 (tmux) print -nR $'\033]2;'$*$'\a';;
33 __get_session_flags() {
35 [ -n "$SSH_CONNECTION" ] || return
37 [ -n "$DISPLAY" ] && flags+=x
38 [ -n "$SSH_AUTH_SOCK" ] && flags+=a
39 [[ $SSH_CLIENT = *:* ]] && flags+=6
40 [ -n "$flags" ] && echo "[${flags}]"
43 __get_standard_prompt() {
45 print -n "[${${(%):-%l}#pts/}]"
46 [[ -z $SSH_CLIENT ]] || print -nP "%m"
47 print -P "%#%25\<..\<%~ $(__get_session_flags)"
50 _set_plain_xterm_title() {
52 __set_xterm_title "$(__get_standard_prompt)"
54 add-zsh-hook precmd _set_plain_xterm_title
56 _set_cmd_xterm_title () {
58 local -a cmd; cmd=(${(z)1}) # Re-parse the command line
60 # Construct a command that will output the desired job number.
62 fg) if (( $#cmd == 1 )); then
63 # No arguments, must find the current job
64 cmd=(builtin jobs -l %+)
66 # Replace the command name, ignore extra args.
67 cmd=(builtin jobs -l ${(Q)cmd[2]})
69 %*) cmd=(builtin jobs -l ${(Q)cmd[1]});; # Same as "else" above
70 *) # Not resuming a job,
71 __set_xterm_title $cmd[1]:t${cmd[2]:+ }$cmd[2,-1] "| $(__get_standard_prompt)"
72 return;; # so we're all done
75 local -A jt; jt=(${(kv)jobtexts}) # Copy jobtexts for subshell
77 # Run the command, read its output, and look up the jobtext.
78 # Could parse $rest here, but $jobtexts (via $jt) is easier.
79 $cmd 2>/dev/null >>(read num rest; cmd=(${(z)${(e):-\$jt$num}};)
80 __set_xterm_title $leader$cmd[1]:t${cmd[2]:+ }$cmd[2,-1] "| $(__get_standard_prompt)"
83 add-zsh-hook preexec _set_cmd_xterm_title