]> git.donarmstrong.com Git - zsh.git/blob - .zsh/zshrc/80_xtermtitle
8059ca88c2041044dddaca526af19722ae4edd81
[zsh.git] / .zsh / zshrc / 80_xtermtitle
1 # zshrc/80_xtermtitle
2 #
3 # Fancy setting of the xterm title
4 #
5 # Copyright © 1994–2008 martin f. krafft <madduck@madduck.net>
6 # Released under the terms of the Artistic Licence 2.0
7 #
8 # Source repository: git://git.madduck.net/etc/zsh.git
9 #
10 # Based on http://www.zshwiki.org/cgi-bin/wiki.pl?ZshHardStatus
11 #
12
13 __set_xterm_title() {
14   case $TERM in
15     screen)
16       print -nR $'\033k'$1$'\033'\\ 
17       print -nR $'\033]0;'$2$'\a'
18       ;;
19     xterm|rxvt*)
20       print -nR $'\033]0;'$*$'\a'
21       ;;
22   esac
23 }
24
25 __get_session_flags() {
26   [ -n "$SSH_CONNECTION" ] || return
27   local flags; flags=
28   [ -n "$DISPLAY" ] && flags="${flags}x"
29   [ -n "$SSH_AUTH_SOCK" ] && flags="${flags}a"
30   [[ $SSH_CLIENT = *:* ]] && flags="${flags}6"
31   [ -n "$flags" ] && echo "[${flags}]"
32 }
33
34 __get_standard_prompt() {
35   [[ -z $SSH_CLIENT ]] || print -nP "%m"
36   print -P "%#%25\<..\<%~ $(__get_session_flags)"
37 }
38
39 _set_plain_xterm_title() {
40   __set_xterm_title "$(__get_standard_prompt)"
41 }
42 precmd_functions+=_set_plain_xterm_title
43
44 _set_cmd_xterm_title () {
45     local -a cmd; cmd=(${(z)1})             # Re-parse the command line
46
47     # Construct a command that will output the desired job number.
48     case $cmd[1] in
49         fg) if (( $#cmd == 1 )); then
50                 # No arguments, must find the current job
51                 cmd=(builtin jobs -l %+)
52             else
53                 # Replace the command name, ignore extra args.
54                 cmd=(builtin jobs -l ${(Q)cmd[2]})
55             fi;;
56         %*) cmd=(builtin jobs -l ${(Q)cmd[1]});; # Same as "else" above
57         *) # Not resuming a job,
58             __set_xterm_title $cmd[1]:t${cmd[2]:+ }$cmd[2,-1] "| $(__get_standard_prompt)"
59             return;;                        # so we're all done
60     esac
61
62     local -A jt; jt=(${(kv)jobtexts})       # Copy jobtexts for subshell
63
64     # Run the command, read its output, and look up the jobtext.
65     # Could parse $rest here, but $jobtexts (via $jt) is easier.
66     $cmd >>(
67               read num rest
68               cmd=(${(z)${(e):-\$jt$num}})
69               __set_xterm_title $leader$cmd[1]:t${cmd[2]:+ }$cmd[2,-1] "| $(__get_standard_prompt)"
70            )
71 }
72 preexec_functions+=_set_cmd_xterm_title
73
74 # vim:ft=zsh