Comment changer le titre de la fenêtre menthe?

35

MinTTY est la nouvelle console par défaut pour Cygwin.

Qu'est-ce qu'une commande shell (quelque chose que je peux mettre dans .bashrc, ou encore mieux, dans .zshrc) pour changer le titre de la fenêtre MinTTY?

Je voudrais que le titre de la fenêtre soit le chemin d'accès au répertoire actuel et qu'il soit mis à jour lorsque je change de répertoire à l'intérieur de la console.

Leonel
la source
1
Le paramètre d'invite par défaut de Cygwin (c'est-à-dire $PS1) contient déjà une séquence de contrôle qui définit le titre de la fenêtre sur user @ machine: working_directory.
ak2
Un commit MSYS2_packages / filesystem récent 6e6310d (système de fichiers: Nouvelle variable spécifique MSYS2_PS1., 2016-05-01) a introduit un script d'invite MSYS2_PS1, permettant des configurations Cygwin / MSYS2 distinctes. J'ai proposé un ajustement pour garantir que toute PS1 existante a une priorité intermédiaire github.com/Alexpux/MSYS2-packages/pull/651 . J'espère que cela t'aides.
Philip Oakley
@Philip, (note de soi) Ce tweak s'est révélé controversé et d'autres tweaks sont ajoutés (ou supprimés) pour créer le correctif minimum viable qui couvre les différents usages.
Philip Oakley
1
Associé, si vous n'avez besoin que d'un titre statique comme "Cygwin i686" ou "Cygwin x86_64" , vous pouvez alors l'utiliser -T <title>dans les propriétés du raccourci Windows. Voir aussi le mintty man page.
2016

Réponses:

50

Qu'est-ce qui ne va pas

La commande suivante ne fonctionnait pas pour moi:

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

Il s'avère que mon installation par défaut de Cygwin inclut la définition d'invite suivante dans .bashrc:

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

Notez que la première partie de l'invite ( \e]0;\w\a) définit le titre de Windows chaque fois que l'invite s'affiche.

La solution

Ajoutez ces lignes dans votre .bashrcqui définissent 2 fonctions:

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

Ensuite, vous pouvez définir un titre personnalisé avec cette commande:

settitle "MYWonderfullTest here"

ou vous pouvez revenir à la valeur par défaut de cygwin (le chemin actuel) avec cette commande:

settitlepath

J'espère que cela t'aides

boly38
la source
1
Excellent travail, abordant le problème PS1 que la plupart des utilisateurs rencontreront avec les paramètres par défaut de cygwin.
Markku K.
3
Cela aurait dû être accepté comme la réponse car cela fonctionne parfaitement contrairement à la réponse la plus votée
Tapan Chandra
1
J'adore une réponse que je peux simplement couper et coller. Et explique également clairement quel est vraiment le problème.
Darrel Lee
ces fonctions fonctionnent bien pour moi! rappelez-vous que pour que cygwin recharge votre .bashrc, vous devrez redémarrer cygwin, OU écrire source ~/.bashrc- sinon cygwin exécutera toujours l'ancienne version de bashrc qui était sur le disque au démarrage de cygwin. - testé sur Cygwin version 2.8.1 (64 bit)- une version 2017
hanshenrik
Pourquoi cette réponse n'a-t-elle jamais été acceptée?
asmith
26

Vous pouvez le changer avec la séquence de contrôle xterm pour cela, comme ceci:

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

Reportez-vous à: http://code.google.com/p/mintty/issues/detail?id=241

James Fu
la source
4
N'a aucun effet pour moi: / Peut-être que cette astuce s'est cassée au cours des 6 derniers mois?
voltrevo
Utilisez-vous bash?
James Fu
2
Il n'a aucun effet lorsqu'il est émis à partir d'un écran.
Ярослав Рахматуллин
10
Le problème est probablement que l'invite de commande est déjà configurée pour mettre à jour le titre (par exemple avec le chemin actuel), donc la commande fonctionne mais elle est soudainement remplacée par l'invite.
Andrea Polci
2
Pour le tester "echo -ne '\ e] 0; Title \ a' && cat". Cette méthode empêche l'invite de la réinitialiser immédiatement. (Si cela fonctionne, vous pouvez modifier la PS1 dans votre profil comme décrit dans d'autres réponses)
Curtis Yallop
3

Placez ceci dans .zshrc:

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

La séquence de caractères spéciaux dans le paramètre de fonction fait que MinTTY change le titre de la fenêtre.

Dans zsh , si vous définissez une fonction avec le nom spécial chpwd, elle sera invoquée après chaque chdir .

Fonctionne sur WinXP, avec Cygwin 1.7 et MinTTY exécutant zsh.

Leonel
la source
Fonctionne également en WSL (moins le truc cygpath, bien sûr): settitle "$(pwd)@$HOST"
zzxyz
2

En bash, la variable PROMPT_COMMAND peut être définie pour contenir un certain nombre de commandes, séparées par des points-virgules. vous pouvez l'utiliser pour faire le même réglage de titre que celui décrit dans l'autre réponse qui parle de zsh.

bossu
la source
2
1) écho $ PS1 et copiez cette chaîne dans votre presse-papiers ou éditeur de texte, comme dans
   écho $ PS1
2) éditez ~ / .bash_profile et ajoutez le code shell ci-dessous, en remplaçant $ PS1 si nécessaire mais gardez la variable $ {TERMINAL_TITLE} dans la condition "false".
3) Enregistrez le fichier et définissez la variable d'environnement TERMINAL_TILE, comme dans
   export TERMINAL_TITLE = "Mon titre personnalisé"
4) Sourcez votre profil bash, comme dans
   . ~ / .bash_profile
Prendre plaisir

si [-z "$ {TERMINAL_TITLE}"]
puis
  PS1 = '\ [\ e] 0; \ w \ a \] \ n \ [\ e [32m \] \ u @ \ h \ [\ e [33m \] \ w \ [\ e [0m \] \ n \ $ '
autre
  PS1 = '\ [\ e] 0; $ {TERMINAL_TITLE} \ a \] \ n \ [\ e [32m \] \ u @ \ h \ [\ e [33m \] \ w \ [\ e [0m \ ] \ n \ $ '
Fi
orbite andrews
la source
1

J'ai utilisé la réponse de Leonel, mais j'ai trouvé que le titre ne scintillait qu'en faisant cela, ce qui signifie au moins que la commande echo fonctionne comme prévu. J'ai exécuté zsh de manière interactive avec le mode de débogage activé à l'aide

zsh -xv

Changer le répertoire invoque évidemment une autre fonction appelée title()après precmd()et chpwd(), en les remplaçant efficacement. J'ai donc branché cela dans mon .zshrc et cela a fonctionné.

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

Si vous préférez utiliser chpwd()ou à la precmd()place, il suffit de désactiver la fonction de titre: title(){}.

user239512
la source
1

Je voulais juste partager ma solution à cela car j'utilise mintty pour exécuter un script.

Mon raccourci mintty est configuré comme:

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

Le script connect.sh que j'ai écrit et qui est appelé dans le raccourci ci-dessus m'invitera pour le serveur auquel je veux me connecter ET exécuter la fonction settitle définie dans le 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
la source
Pourquoi définissez-vous la fonction titlesi vous ne l'utilisez pas?
pabouk
0

essayez d'ajouter ceci dans .bash_profile

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

Ça marche pour moi.

netawater
la source
2
La question concerne le changement du titre de la fenêtre, pas une invite de commande.
kenorb
1
veuillez l'ajouter dans .bash_profile, c'est OK pour changer le titre, merci!
netawater