vte.sh не сохраняет мой каталог gnome-terminal в новой вкладке

vte.sh не сохраняет мой каталог gnome-terminal в новой вкладке

Я использовал свой рабочий каталог при открытии новой вкладки в gnome-terminal и хочу восстановить эту функциональность. Мои исследования указали мне на источник /etc/profile.d/vte.shв моем ~/.zshrc(я использую Z shell), однако это не решает проблему, мои новые вкладки по-прежнему открываются в ~.

Как восстановить эту функциональность? Это может быть грязный хак, если это необходимо.

Мои версии

~$ 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)

Мой ~/.zshrc (минимальный пример)

. /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

решение1

Очень простым решением для вас будет включение в ваш файл функции, ~/.zshrcкоторая запоминает рабочий каталог и переходит в него при открытии zsh:

cd $(<>/dev/shm/$USER-pwd)

__cd(){
    \cd "$@"
    pwd >/dev/shm/$USER-pwd
}
alias cd=__cd

Мы используем/dev/шмвместо/тмпчтобы избежать записи на диск, хотя/тмпуже может бытьtmpfsв вашей системе. \cdиспользуется, чтобы избежатьвилочная бомба.

Если вы хотите использовать эту функцию только для gnome-terminal, вы можете включить оператор if для проверки текущего терминала или активного окна. Кроме того, если вы обеспокоены тем, что другие пользователи могут узнать, какой был ваш последний каталог, вы можете изменить разрешения для $USER-pwdс помощью 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

решение2

Я не совсем понимаю, что именно вы хотите восстановить (см. ниже);

Если вы хотите открыть gnome-terminalфайл в другом каталоге, есть возможность указать каталог:

gnome-terminal --working-directory=/tmp

Конечно, можно использовать скрипт в качестве пользовательской команды запуска, которая выполняет команду cd, а затем запускает оболочку, но это не кажется хорошим подходом.


Если речь идет о том, что каталог оболочки по умолчанию в новой вкладке устанавливается на текущий каталог вкладки, который был текущим на момент запуска действия новой вкладки: Это работает только для меня, поэтому я могу только дать подсказки — я использую старую версию, GNOME Terminal 3.6.2.

Я почти уверен, что это не скрипт /etc/profile.d/vte.shзадает каталог; в моей версии — где все работает нормально — скрипт не содержит кода, связанного с этим, и я никогда его не использовал.

Сама терминальная программа может просто задать каталог перед ответвлением процесса оболочки.
Но на самом деле, ей даже не нужно этого делать — вы хотите иметь тот же каталог, что и раньше. Все, что нужно, — это вообще не трогать каталог.

Тем не менее, есть ошибка, описывающая эту проблему:
gnome-terminal: Ошибка 697475 — Новая вкладка не открывается в том же каталоге, что и предыдущая вкладка
Обсуждение очень длинное, у меня нет резюме; vte.shобсуждается там, и, судя по всему, проблема может быть исправлена, но пока не полностью выпущена.

решение3

Обновление от 2022 года:

  • включая /etc/profile.d/vte.shв ~/.zshrcработает сейчас, однако только для новыхвкладки, не для новыхокна
  • обходной путь от @admirabilis, повторенный ниже, раньше работал, но теперь он нарушает завершение каталога с помощью клавиши Tab
  • оба пункта выше верны при настройке zsh как «пользовательской команды» в терминале Gnome, а также при установке zsh в качестве оболочки по умолчанию с помощью chsh
cd $(<>/dev/shm/$USER-pwd)

__cd(){
    \cd "$@"
    pwd >/dev/shm/$USER-pwd
}
alias cd=__cd

Версии

Интересно, что и Gnome Terminal, и ZSH по-прежнему используют ту же основную версию, что и 8 лет назад.

~$ 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)

Связанный контент