私はgnome-terminalで新しいタブを開くときに作業ディレクトリを維持しようとしましたが、この機能を再度インポートしたいと思います。私の研究/etc/profile.d/vte.sh
では、私のソーシング(Zシェルを使用)を指摘しましたが、~/.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-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
タブ、新規には適していませんWindows - 以下にレプリケートされた@admirabilisの回避策は以前は機能していましたが、今度はタブキーを使用して目次補完機能を停止します。
- 上記の両方とも、zsh が Gnome Terminal で「カスタムコマンド」で構成され、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)