我的 Emacs 运行在已启动的标签上worker
。server-start
我在其他地方打开了一个文件管理器(例如另一个显示器),当我用emacsclient
它打开一个文本文件时,可以在 emacs 中成功打开,但不会切换到它,也不会将其启动。
我正在寻找的是 中的客户端特定信号rc.lua
。类似于:
client.add_signal("focus", function(c) c:raise() end)
我希望它仅特定于 Emacs。worker
同时切换到标签。或者我可以从 Emacs 规则回调中执行此操作吗?
有任何想法吗? :)
答案1
我想要的是同样的东西,而你关于 emacs 回调的想法最终奏效了。我还没有在 awesome 上测试过,但我正在使用 dwm,我想它们足够相似,可以实现这一点。
这是emacs中的回调函数:
(defun raiseme ()
(x-send-client-message
nil ; DISPLAY - nil is selected frame
0 ; DEST - 0 is root window of display
nil ; FROM - nil is selected frame
"_NET_ACTIVE_WINDOW" ; MESSAGE-TYPE - name of an Atom as a string
32 ; FORMAT - size of the values in bits
'(1 "_NET_WM_USER_TIME" 0) ; VALUES
)
)
有几种方法可以调用回调。为了简单和灵活,我选择了一个 shell 别名来调用回调,然后调用常规 emacsclient:
$ alias edi
alias edi='emacsclient -e "(raiseme)"; emacsclient -n'
希望它仍然有用;)
有关消息类型和值的更多参考,请参阅窗口管理器提示。
至于awesome对这个消息的处理,好像是处理了这个事件,源代码是这里。