太棒了-当收到焦点时,这是提升客户的信号


13

我的Emacs在启动的标签worker上运行server-start。我有一个在其他地方(例如,另一个监视器)打开的文件管理器,当我用emacsclient它打开文本文件时,在emacs中成功打开了文件管理器,但是没有切换到该文件,也没有启动它。

我正在寻找的是特定于客户的信号rc.lua。就像是:

client.add_signal("focus", function(c) c:raise() end)

我希望它仅适用于Emacs。并同时切换到worker标签。另外,我可以从Emacs规则回调中执行此操作吗?

有任何想法吗?:)


1
没人遇到过吗?
platforma

Answers:


0

我想要同样的东西,而您对emacs回调的想法终于奏效了。我还没有对它进行过很棒的测试,但是我正在使用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'

希望它仍然有用;)

有关消息类型和值的更多参考,请参见窗口管理器提示

至于真棒的处理此消息,似乎此事件已处理。源代码在这里

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.