
Früher habe ich beim Öffnen einer neuen Registerkarte im Gnome-Terminal mein Arbeitsverzeichnis beibehalten und möchte diese Funktionalität wiederherstellen. Meine Recherchen haben mich auf Sourcing /etc/profile.d/vte.sh
in meinem ~/.zshrc
(ich verwende Z-Shell) hingewiesen, aber das ändert das Problem nicht, meine neuen Registerkarten werden immer noch in geöffnet ~
.
Wie kann ich diese Funktionalität wiederherstellen? Notfalls kann das auch ein Dirty Hack sein.
Meine Versionen
~$ uname -a
Linux konradslaptop2 3.17.2-1-ARCH #1 SMP PREEMPT Thu Oct 30 20:49:39 CET 2014 x86_64 GNU/Linux
~$ gnome-terminal --version
GNOME-Terminal 3.14.2
~$ zsh --version
zsh 5.0.7 (x86_64-unknown-linux-gnu)
Meine ~/.zshrc (Minimalbeispiel)
. /etc/profile.d/vte.sh
# auto generated by .zsh installation
if (( ${+terminfo[smkx]} )) && (( ${+terminfo[rmkx]} )); then
function zle-line-init () {
printf '%s' "${terminfo[smkx]}"
}
function zle-line-finish () {
printf '%s' "${terminfo[rmkx]}"
}
zle -N zle-line-init
zle -N zle-line-finish
fi
Antwort1
Ein ganz einfacher Workaround für Sie wäre, eine Funktion in Ihr Verzeichnis einzubinden ~/.zshrc
, die sich das Arbeitsverzeichnis merkt und beim Öffnen von zsh dorthin wechselt:
cd $(<>/dev/shm/$USER-pwd)
__cd(){
\cd "$@"
pwd >/dev/shm/$USER-pwd
}
alias cd=__cd
Wir gebrauchen/dev/shmanstatt/tmpum Schreibvorgänge auf der Festplatte zu vermeiden, obwohl/tmpkönnte schon eintmpsauf Ihrem System. \cd
wird verwendet, um zu verhindern,Gabelbombe.
Wenn Sie diese Funktion nur für das Gnome-Terminal wünschen, können Sie eine if-Anweisung einfügen, um Ihr aktuelles Terminal oder aktives Fenster zu überprüfen. Wenn Sie außerdem befürchten, dass andere Benutzer herausfinden könnten, welches Ihr letztes Verzeichnis war, können Sie die Berechtigungen für $USER-pwd
mit ändern chmod
:
if xprop -id $(xprop -root 32x ' $0' _NET_ACTIVE_WINDOW | awk '{print $NF}') WM_CLASS | grep -q gnome-terminal; then
cd $(<>/dev/shm/$USER-pwd)
chmod 600 /dev/shm/$USER-pwd
__cd(){
\cd "$@"
pwd >/dev/shm/$USER-pwd
}
alias cd=__cd
fi
Antwort2
Ich bin nicht sicher, was genau Sie wiederherstellen möchten (siehe unten).
Wenn Sie den Start in einem anderen Verzeichnis starten möchten gnome-terminal
, haben Sie die Möglichkeit, das Verzeichnis anzugeben:
gnome-terminal --working-directory=/tmp
Sie könnten sicherlich ein Skript als benutzerdefinierten Startbefehl verwenden, das einen ausführt cd
und dann die Shell startet – aber das klingt nicht nach einem guten Ansatz.
Falls es darum geht, dass das Standardverzeichnis der Shell in einem neuen Tab auf das aktuelle Verzeichnis des Tabs gesetzt wird, das beim Auslösen der Neuer-Tab-Aktion aktuell war: Das funktioniert bei mir nur, daher kann ich nur Hinweise geben – ich verwende eine ältere Version, GNOME Terminal 3.6.2
.
Ich bin ziemlich sicher, dass es nicht das Skript ist, /etc/profile.d/vte.sh
das das Verzeichnis festlegt. In meiner Version – in der es problemlos funktioniert – enthält das Skript keinen entsprechenden Code und ich habe ihn nie verwendet.
Das Terminalprogramm selbst kann das Verzeichnis einfach festlegen, bevor es den Shell-Prozess aufspaltet.
Aber eigentlich muss es das nicht einmal tun – Sie möchten dasselbe Verzeichnis wie vorher haben. Alles, was nötig ist, ist, das Verzeichnis überhaupt nicht zu verändern.
Allerdings gibt es einen Fehler, der dieses Problem beschreibt:
gnome-terminal: Fehler 697475 – Neue Registerkarte wird nicht im selben Verzeichnis wie vorherige Registerkarte geöffnet
Die Diskussion ist sehr lang, ich habe keine Zusammenfassung; vte.sh
es wird dort besprochen, und beim Überfliegen sieht es so aus, als ob es behoben sein könnte, aber noch nicht vollständig veröffentlicht ist.
Antwort3
Update ab 2022:
- Das Einbinden
/etc/profile.d/vte.sh
in~/.zshrc
funktioniert jetzt, allerdings nur für neueRegisterkarten, nicht für neueFenster - der unten wiederholte Workaround von @admirabilis hat früher funktioniert, unterbricht jetzt aber die Verzeichnisvervollständigung mit der Tabulatortaste
- beide oben genannten Punkte gelten sowohl beim Konfigurieren von zsh als „benutzerdefinierter Befehl“ im Gnome Terminal als auch beim Festlegen von zsh als Standard-Shell mit chsh
cd $(<>/dev/shm/$USER-pwd)
__cd(){
\cd "$@"
pwd >/dev/shm/$USER-pwd
}
alias cd=__cd
Versionen
Interessanterweise basieren sowohl Gnome Terminal als auch ZSH noch auf derselben Hauptversion wie vor 8 Jahren.
~$ uname -a
Linux archlinux 5.19.5-arch1-1 #1 SMP PREEMPT_DYNAMIC Mon, 29 Aug 2022 15:51:05 +0000 x86_64 GNU/Linux
~$ gnome-terminal --version
# GNOME Terminal 3.44.1 using VTE 0.68.0 +BIDI +GNUTLS +ICU +SYSTEMD
~$ zsh --version
zsh 5.9 (x86_64-pc-linux-gnu)