6 votes

Comment ouvrir un nouveau terminal dans le répertoire courant ?

Lorsque je suis dans un répertoire, je souhaite parfois qu'un autre terminal soit ouvert dans le même répertoire.

Par exemple, je suis dans ~/code/someproject/src/ et j'ouvre un nouveau terminal, par défaut, il s'ouvre en ~ Comment lancer un nouveau terminal dans le répertoire actuel ?

J'utilise Arch Linux avec urxvt comme terminal et i3 comme gestionnaire de fenêtres.

5voto

cee Points 396

Il y a un fil de discussion très instructif sur le forum i3-faq qui contient divers scripts/programmes qui abordent cette question.

https://faq.i3wm.org/question/150/how-to-launch-a-terminal-from-here/

J'ai opté pour le programme c xcwd qui fait vraiment un excellent travail. Il fonctionne également à l'intérieur des programmes GUI.

3voto

simotek Points 225

Lorsque vous lancez un terminal à partir d'un terminal existant, l'environnement du terminal original est préservé, y compris le répertoire de travail actuel et toute autre variable d'environnement que vous avez définie. C'est pourquoi urxvt & travaux

1voto

Sean Breckenridge Points 111

Un peu similaire à la réponse de simotek :

J'utilise st qui, comme beaucoup d'autres émulateurs de terminal, ouvre un nouveau terminal dans le répertoire de travail actuel s'il est exécuté à partir de la ligne de commande.

Un alias comme : alias opennewterm="st >/dev/null 2>&1 & disown" ouvre un terminal dans le répertoire courant et ne bloque pas le terminal.

Si vous utilisez zsh vous pouvez le lier à un raccourci clavier en plaçant le texte suivant dans votre fichier .zshrc :

bindkey -s "^[n" "opennewterm\n"

quels types opennewterm et un saut de ligne lorsque Alt+n est pressé.

0voto

Richard Hum Points 123

J'ai un hack vraiment, vraiment, vraiment moche que j'ai écrit pour faire ça.

https://github.com/RichardHum/bin/blob/master/curdirterm

Mon nom d'hôte est bulletMaster, et mon répertoire personnel est /root/.

0voto

nickyt Points 3399

Aucune des réponses que j'ai vues ne fonctionne avec l'utilisation de l'option urxvtd Dans ce cas, tous les terminaux Windows sont associés à la même adresse. urxvtd et il ne semble pas y avoir de moyen facile d'identifier l'instance Shell correcte pour obtenir le PWD.

Pour y remédier, j'ai utilisé un vilain hack. J'utilise zsh avec un preexec pour afficher dans le titre de la fenêtre le répertoire courant (avec la commande courante et la dernière commande, l'heure, etc.), ce qui me semble utile de toute façon. Je le fais avec quelque chose de la forme suivante dans mon fichier zshrc (vous devrez l'adapter, voir cette commande ; voir aquí pour la dernière version complète) :

preexec () {
  local WD="$(pwd | sed "s/^\/home\/$USER/~/")"
  export LASTDATE="`date +%T`"
  if [[ "$TERM" == "rxvt-unicode" || "$TERM" == "rxvt-unicode-256color" ]]; then
    export COMMAND="$(echo $1 | tr -d '\n')"
    echo -ne "\e]0;$LOCALNAME $HOST:$WD$ $COMMAND ($LASTDATE)\a"
  fi
}

Ensuite, j'ai juste fait un script pour exécuter une nouvelle urxvt dans le même répertoire que l'instance urxvt focalisée, en extrayant simplement le titre dans la fenêtre focalisée actuelle (cf. aquí pour la dernière version) :

#!/bin/bash

# run ARGV, with -cd FOLDER if FOLDER can be extracted from title of current
# window (see zsh config for how the title gets put in the window)

# http://superuser.com/a/403369/77814
quoted_args="$(printf " %q" "$@")"

# inspired by
# https://faq.i3wm.org/question/150/how-to-launch-a-terminal-from-here/%3C/p%3E.html
ID=$(xdpyinfo | grep focus | cut -d ',' -f1 | rev | cut -d ' ' -f1 | rev)
CLASS=$(xprop -id "$ID" | grep -m1 WM_CLASS | cut -d'"' -f2)

# https://stackoverflow.com/a/19411918
if [ "${CLASS^^}" != "URXVT" ]
then
  # no urxvt focused -- just do the default
  # optionally we could try to extract the pwd with
  # https://github.com/schischi-a/xcwd or something
  exec $quoted_args
fi

TITLE=$(xprop -id "$ID" | grep -m1 WM_NAME)
MYPWD=$(echo "$TITLE" | cut -d'$' -f1 | cut -d'"' -f2- | cut -d':' -f2-)
MYPWD2="${MYPWD/#\~/$HOME}"

if [ ! -z "$MYPWD2" -a -d "$MYPWD2" -a -r "$MYPWD2" -a -x "$MYPWD2" ]
then 
  exec $quoted_args -cd "$MYPWD2"
else
  exec $quoted_args
fi

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X