web-dev-qa-db-fra.com

Comment ouvrir un nouveau terminal dans le même répertoire de la dernière utilisation d'un Keybind Manager Window Manager?

J'utilise un gestionnaire de fenêtres de carrelage et je suis passé de gnome-terminal Avec plusieurs onglets sur plusieurs urxvt instances gérées par le gestionnaire de fenêtres. L'une des fonctionnalités que je manque est la possibilité d'ouvrir un nouveau terminal qui par défaut dans le répertoire de travail du dernier.

En bref: J'ai besoin d'un moyen d'ouvrir une nouvelle URXVT (BASH) qui par défaut à $ PWD de la dernière utilisation utilisée.

La seule solution qui me vient à l'esprit est de sauvegarder le chemin actuel sur chaque cd avec quelque chose comme ceci:

echo $PWD > ~/.last_dir

et restaurer le chemin sur le nouveau terminal de cette manière:

cd `cat ~/.last_dir`

Je peux rechercher la deuxième commande en .bashrc mais je ne sais pas comment exécuter le premier sur chaque changement de répertoire :)

Toute solution plus simple qui n'implique pas screen ou tmux Usage est la bienvenue.

26
Luca

Je vois trois solutions utilisant .last_dir. Vous pouvez placer le echo $PWD > ~/.last_dir Soit:

  1. Dans une fonction spéciale qui serait une enveloppe pour cd:

    function cd_
    {
      [[ -d "$@" ]] || return 1
      echo "$@" > ~/.last_dir
      cd "$@"
    }
    

    Placez ceci dans votre ~/.bashrc puis utiliser cd_ Au lieu de CD Chaque fois que vous souhaitez que votre nouveau répertoire de travail soit stocké.

  2. Dans ton $Prompt_COMMAND (non recommandé):

    Prompt_COMMAND="$Prompt_COMMAND; pwd > ~/.last_dir"
    

    Vous pouvez tester cela directement depuis le terminal ou le placer dans ~/.bashrc. Cette solution déclenche toutefois un disque écrit à chaque fois que l'invite apparaît, ce qui pourrait causer des problèmes - mais d'autre part, .last_dir contiendrait l'annuaire actuel, peu importe la façon dont vous êtes arrivé là-bas.

  3. Dans une personnalisation Script d'extension PERL pour rxvt. Je n'y ai jamais créé moi-même, mais vous pouvez trouver de nombreux exemples sur le Web.

9
rozcietrzewiacz

J'utilise actuellement cette version de # 1 solution

# save path on cd
function cd {
    builtin cd $@
    pwd > ~/.last_dir
}

# restore last saved path
if [ -f ~/.last_dir ]
    then cd `cat ~/.last_dir`
fi

à l'intérieur de mon .zshrc

14
Luca

C'est en fait assez trivial; Si vous exécutez urxvt de votre fenêtre existante urxvt, la nouvelle fenêtre se trouve dans le même répertoire. J'ai dup aliased à urxvt & Pour cette raison. Si vous voulez qu'il soit lié à une touche de raccourci, vous pouvez utiliser la commande bind de Bash. Par exemple, pour le lier à F1:

$ bind '"\e[11~": "urxvt &\n"'
12
Michael Mrozek

Il suffit d'ajouter . /etc/profile.d/vte.sh dans ton ~/.bashrc Pour obtenir la même fonctionnalité

4
david villa

Bien sûr, il s'agit d'une approche de travail pour modifier le comportement cd, mais j'aimerais montrer une solution plus simple. Dans le homme bash (1) J'ai trouvé que si un interactif bash sort il exécute ~/.bash_logout s'il existe. Donc, au lieu de stocker le chemin à chaque invocation de cd Le dernier chemin peut être enregistré à la sortie.

Mon ~/.bash_logout est très simple:

echo $PWD >~/.lastdir

Et quelque part dans mon .bashrc J'ai placé cette ligne:

[ -r ~/.lastdir ] && cd $(<~/.lastdir)
4
TrueY

Très souvent, j'utilise plusieurs fenêtres terminales à la fois, chacune avec plusieurs onglets. Par exemple: une fenêtre pour les onglets de développement de code source, une fenêtre pour les fichiers latex, une fenêtre pour l'exécution et des scripts R, etc. Dans une seule fenêtre, je souhaite qu'un nouveau terminal à onglets passe au répertoire qui est utilisé en dernier dans cette fenêtre (Cela fonctionnait dans le passé, mais avec la nouvelle version de Gnome, il ne l'est pas). La solution sale suivante fonctionne bien pour moi. J'ai mis cela dans .CASHRC.

dirfilename="/tmp/.lastdir-$WINDOWID"
[ -r "$dirfilename" ] &&  {
    savdir=`cat $dirfilename`
    cd "$savdir"
}

function cd ()
{
    builtin cd "$@"
    echo $PWD > $dirfilename
}
2
BartT