vte.sh 不會將我的 gnome-terminal 目錄保留在新分頁中

vte.sh 不會將我的 gnome-terminal 目錄保留在新分頁中

我曾經在 gnome-terminal 中開啟新分頁時保留我的工作目錄,並希望恢復此功能。我的研究指出我/etc/profile.d/vte.sh在我的(我使用 Z shell)中進行採購~/.zshrc,但這並沒有改變問題,我的新選項卡仍然在~.

我怎麼才能恢復這個功能?如果有必要的話,這可能是個骯髒的駭客行為。

我的版本

~$ 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/shm代替/tmp以避免磁碟寫入,儘管/tmp可能已經是一個臨時檔案系統在您的系統上。\cd用於避免叉子炸彈

如果您只想在 gnome-terminal 中使用此功能,則可以包含 if 語句來檢查目前終端或活動視窗。另外,如果您擔心其他使用者可能會發現您的最後一個目錄是什麼,您可以修改權限$USER-pwdchmod

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, 然後啟動 shell - 但這聽起來不是一個好方法。


如果是關於新選項卡中 shell 的預設目錄被設定為觸發新選項卡操作時當前選項卡的當前目錄:這對我有用,所以我只能給出提示 - 我運行舊版本,GNOME Terminal 3.6.2.

我很確定這不是/etc/profile.d/vte.sh設定目錄的腳本;在我的版本中 - 它工作正常 - 腳本不包含與之相關的程式碼,而且我從未使用過它。

終端程式本身可以在分叉 shell 進程之前設定目錄。
但實際上,它甚至不需要這樣做 - 你想要像以前一樣擁有相同的目錄。所需要的只是根本不接觸目錄。

也就是說,有一個錯誤描述了這個問題:
gnome-terminal:錯誤 697475 - 新選項卡未在與上一個選項卡相同的目錄中開啟
討論很長,我沒有總結;vte.sh在那裡進行了討論,從跳過來看,它看起來可能已修復,但尚未完全發布。

答案3

2022 年更新:

  • 包括現在/etc/profile.d/vte.sh確實~/.zshrc有效,但僅適用於新的選項卡,不適合新的視窗
  • 下面重複的 @admirabilis 的解決方法曾經有效,但現在使用 Tab 鍵破壞了目錄完成
  • 當在 Gnome 終端機中將 zsh 配置為「自訂命令」以及使用 chsh 將 zsh 設為預設 shell 時,上述兩點都是正確的
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)

相關內容