Ubuntu

讓 wmctrl 與多個 Emacs 視窗一起工作

  • June 18, 2013

我正在嘗試編寫一個將焦點切換到 Emacs 的腳本。這就是我所擁有的:

#!/bin/bash
wmctrl -a 'emacs@pat-ubuntu-desktop'

當只打開一個 Emacs 視窗(或 Emacs 術語中的“框架”)打開時,它可以正常工作,但是當打開多個 Emacs 視窗時,它不會做任何事情。問題似乎是打開第二個視窗時視窗標題會發生變化。當打開一個視窗時,它的名稱是emacs@pat-ubuntu-desktop

➜  ~  wmctrl -l
0x05c000a3  0 pat-ubuntu-desktop emacs@pat-ubuntu-desktop

但是當我打開第二個視窗時,視窗標題會發生變化:

➜  ~  wmctrl -l
0x05c000a3  0 pat-ubuntu-desktop *scratch*
0x05c00921  0 pat-ubuntu-desktop *scratch*

編輯:以下問題是虛幻的,因為我的網路瀏覽器的標題中有“emacs”(因為我正在搜尋有關我的第一個問題的資訊)。

另一個問題(可能相關,也可能不相關)是,即使只打開一個 Emacs 視窗,該命令wmctrl -a 'emacs'也不起作用,但wmctrl -a 'emacs@'(或wmctrl -a 'emacs@pat-ubuntu-desktop')起作用。為什麼必須@包括在內?

視窗標題的匹配不是很可靠。例如,如果您在瀏覽器中查看此問題,則wmctrl -a 'emacs'可能會啟動您的瀏覽器。

您可以使用 自定義框架標題格式frame-title-format。我用(multiple-frames "%b" ("" invocation-name "@" system-name)). 但我不建議在你的腳本中依賴它。

您可以使用選項告訴wmctrl按類查找視窗-x。這既簡單又可靠。

wmctrl -x -a Emacs

或者,您可以讓 Emacs 完成這項工作。當有多個活動幀時,這使您有更好的機會選擇“最佳”幀。

如果你只是想切換焦點,為什麼不使用 emacsclient 呢?

emacsclient --eval '(select-frame-set-input-focus (selected-frame))'

如果你想同時打開一個文件,你甚至可以使用

emacsclient -n FILE

如果您出於其他原因需要使用 wmctrl,我想您可以通過 emacsclient 獲取(emacs-pid)(frame-parameter frame 'display)(frame-parameter frame 'window-id)等,然後將它們提供給wmctrl.

也看看: https ://github.com/tkf/emacs-wmctrl

引用自:https://unix.stackexchange.com/questions/79637