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