vte.sh behält mein Gnome-Terminal-Verzeichnis nicht im neuen Tab

vte.sh behält mein Gnome-Terminal-Verzeichnis nicht im neuen Tab

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.shin 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. \cdwird 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-pwdmit ä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 cdund 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.shdas 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.shes 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.shin ~/.zshrcfunktioniert 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)

verwandte Informationen