
以前は、gnome-terminal で新しいタブを開くときに作業ディレクトリを保持していましたが、この機能を復元したいと考えています。調査の結果、 (Z シェルを使用)/etc/profile.d/vte.sh
でソースを取得する必要があることがわかりました~/.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すでに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の回避策は以前は機能していましたが、今ではタブキーによるディレクトリ補完が機能しなくなりました。
- 上記の両方の点は、Gnomeターミナルでzshを「カスタムコマンド」として設定する場合と、chshを使用してzshをデフォルトのシェルとして設定する場合に当てはまります。
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)