¿Cómo cambiar el título de la ventana mintty?

35

MinTTY es la nueva consola predeterminada para Cygwin.

¿Qué es un comando de shell (algo que puedo poner en .bashrc, o incluso mejor, en .zshrc) para cambiar el título de la ventana MinTTY?

Me gustaría que el título de la ventana sea la ruta al directorio actual y que se actualice mientras cambio de directorio dentro de la consola.

Leonel
fuente
1
La configuración de solicitud predeterminada de Cygwin (es decir $PS1) ya contiene una secuencia de control que establece el título de la ventana en user @ machine: working_directory.
ak2
Un reciente MSYS2_packages / filesystem commit 6e6310d (sistema de archivos: Nueva variable específica MSYS2_PS1., 2016-05-01) introdujo un script de solicitud MSYS2_PS1, que permite distintas configuraciones de Cygwin / MSYS2. He propuesto un ajuste para garantizar que cualquier PS1 existente tenga una prioridad intermedia github.com/Alexpux/MSYS2-packages/pull/651 . Espero que esto ayude.
Philip Oakley
@Philip, (nota de uno mismo) Ese ajuste ha resultado polémico y se están agregando (o eliminando) más ajustes para crear la solución mínima viable que cubra los diferentes usos.
Philip Oakley
1
Relacionado, si solo necesita un título estático como "Cygwin i686" o "Cygwin x86_64" , puede usarlo -T <title>en las propiedades de acceso directo de Windows. Ver también el mintty man page.
jww

Respuestas:

50

Qué está mal

El siguiente comando no funcionaba para mí:

echo -ne "\e]0;MYTITLE\a"

Resulta que mi instalación predeterminada de Cygwin incluye la siguiente definición de solicitud en .bashrc:

PS1=\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n$

Tenga en cuenta que la primera parte de la solicitud ( \e]0;\w\a) es configurar el título de Windows cada vez que aparece la solicitud.

La solución

Agregue estas líneas en su .bashrcque definen 2 funciones:

function settitle() {
      export PS1="\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n$ "
      echo -ne "\e]0;$1\a"
}
function settitlepath() {
      export PS1="\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n$ "
}

Luego puede establecer un título personalizado con este comando:

settitle "MYWonderfullTest here"

o puede volver al valor predeterminado de cygwin (la ruta actual) con este comando:

settitlepath

Espero que esto ayude

boly38
fuente
1
Gran trabajo, abordar el problema de PS1 con el que la mayoría de los usuarios se encontrarán con la configuración predeterminada de Cygwin.
Markku K.
3
Esto debería haber sido aceptado como la respuesta, ya que funciona perfectamente a diferencia de la respuesta más votada
Tapan Chandra
1
Me encanta una respuesta que puedo cortar y pegar. Y también explica claramente cuál es realmente el problema.
Darrel Lee
¡esas funciones funcionan bien para mí! recuerde que para que cygwin vuelva a cargar su .bashrc, tendrá que reiniciar cygwin, O escriba source ~/.bashrc; de lo contrario, cygwin seguirá ejecutando la versión anterior de bashrc que estaba en el disco cuando se inició cygwin. - probado en Cygwin version 2.8.1 (64 bit)- una versión 2017
hanshenrik
¿Por qué esta respuesta nunca fue aceptada?
asmith
26

Puede cambiarlo con la secuencia de control xterm para esto, así:

echo -ne '\e]0;Title\a'

Consulte: http://code.google.com/p/mintty/issues/detail?id=241

James Fu
fuente
44
No tiene ningún efecto para mí: / ¿Quizás este truco se ha roto en los últimos 6 meses?
voltrevo
¿Estás usando bash?
James Fu
2
No tiene efecto cuando se emite desde una pantalla.
Ярослав Рахматуллин
10
Probablemente el problema es que el símbolo del sistema ya está configurado para actualizar el título (por ejemplo, con la ruta actual), por lo que el comando funciona pero el aviso lo anula de repente.
Andrea Polci
2
Para probarlo "echo -ne '\ e] 0; Título \ a' && cat". Este método evita que el aviso lo reinicie de inmediato. (Si eso funciona, puede alterar la PS1 en su perfil como se describe en otras respuestas)
Curtis Yallop
3

Coloque esto en .zshrc:

# Change title of MinTTY to current dir
function settitle() {
    echo -ne "\033]2;"$1"\007"
}
function chpwd() {
    settitle $(cygpath -m `pwd`)
}

La secuencia de caracteres especiales en la función settitle hace que MinTTY cambie el título de la ventana.

En zsh , si define una función con el nombre especial chpwd, se invocará después de cada chdir .

Funciona en WinXP, con Cygwin 1.7 y MinTTY ejecutando zsh.

Leonel
fuente
También funciona en WSL (menos las cosas de Cygpath, por supuesto): settitle "$(pwd)@$HOST"
zzxyz
2

En bash, la variable PROMPT_COMMAND se puede configurar para contener una serie de comandos, separados por punto y coma. puede usar eso para hacer la misma configuración de título como se describe en la otra respuesta que habla sobre zsh.

parte desigual
fuente
2
1) echo $ PS1 y copia esa cadena en tu portapapeles o editor de texto, como en
   echo $ PS1
2) edite ~ / .bash_profile y agregue el código de shell a continuación, reemplazando $ PS1 según sea necesario pero mantenga la variable $ {TERMINAL_TITLE} en la condición "falsa".
3) Guarde el archivo y establezca la variable de entorno TERMINAL_TILE, como en
   export TERMINAL_TITLE = "Mi título personalizado"
4) Fuente de su perfil bash, como en
   . ~ / .bash_profile
Disfrutar

si [-z "$ {TERMINAL_TITLE}"]
luego
  PS1 = '\ [\ e] 0; \ w \ a \] \ n \ [\ e [32m \] \ u @ \ h \ [\ e [33m \] \ w \ [\ e [0m \] \ n \ $ '
más
  PS1 = '\ [\ e] 0; $ {TERMINAL_TITLE} \ a \] \ n \ [\ e [32m \] \ u @ \ h \ [\ e [33m \] \ w \ [\ e [0m \ ] \ n \ $ '
fi
órbita andrews
fuente
1

Utilicé la respuesta de Leonel, pero descubrí que el título solo parpadearía al hacer esto, lo que significa que al menos el comando echo funciona según lo previsto. Ejecuté zsh interactivamente con el modo de depuración habilitado usando

zsh -xv

Cambiar el directorio evidentemente invoca otra función llamada title()después precmd()y chpwd(), anulando efectivamente. Así que conecté esto a mi .zshrc y funcionó.

function settitle() {
    echo -ne "\033]2;"$1"\007"
}
function title() {
    settitle $(cygpath -m `pwd`)
}

Si usted prefiere usar chpwd()o precmd()en su lugar, sólo tiene que desactivar la función de título: title(){}.

usuario239512
fuente
1

Solo quería compartir mi solución a esto, ya que uso mintty para ejecutar un script.

Mi acceso directo mintty está configurado como:

C:\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico /usr/bin/bash.exe -l -c /scripts/connect.sh

El script connect.sh que escribí, que se llama en el acceso directo anterior, me solicitará el servidor al que quiero conectarme y ejecutar la función settitle definida en el script.

connect.sh

#!/bin/bash

echo "Enter servername when prompted"
echo -n "servername: " 
read servername
function settitle() {
    echo -ne "\033]2;"$servername"\007"
}
function title() {
    settitle $(cygpath -m `pwd`)
}
settitle
ssh my_username@$servername
usuario273306
fuente
¿Por qué define la función titlesi no la usa?
Pabouk
0

intente agregar esto a .bash_profile

export PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}:${PWD/#$HOME/~}\007"'

Esto funciona para mi.

netawater
fuente
2
La pregunta es sobre cambiar el título de la ventana, no un símbolo del sistema.
kenorb
1
agregue esto a .bash_profile, está bien cambiar el título, ¡gracias!
netawater