spent some time on Christmas to share some of his shell configuration,
including different ways he uses prompts and colors.
I'll start with prompts.
I use zsh. My prompt looks like this:
# Long directory is truncated at the left
# I get exit status only if it is nonzero:
snack(~) % true
snack(~) % false
snack(~) !1! %
# if I am root, and using zsh, the '%' becomes '#'
This is all achieved with the following PS1 in zsh:
PS1='%m(%35<...<%~) %(?..!%?! )%# '
We have configurable prompts to give us all kinds of information, why? It's a
place to gather context from. I include host, directory, exit status, and an
"am i root" flag.
PS1 isn't the only place you can store useful state. I like to have similar
information in my terminal's titlebar, too. I use screen and xterm, and both
can be fed some delicious data.
I use this in my .screenrc, which tells screen to have some default status
format and tells screen how to change xterm's title. I have it include the
screen window number (%n), hostname (%h), and terminal title (%t):
hardstatus string "[%n] %h - %t"
termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen (not title yet)\007'
windowlist title "Num Name%=Location Flags"
windowlist string "%03n %t%=%h %f"
I also use this bit of .vimrc, which tells vim what kind of title I want, and
if the $TERM is screen, how to tell screen about it.
" Set title string and push it to xterm/screen window title
set titlestring=vim\ %<%F%(\ %)%m%h%w%=%l/%L-%P
if &term == "screen"
if &term == "screen" || &term == "xterm"
And then use this bit
of my zshrc
All of these combined together make for some pretty good terminal and screen
titles. The functions preexec, precmd, and title, mentioned below, come from
the above zshrc link.
The preexec function in my zshrc runs before each command execution and allows
me to change the terminal title to reflect the command I am running. It also
supports resumed execution of a process: if you run 'cat', then hit ^Z, then
type 'fg', the title will correctly be set to 'cat' again.
The precmd function runs before each prompt. Rather than cluttering up $PS1
with byte strings to set the title, I just make precmd set the title to 'zsh -
The title function takes care of any necessary escaping and also does nice
things like string truncation if it is too long (similar to how my $PS1 is
I only use vim's titlestring options because it gives me some better context on
what I am doing in vim at the time, mainly because vim allows you to edit
multiple files at once.
Here's an example of a few screen windows in a single screen session when
viewed in the windowlist:
The first 3 columns are most meaningful: number, name, and location. Note that
each location correctly identifies the host that shell is using. My zshrc
'title' function manages setting the name and the location.
The same data listed above is combined into the actual terminal's title. Window
2 above would have this title in xterm:
 jls - zsh - /home/jsissel
I mentioned above that I use screen and xterm together. I do this for
everything using run-xterm.sh.
This script will run screen in an xterm with a randomly chosen, dark color
background. I find the dark-random color selection quite a nice deviation from
the solid-black my desktop used to bear. Here's what it looks like if I run a
20+ xterms on a blank desktop: