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.


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


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


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.


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.


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

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(){}.


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

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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.