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