X11
使用命令 (wmctrl) 或快捷鍵切換到現有的終端仿真器
很難做到。wmctrl 需要知道視窗標題才能對其進行操作,但是很難知道任何終端仿真器的標題,無論是 gnome-terminal、rxvt、xterm…
因為
- 通常 .bashrc 指定 PS1 將視窗的標題更改為目前路徑。
- VIM 之類的編輯器將視窗的標題更改為目前文件。
- mosh 等命令行工具喜歡更改視窗標題。
- ssh 進入另一台機器,通常遠端主機上的 shell (bash) 會更改標題。因此,如果您刪除 PS1 的標題更改部分,您需要對您可能連接到的每台電腦執行此操作 - 對於任何經驗豐富的管理員來說,這是一長串列表。
- 即使您在終端中執行 GNU Screen,螢幕內的會話仍然可以更改外部終端模擬器的標題。
Fluxbox 允許通過 X 視窗 (xwininfo) 的其他屬性而不是標題來引用視窗。但是切換到fluxbox對於這個小需求來說太大了。
簡而言之,似乎沒有辦法知道終端模擬器視窗的標題……或者,有沒有?
許多終端仿真器(至少 Xterm、Rxvt、Gnome-terminal 和 Konsole)將
WINDOWID
環境變數設置為 X11 視窗 ID。您可以將此視窗 ID 傳遞給wmctrl
:wmctrl -i -a "$target_window_id"
請注意,在 Screen 或 Tmux 會話中,您將獲得最初啟動多路復用器的視窗 ID,而不是目前連接的視窗 ID。
在終端仿真器啟動之前和之後使用
wmctrl -l
並儲存兩次輸出。輸出之間的不同行將為您提供視窗的 ID,使用 cut 自動檢索第一個值(它是 ID)。此 ID 與終端仿真器視窗的標題無關。您可以使用它來執行此操作,
wmctrl -a ID
直到您關閉終端仿真器並且 ID 不再有效。