
                             α xterm 
                                       
Ric Lister, ric@giccs.georgetown.edu
: Ԫ [1]yytseng@ms16.hinet.net

   v2.0, 1999 ʮ 27 
     _________________________________________________________________
   
   ĽʹλԶ̬ xterm Ӵͼʾ. , 
   ﷨. ¼гն˻ʹõλ.
     _________________________________________________________________
   
1. ҵļ

2. ̬

3. ̬

     * 3.1 xterm λ
     * 3.2 ӡЩ
       
4. ġ

     * 4.1 zsh
     * 4.2 tcsh
     * 4.3 bash
     * 4.4 ksh
     * 4.5 csh
       
5. ʾִеĹ

     * 5.1 zsh
     * 5.2 s
       
6. ¼: ʽն˻λ

     * 6.1 IBM aixterm
     * 6.2 SGI wsh, xwsh  winterm
     * 6.3 Sun cmdtool  shelltool
     * 6.4 CDE dtterm
     * 6.5 HPterm
       
7. ¼: Եġ

     * 7.1 C
     * 7.2 Perl
       
8. лCredits
     _________________________________________________________________
   
1. ҵļ

   ļ [2]Linux HOWTO Index һ, ҵ
   [3]http://sunsite.unc.edu/LDP/HOWTO/mini/Xterm-Title.html.
   
   °汾ĸļʽҵ
   [4]http://www.giccs.georgetown.edu/~ric/howto/Xterm-Title/.
   
   ȡԭ Winfried Tr&uuml;mper д howto.
   
2. ̬

   һն˻ xterm, color-xterm  rxvt Խ -T  -n Ĳ趨
   趨̬:
   
     xterm -T "My XTerm's Title" -n "My XTerm's Icon Title"
     
3. ̬

   ˷ʾһЩ̬Ѷʱ൱,  ʹ,
   еĹĿ¼, ȵ.
   
3.1 xterm λ

   һִе xterm Ӵͼʾⶼ͸λ. 
   趨йص:
     * ESC]0;stringBEL -- 趨ͼʾӴΪ string
     * ESC]1;stringBEL -- 趨ͼʾΪ string
     * ESC]2;stringBEL -- 趨ӴΪ string
       
    ESC ָ escape Ԫ (\033), BEL ָ bell Ԫ (\007).
   
    xterm ͷͿʹӴͼʾ.
   
   ע: ЩпӦõ󲿷 xterm ĳʽ,  nxterm,
   color-xterm  rxvt.  ն˻ʹʹòһ; ο¼
   оٵġ. Ҫο xterm еλвο [5]ctlseq2.txt,
    xterm ׼,  [6]xterm.seq,  [7]rxvt ׼.
   
3.2 ӡЩ

   ЩѶʼն,    ʹ
   , ĳʼ (rc file)  echo ָӡЩ
   ͹:
   
echo -n "\033]0;${USER}@${HOST}\007"

   Ӧû username@hostname , ı $USER
    $HOST 趨ȷĻ. echo ѡʹõͶ
   ͬ (ο˵).
   
   ЩѶһֱڱ,  йĿ¼, Щ
   λѶͱÿʾԪ仯ʱı. ִͻÿ
   ʱ, 㻹׷ٱ Ŀ¼, ʹ, , Ѷ. 
   ṩ;⹦, Щû. ǾͱֱӲ
   λѶʾִ. һ˵
   
4. ġ

   ṦһЩʹ. ȴ zsh ʼ, 
   ɵĻʹǺ׵ҪĹ. Ȼٽչ
   Ƚϸߵġ.
   
   еġǶ $TERM . ȷֻλѶ
   ͵ xterm. Ƕ $TERM=xterm* ; ԪΪЩĲ (
    rxvt) 趨 $TERM=xterm-color.
   
   Ҫ C  (C Shell) ϵرע,  tcsh  csh. 
   C , ʹõδıԵĴ. , ڲԱ
   $TERM ֮ǰ, ȷǷڷʹڷǽ̸ģʽ¹ͣ
   . ҪﵽĿѲݶʽ:
   
  if ($?TERM) then
      ...
  endif

   (ǲ C  ֮һ. ο [8]Csh Programming
   Considered Harmful кܶõ).
   
   µġԱ뵽ʵĳʼ;  Ǹڽ̸ʽ
   ʱȥǸ. ڴ󲿷ݵΪ .rc
   ( .zshrc, .tcshrc, ).
   
4.1 zsh

   zsh ṩݹ칦, ǽõ:
   
precmd ()   һʾǰִеĹܺʽ
chpwd ()    һĿ¼仯ʱִеĹܺʽ
\e          λԪ (ESC)
\a          bell λԪ (BEL)
%n          Ϊ $USERNAME
%m          Ϊڵһ '.' ֮ǰĲ
%~          ΪĿ¼,  '~' ȡ $HOME

   칦: ο zshmisc ʹֲ.
   
   , ½趨 xterm Ϊ "username@hostname: directory":
   
case $TERM in
    xterm*)
        precmd () {print -Pn "\e]0;%n@%m: %~\a"}
        ;;
esac

   Ҳ chpwd() ȡ precmd() . print ڽĹǸ echo һ
   , ȥȡ % ʾλѶ.
   
4.2 tcsh

   tcsh Ĳݹܺʽ칦 zsh ͬ:
   
precmd ()   һʾǰִеĹܺʽ
cwdcmd ()   һĿ¼仯ʱִеĹܺʽ
%n          Ϊ $USERNAME
%m          Ϊ
%~          ΪĿ¼,  '~' ȡ $HOME
%#          ʹ߽Ϊ '>', ʹΪ '#'
%{...%}     һִΪλ

   ҵ, û zsh  print ָͬܵ, ִʹ
   ʾλѶ, Ψһʹõ ( ~/.tcshrc):
   
switch ($TERM)
    case "xterm*":
        alias precmd 'echo -n "\033]0;${HOST}:$cwd\007"'
        breaksw
endsw

   Ȼ, Ŀ¼·ȡʹ ~. İЩִʾԪ:
   
switch ($TERM)
    case "xterm*":
        set prompt="%{\033]0;%n@%m:%~\007%}tcsh%# "
        breaksw
    default:
        set prompt="tcsh%# "
        breaksw
endsw

   趨 "tcsh% " ʾԪ,  xterm ⼰ͼʾΪ
   "username@hostname: directory". Ҫע "%{...%}" 뻷λ
   (Ҳܱ ʾһ: ο tcsh ʹֲ˵ϸ).
   
4.3 bash

   bash ֧Ԯ $PROMPT_COMMAND ںһָʾԪ֮ǰִ. 
   趨Ϊ username@hostname: directory:
   
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'

    \033 ǴԪ ESC,  \007  BEL.
   
   ס൱Ҫ: ᱻ͵ıǷ "...",  '...'. 
   $PROMPT_COMMAND Ǳ趨Ϊһ͵ֵ,  "..." õ
   $PROMPT_COMMAND ᱻ.
   
   Ȼ, $PWD ·. Ҫʹ ~ ټ, Ҫλ
   Ƕ뵽ʾԪ, ǿṩ칦:
   
\u          Ϊ $USERNAME
\h          Ϊڵһ '.' ֮ǰĲ
\w          ΪĿ¼,  '~' ȡ $HOME
\$          ʹ߽Ϊ '>', ʹΪ '#'
\[...\]     ǶӡԪλ

   , ½ bash$ ʾԪ, 趨 xterm Ϊ
   username@hostname: directory:
   
case $TERM in
    xterm*)
        PS1="\[\033]0;\u@\h: \w\007\]bash\\$ "
        ;;
    *)
        PS1="bash\\$ "
        ;;
esac

   ס \[...\] ʹ, ڼʾʱ,  bash ԵӡĿ
   Ԫ. б༭ָƶαʱҵ.
   
4.4 ksh

   ksh ṩַʽĹܺʽ칦, Ǳλִ
   ʾԪ, ʹ̬ܶ Ϊ username@hostname:
   directory and a prompt of ksh$ .
   
case $TERM in
    xterm*)
        HOST=`hostname`
        PS1='^[]0;${USER}@${HOST}: ${PWD}^Gksh$ '
        ;;
    *)
        PS1='ksh$ '
        ;;
esac

   , $PWD Ŀ¼·. ǿ  ${...##...} ķʽȥ
   $HOME/ . Ҳ ${...%%...} ķȥݵ hostname:
   
HOST=`hostname`
HOST=${HOST%%.*}
PS1='^[]0;${USER}@${HOST}: ${PWD##${HOME}/}^Gksh$ '

   ס ^[  ^G ִǵһԪ  ESC  BEL ( emacs Ļ¿
    C-q ESC  C-q C-g ).
   
4.5 csh

   Ҫ csh ͬе, ķʽ:
   
switch ($TERM)
    case "xterm*":
        set host=`hostname`
        alias cd 'cd \!*; echo -n "^[]0;${user}@${host}: ${cwd}^Gcsh% "'
        breaksw
    default:
        set prompt='csh% '
        breaksw
endsw

   鷳ĵطҪ cd ָɿͳλִĹ. ס ^[ 
   ^G ִǵһԪ ESC  BEL ( emacs Ļ¿ C-q
   ESC  C-q C-g ).
   
   ס: ڲݵϵͳ hostname -s ܻȡý϶̵ hostname ȫ
   . ʹзĿ¼Ӧûᷢ `pwd` (ȷִе
   pwd ָ) Եõ $cwd ȷ·.
   
5. ʾִеĹ

   ͨʹ߻һһֱǰִеĹ top,  һ༭, һ
   email û, ȵ, ϣƱʾ xterm . Ǹ
   ֵֻܼ zsh ¿.
   
5.1 zsh

   zsh Ϊṩһڽ:
   
preexec()   һִǰһõĹܺʽ
$*,$1,...   ͵ preexec() Ĳ

   , ǿķʽѹƷŵ:
   
case $TERM in
    xterm*)
      preexec () {
        print -Pn "\e]0;$*\a"
      }
    ;;
esac

   ס: preexec() ܺʽ zsh 3.1.2 , õİ汾ϾǾҪ
   һ.
   
5.2 s

   ȱ preexec() ʽ, Ͳ. κС
   ͬĹ email .
   
6. ¼: ʽն˻λ

   ʽն˻ xterm  rxvt ֧Ԯʹõλ. ĳ
   Щרն˻ֲͬ unix ʹֶλ.
   
6.1 IBM aixterm

   aixterm Աʶ xterm λ.
   
6.2 SGI wsh, xwsh  winterm

   ն˻趨 $TERM=iris-ansi еλ:
     * ESCP1.ystringESC\ 趨ӴΪ string
     * ESCP3.ystringESC\ 趨ͼʾΪ string
       
    xwsh λпԲο xwsh(1G) ʹ˵.
   
   Irix ն˻֧Ԯ xterm 趨ӴͼʾĹ, ߶
   .
   
6.3 Sun cmdtool  shelltool

   cmdtool  shelltool 趨 $TERM=sun-cmd еλ:
     * ESC]lstringESC\ 趨ӴΪ string
     * ESC]LstringESC\ 趨ͼʾΪ string
       
   ЩǺܿµĳʽ: ʹ.
   
6.4 CDE dtterm

   dtterm 趨 $TERM=dtterm, ƺǿʶ׼ xterm λм
   Sun cmdtool λ ( Solaris 2.5.1, Digital Unix 4.0, HP-UX
   10.20 Թ).
   
6.5 HPterm

   hpterm 趨 $TERM=hpterm еλ:
     * ESC&f0klengthDstring 趨ӴΪ length  string
     * ESC&f-1klengthDstring 趨ͼʾΪ length  string
       
   һ򵥵 C Եĳʽ㳤ȲӦִ, :
   
#include <string.h>
int main(int argc, char *argv[])
{
    printf("\033&f0k%dD%s", strlen(argv[1]), argv[1]);
    printf("\033&f-1k%dD%s", strlen(argv[1]), argv[1]);
    return(0);
}

   ҲдһСű,  ${#string} (zsh, bash, ksh) 
   ${%string} (tcsh) 칦ҳִ. ¿ zsh:
   
case $TERM in
    hpterm)
        str="\e]0;%n@%m: %~\a"
        precmd () {print -Pn "\e&f0k${#str}D${str}"}
        precmd () {print -Pn "\e&f-1k${#str}D${str}"}
        ;;
esac

7. ¼: Եġ

   дһСʽ xterm λܰѴݵĲ. һЩ.
   
7.1 C

#include <stdio.h>

int main (int argc, char *argv[]) {
  printf("%c]0;%s%c", '\033', argv[1], '\007');
  return(0);
}

7.2 Perl

#!/usr/bin/perl
print "\033]0;@ARGV\007";

8. лCredits

   лλṩ, , Ϊɫ.
   
   Paul D. Smith <psmith@BayNetworks.COM>  Christophe Martin
   <cmartin@ipnl.in2p3.fr> λָ bash $PROMPT_COMMAND Ĵ
   . ȷķ仯  ̬չ.
   
   Paul D. Smith <psmith@BayNetworks.COM>  bash ʹ \[...\] 
   ϲʾԪ.
   
   Christophe Martin <cmartin@ipnl.in2p3.fr> ṩ ksh Ľ.
   
   Keith Turner <keith@silvaco.com> ṩ Sun  cmdtool  shelltool ʹ
   õλ.
   
   Jean-Albert Ferrez <ferrez@dma.epfl.ch> ָ "PWD"  "$PWD" ì֮
   ,  "\"  "\\" ÷.
   
   Bob Ellison <papillo@hpellis.fc.hp.com>  Jim Searle
   <jims@broadcom.com>  HP-UX µ dtterm.
   
   Teng-Fong Seak <seak@drfc.cad.cea.fr>  -s ѡ hostname, ʹ
   `pwd`, Լ  csh ʹ echo .
   
   Trilia <trilia@nmia.com> Ե÷.
   
   Brian Miller <bmiller@telstra.com.au>  hpterm λ.
   
   Lenny Mastrototaro <lenny@click3x.com>  Irix ն˻, ʹ
   xterm λ.
   
   Paolo Supino <paolo@init.co.il>  bash ʾ² \\$.

References

   1. mailto:yytseng@ms16.hinet.net
   2. http://sunsite.unc.edu/LDP/HOWTO/
   3. http://sunsite.unc.edu/LDP/HOWTO/mini/Xterm-Title.html
   4. http://www.giccs.georgetown.edu/~ric/howto/Xterm-Title/
   5. http://www.giccs.georgetown.edu/~ric/howto/Xterm-Title/ctlseq2.txt
   6. http://www.giccs.georgetown.edu/~ric/howto/Xterm-Title/xterm.seq
   7. http://www.rxvt.org/
   8. http://language.perl.com/versus/csh.whynot
