How to display the current command line in an xterm title with Bash
At the time of writing, the bash(1) shell
has a variable PROMPT_COMMAND, whose contents
is executed just before each prompt appears. For example, if we type
% PROMPT_COMMAND='echo -ne "\033]0;${PWD}\007"'
then the xterm title will contain the current working directory, and this
is updated after each command is executed, just before the new prompt.
Unfortunately, this is not suitable for displaying the currently executing
shell command, since PROMPT_COMMAND is only called after the
current command has finished, which is often too late.
To display the current command line in the xterm title
right before it gets executed by bash(1), we can use the shell's programmable
completion facilities as follows: At the prompt %,
suppose the user has written
% some stuff <RETURN>
we want to change this to
% foo some stuff <TAB>
which, through programmable completion, executes the function fooF(),
changing the xterm title along the way. Afterwards, we change the command
line back to
% some stuff \n
That's it!
To implement the details, simply add the following code to
to your .bashrc file.
Note: starting with version 3, bash has several new environment
variables which can also be used to display the title of the current
command. See BASH_COMMAND, trap and DEBUG. The readline method above works
in earlier versions of bash, and of course in later versions.
|