如何确定当前帧是否在Emacs中具有OS级别焦点

时间:2012-01-09 12:33:34

标签: emacs

我已经开始使用ERC和bitlbee来管理我在Emacs中的聊天会话。它正在精彩地工作,有一个小的缺失功能 - 当Emacs没有焦点时发出警报。

理想情况下,当我发送消息并且聊天缓冲区被隐藏或者Emacs本身不是具有输入焦点的应用程序时,我会有操作系统级警报(Growl或其他)。我的第一个工作正常,但如果我能找到一种方法来确定Emacs本身是否有输入焦点,我就会被惹恼。

我能找到的最近的是frame-visible-p,但这只会告诉你帧是否被最小化。

非常感谢任何帮助 - 谢谢!

2 个答案:

答案 0 :(得分:0)

您可以尝试在计时器上进行轮询,并检查switch-frame事件。可能或可能不起作用。请参阅Elisp手册,节点Focus Events

答案 1 :(得分:0)

您可以运行外部命令。这将使用xdotool

获取活动窗口的名称
(defun get-active-window-title ()
  (let ((command-result
         (shell-command-to-string
          (concat "xdotool getwindowname "
                  (shell-command-to-string
                   "xdotool getactivewindow")))))
    (substring
     command-result
     0 (1- (length command-result)))))