Come cambiare il titolo della finestra di menta?


35

MinTTY è la nuova console predefinita per Cygwin.

Che cos'è un comando shell (qualcosa che posso mettere in .bashrc, o meglio, in .zshrc) per cambiare il titolo della finestra di MinTTY?

Vorrei che il titolo della finestra fosse il percorso della directory corrente e che fosse aggiornato mentre cambio directory all'interno della console.


1
L'impostazione del prompt predefinito di Cygwin (ovvero $PS1) contiene già una sequenza di controllo che imposta il titolo della finestra su user @ machine: working_directory.
ak2,

Un recente pacchetto MSYS2_packages / filesystem 6e6310d (filesystem: nuova variabile specifica MSYS2_PS1., 2016-05-01) ha introdotto uno script di prompt MSYS2_PS1, che consente configurazioni Cygwin / MSYS2 distinte. Ho proposto una modifica per garantire che qualsiasi PS1 esistente abbia una priorità intermedia github.com/Alexpux/MSYS2-packages/pull/651 . Spero che sia di aiuto.
Philip Oakley,

@Philip, (nota da sé) Quel tweak si è rivelato controverso e ulteriori modifiche sono state aggiunte (o rimosse) per creare la correzione minima percorribile che copre i diversi usi.
Philip Oakley,

1
Correlato, se è necessario solo un titolo statico come "Cygwin i686" o "Cygwin x86_64" , è possibile utilizzare -T <title>nelle proprietà del collegamento di Windows. Vedi anche il mintty man page.
jww

Risposte:


50

Che c'è

Il seguente comando non funzionava per me:

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

Si scopre che la mia installazione di Cygwin predefinita include la seguente definizione di prompt in .bashrc:

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

Si noti che la prima parte del prompt ( \e]0;\w\a) sta impostando il titolo di Windows ogni volta che appare il prompt.

La soluzione

Aggiungi queste righe alle tue .bashrcche definiscono 2 funzioni:

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

Quindi puoi impostare un titolo personalizzato con questo comando:

settitle "MYWonderfullTest here"

oppure puoi ripristinare il valore predefinito di cygwin (il percorso corrente) con questo comando:

settitlepath

Spero che sia di aiuto


1
Ottimo lavoro, affrontando il problema PS1 che la maggior parte degli utenti incontrerà con le impostazioni predefinite di Cygwin.
Markku K.,

3
Questo avrebbe dovuto essere accettato come risposta in quanto funziona perfettamente a differenza della risposta più votata
Tapan Chandra,

1
Adoro una risposta che posso solo tagliare e incollare. E spiega anche chiaramente qual è il problema.
Darrel Lee,

quelle funzioni funzionano bene per me! ricorda che per cygwin per ricaricare il tuo .bashrc, dovrai riavviare cygwin, O scrivere source ~/.bashrc- altrimenti cygwin eseguirà comunque la vecchia versione di bashrc che era su disco all'avvio di cygwin. - testato su Cygwin version 2.8.1 (64 bit)- una versione 2017
hanshenrik

Perché questa risposta non è mai stata accettata?
asmith,

26

Puoi cambiarlo con la sequenza di controllo xterm per questo, in questo modo:

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

Fare riferimento a: http://code.google.com/p/mintty/issues/detail?id=241


4
Non ha alcun effetto per me: / Forse questo trucco si è rotto negli ultimi 6 mesi?
voltrevo

Stai usando bash?
James Fu

2
Non ha alcun effetto se emesso da uno schermo.
Ярослав Рахматуллин,

10
Probabilmente il problema è che il prompt dei comandi è già configurato per aggiornare il titolo (per esempio con il percorso corrente), quindi il comando funziona ma viene improvvisamente sovrascritto dal prompt.
Andrea Polci,

2
Per testarlo "echo -ne '\ e] 0; Titolo \ a' && cat". Questo metodo impedisce al prompt di ripristinarlo immediatamente. (Se funziona, puoi modificare PS1 nel tuo profilo come descritto in altre risposte)
Curtis Yallop

3

Metti questo in .zshrc:

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

La sequenza di caratteri speciali nel set di funzioni fa sì che MinTTY cambi il titolo della finestra.

In zsh , se si definisce una funzione con il nome speciale chpwd, verrà invocata dopo ogni chdir .

Funziona su WinXP, con Cygwin 1.7 e MinTTY che eseguono zsh.


Funziona anche in WSL (meno il materiale cygpath, ovviamente): settitle "$(pwd)@$HOST"
zzxyz,

2

In bash, la variabile PROMPT_COMMAND può essere impostata per contenere un numero di comandi, separati da punti e virgola. puoi usarlo per fare la stessa impostazione del titolo descritta nell'altra risposta che parla di zsh.


2
1) echo $ PS1 e copia quella stringa negli appunti o nell'editor di testo, come in
   echo $ PS1
2) modifica ~ / .bash_profile e aggiungi il codice della shell di seguito, sostituendo $ PS1 se necessario, ma mantieni la variabile $ {TERMINAL_TITLE} nella condizione "false".
3) Salvare il file e impostare la variabile d'ambiente TERMINAL_TILE, come in
   export TERMINAL_TITLE = "Il mio titolo personalizzato"
4) Fonte il tuo profilo bash, come in
   . ~ / .Bash_profile
Godere

if [-z "$ {TERMINAL_TITLE}"]
poi
  PS1 = '\ [\ e] 0; \ w \ a \] \ n \ [\ e [32m \] \ u @ \ h \ [\ e [33m \] \ w \ [\ e [0m \] \ n \ $ '
altro
  PS1 = '\ [\ e] 0; $ {TERMINAL_TITLE} \ a \] \ n \ [\ e [32m \] \ u @ \ h \ [\ e [33m \] \ w \ [\ e [0m \ ] \ n \ $ '
fi

1

Ho usato la risposta di Leonel, ma ho scoperto che il titolo tremolava solo quando lo facevo, il che significa che almeno il comando echo funziona come previsto. Ho eseguito zsh in modo interattivo con la modalità debug abilitata utilizzando

zsh -xv

La modifica della directory richiama evidentemente un'altra funzione chiamata title()dopo precmd()e chpwd(), effettivamente, la sovrascrive. Quindi l'ho inserito nel mio .zshrc e ha funzionato.

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

Se si preferisce utilizzare chpwd()o precmd(), invece, è sufficiente disattivare la funzione di titolo: title(){}.


1

Volevo solo condividere la mia soluzione a questo mentre uso mintty per eseguire uno script.

La mia scorciatoia coniata è impostata come:

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

Lo script connect.sh che ho scritto, chiamato nel collegamento sopra, mi chiederà il server a cui voglio connettermi E eseguire la funzione settitle definita nello 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

Perché si definisce la funzione titlese non la si utilizza?
pabouk,

0

prova ad aggiungere questo in .bash_profile

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

Per me funziona.


2
La domanda riguarda la modifica del titolo della finestra, non un prompt dei comandi.
Kenorb,

1
per favore aggiungi questo in .bash_profile, va bene per cambiare titolo, grazie!
netawater,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.