Como alterar o título da janela mintty?

35

MinTTY é o novo console padrão para Cygwin.

O que é um comando shell (algo que eu possa colocar em .bashrc, ou melhor ainda, em .zshrc) para alterar o título da janela MinTTY?

Gostaria que o título da janela fosse o caminho para o diretório atual e que ele fosse atualizado conforme eu alternasse os diretórios dentro do console.

Leonel
fonte
1
A configuração padrão do prompt do Cygwin (isto é $PS1) já contém uma sequência de controle que define o título da janela como usuário @ máquina: working_directory.
AK2
Um commit recente do MSYS2_packages / filesystem 6e6310d (sistema de arquivos: Nova variável específica MSYS2_PS1., 01/05/2016) introduziu um script de prompt do MSYS2_PS1, permitindo configurações distintas do Cygwin / MSYS2. Propus um ajuste para garantir que qualquer PS1 existente tenha uma prioridade intermediária github.com/Alexpux/MSYS2-packages/pull/651 . Espero que isto ajude.
Philip Oakley
@ Phillip, (observação do próprio) Esse ajuste provou ser controverso e outros ajustes estão sendo adicionados (ou removidos) para criar a correção viável mínima que cobre os diferentes usos.
Philip Oakley
1
Relacionado, se você precisar apenas de um título estático como "Cygwin i686" ou "Cygwin x86_64" , poderá usar -T <title>nas propriedades de atalho do Windows. Veja também o mintty man page.
JWW

Respostas:

50

O que está errado

O comando a seguir não estava funcionando para mim:

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

Acontece que minha instalação padrão do Cygwin inclui a seguinte definição de prompt em .bashrc:

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

Observe que a primeira parte do prompt ( \e]0;\w\a) está definindo o título do Windows toda vez que o prompt aparece.

A solução

Adicione estas linhas ao seu .bashrcque definem 2 funções:

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$ "
}

Em seguida, você pode definir um título personalizado com este comando:

settitle "MYWonderfullTest here"

ou você pode reverter para o padrão do cygwin (o caminho atual) com este comando:

settitlepath

Espero que isto ajude

boly38
fonte
1
Ótimo trabalho, abordando o problema do PS1 com o qual a maioria dos usuários encontra as configurações padrão do cygwin.
Markku K. 27/01
3
Isto deveria ter sido aceito como a resposta como ele funciona perfeitamente, ao contrário, a resposta mais votado
Tapan Chandra
1
Eu amo uma resposta, posso simplesmente cortar e colar. E também explica claramente qual é realmente o problema.
Darrel Lee
essas funções funcionam bem para mim! lembre-se de que para o cygwin recarregar seu .bashrc, você terá que reiniciar o cygwin, OU escreva source ~/.bashrc- caso contrário, o cygwin ainda estará executando a versão antiga do bashrc que estava no disco quando o cygwin foi iniciado. - testado em Cygwin version 2.8.1 (64 bit)- uma versão de 2017
hanshenrik
Por que essa resposta nunca foi aceita?
asmith
26

Você pode alterá-lo com a sequência de controle xterm para isso, da seguinte maneira:

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

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

James Fu
fonte
4
Não tem efeito para mim: / Talvez esse truque tenha quebrado nos últimos 6 meses?
voltrevo
Você está usando o bash?
James Fu
2
Não tem efeito quando emitido de dentro de uma tela.
Ярослав Рахматуллин
10
Provavelmente, o problema é que o prompt de comando já está configurado para atualizar o título (por exemplo, com o caminho atual); portanto, o comando funciona, mas é subitamente substituído pelo prompt.
Andrea Polci
2
Para testá-lo "echo -ne '\ e] 0; Título \ a' && cat". Esse método impede que o prompt a redefina imediatamente. (Se isso funciona, você pode alterar PS1 no seu perfil como descrito em outras respostas)
Curtis Yallop
3

Coloque isso em .zshrc:

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

A sequência de caracteres especiais no estabelecimento de funções faz com que o MinTTY altere o título da janela.

No zsh , se você definir uma função com o nome especial chpwd, ela será invocada após cada chdir .

Funciona no WinXP, com Cygwin 1.7 e MinTTY executando o zsh.

Leonel
fonte
Também funciona na WSL (menos o material do cygpath, é claro): settitle "$(pwd)@$HOST"
zzxyz
2

No bash, a variável PROMPT_COMMAND pode ser configurada para conter vários comandos, separados por ponto e vírgula. você pode usá-lo para fazer a mesma configuração de título descrita na outra resposta que fala sobre zsh.

humpy
fonte
2
1) ecoe $ PS1 e copie essa sequência para a área de transferência ou editor de texto, como em
   eco $ PS1
2) edite ~ / .bash_profile e adicione o código do shell abaixo, substituindo $ PS1 conforme necessário, mas mantenha a variável $ {TERMINAL_TITLE} na condição "false".
3) Salve o arquivo e defina a variável de ambiente TERMINAL_TILE, como em
   export TERMINAL_TITLE = "Meu título personalizado"
4) Crie seu perfil do bash, como em
   . ~ / .bash_profile
Apreciar

se [-z "$ {TERMINAL_TITLE}"]
então
  PS1 = '\ [\ e] 0; \ w \ a \] \ n \ [\ e [32m \] \ u @ \ h \ [\ e [33m \] \ w \ [\ e [0m \] \ n \ $ '
outro
  PS1 = '\ [\ e] 0; $ {TERMINAL_TITLE} \ a \] \ n \ [\ e [32m \] \ u @ \ h \ [\ e [33m \] \ w \ [\ e [0m \ ] \ n \ $ '
fi
órbita andrews
fonte
1

Eu usei a resposta de Leonel, mas achei que o título só piscaria ao fazer isso, o que significa que pelo menos o comando echo funciona como pretendido. Executei o zsh interativamente com o modo de depuração ativado usando

zsh -xv

Alterar o diretório evidentemente chama outra função chamada title()after precmd()e chpwd(), efetivamente substituindo-as. Então eu liguei isso no meu .zshrc e funcionou.

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

Se você preferir usar chpwd()ou precmd()em vez disso, simplesmente desabilitar a função de título:title(){} .

user239512
fonte
1

Só queria compartilhar minha solução para isso, pois uso o mintty para executar um script.

Meu atalho mintty está configurado como:

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

O script connect.sh que escrevi, chamado no atalho acima, solicitará o servidor ao qual quero me conectar E execute a função de configuração definida no 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
user273306
fonte
Por que você define a função titlese não a utiliza?
pabouk
0

tente adicionar isso ao .bash_profile

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

Funciona para mim.

água de neta
fonte
2
A questão é alterar o título da janela, não um prompt de comando.
kenorb
1
adicione isso em .bash_profile, não há problema em alterar o título, obrigado!
Netawater