Next Previous Contents

4. Manipulaciones de la barra de título de la Xterm

Pueden usarse secuencias de escape no imprimibles para producir efectos interesantes en los prompts. Para usar estas secuencias es necesario encerrarlas entre \[ y \], advirtiendo al bash de que ignore estas secuencias cuando calcule la longitud del prompt. No incluir estos delimitadores resulta en una colocación errónea del cursor en el código de edición de línea, ya que no conoce el tamaño real del prompt. Las secuencias de escape además deben ir precedidas de \033[ en bash anteriores a la versión 2, o por \033[ o \[e en versiones posteriores.

Si se intenta cambiar la barra de título de la Xterm con el prompt mientras se está en la consola, se producirá basura en el prompt. Para evitar esto, hay que comprobar la variable de entorno TERM para indicar que el prompt va a estar en una xterm

  function proml
  {
  case $TERM in
      xterm*)
          local TITLEBAR='\[\033]0;\u@\h:\w\007\]'
          ;;
      *)
          local TITLEBAR=''
          ;;
  esac

  PS1="${TITLEBAR}\
  [\$(date +%H%M)]\
  [\u@\h:\w]\
  \$ "
  PS2='> '
  PS4='+ '
  }

Esta es una función que puede ser añadida al ~/.bashrc. Entonces se podrá invocar a la función mediante su nombre. La función, como la cadena PS1, se almacena en el entorno. Una vez que la función ha dado valor a la cadena PS1, se puede eliminar la función del entorno con unset proml. Debido a que el prompt no puede cambiar de estar en una Xterm a estar en la consola, la variable TERM no se comprueba cada vez que se genera el prompt. He usado marcadores de comtinuación (contrabarras, \) en la definición del prompt, para permitir continuarlo a lo largo de varias líneas. Esto mejora la legibilidad, haciendo más fácil modificarlo o depurarlo.

Lo he definido como una función porque es así como funciona el paquete Bashprompt: no es la única manera de hacerlo pero funciona bien. A medida que los prompts usados se tornen más complejos, resulta más y más tedioso teclearlos en la línea de comando, y más práctico situarlos en algún tipo de fichero de texto. En este caso, para probar esto como prompt, salve lo de arriba como un fichero de texto llamado "proml". Se puede trabajar con él de la manera que sigue:

       [giles@nikola:/bin (4.498 Mb)]$ cd          -> Ir a donde se
                                                        almacena el prompt
       [giles@nikola:~ (0 Mb)]$ vi proml           -> Editar el prompt
       ...                                         -> Introducir el texto
                                                        de arriba
       [giles@nikola:~ (0 Mb)]$ source proml       -> Leer la función de
                                                        prompt
       [giles@nikola:~ (0 Mb)]$ proml              -> Ejecutar la función
                                                        de prompt

El primer paso en la creación del prompt es comprobar si el shell en el que nos encontramos es o no una xterm; si lo es, estará definida la variable de entorno ($(TITLEBAR)). Esta consiste de la secuencia de escape apropiada, y \u@\h:\w, lo que escribe <usuario>@<máquina>:<directorio> en la barra de título de la Xterm. Esto es particularmente útil para xterm minimizadas haciéndolas más rápidamente identificables. El resto de material de este prompt debería ser familiar de prompts previos que hemos creado.

El único percance que puede darse manipulando la barra de título de la xterm de esta forma ocurre cuando se ingresa en un sistema en el que no se ha preparado la barra de título: la xterm continuará mostrando la información del sistema anterior que tenía la barra de título manipulada.


Next Previous Contents