Question

I want to change the title everytime I enter a new directory ( when using cd ), but show only the last 2 directories. I'm using tcsh at work and bash at home. For example: if I'm at folder ~/work/stuff and I write: cd 1.1, I want my new title to be stuff/1.1.

I already know how to change the title everytime I change the folder:

alias cd 'cd \!*; echo "\033]0;`pwd`\a"'

And I know how to take only the 2 last directories:

pwd | awk -F / -v q="/" '{print $(NF-1)q$NF}'

The question is how to combine these two, or how to do it in a different way? It doesn't have to be through alias to cd.

Was it helpful?

Solution

What I did was creating a script file named titleRename.tcsh with the following code:

#!/bin/tcsh -f

set fullpath = "`pwd`\a"
set newTitle = `echo $fullpath | awk -F / '{OFS="/"; if(NF > 2){printf $(NF-2);printf "/"; printf $(NF-1); printf "/"; print $NF;}else print $0}'`
echo "\033]0;$newTitle"

It splits the pwd with awk, getting only the last 3 directories, and then it prints to the tab name. Then I added in the .alias file the following:

alias cd    'cd \!*; <dir of script file>/titleRename.tcsh'

Now the title name changes automatically whenever I cd to a different directory :)

OTHER TIPS

I originally thought you should be able to use the full command where you have pwd in backticks in the alias ie:

alias cd 'cd \!*; echo "\033]0;`pwd | awk -F / -v q="/" '{print $(NF-1)q$NF}'`\a"'

but now I realise there may be problems with the nested quoting. And that wouldn't work in bash anyway; I don't think there's a way to access command parameters in an alias.

Instead of aliasing cd you should update the title with the prompt. I don't know tcsh, but in bash the normal way to do this sort of thing is with the special pseudo-variable PS1:

# Minimalist prompt
PS1="\$ "
# Additionally set terminal title to cwd
case "$TERM" in
xterm*|rxvt*)
    PROMPT_DIRTRIM=2
    PS1="\033]0;\w\a$PS1"
    ;;
*)
    ;;
esac

That won't trim the directory name quite the way you were doing it, but unfortunately I can't get the quoting right to be able to use the escape sequence in PROMPT_COMMAND.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top