Как узнать, имеет ли текущий кадр фокус на уровне ОС в Emacs? - PullRequest
2 голосов
/ 09 января 2012

Я начал использовать ERC и bitlbee для управления сеансами чата в Emacs.Это работает великолепно, с одной маленькой отсутствующей функцией - оповещениями, когда Emacs не имеет фокуса.

В идеале, я получу оповещение на уровне ОС (Growl или что-то еще), когда я отправляю сообщение, и либобуфер чата похоронен или Emacs сам по себе не является приложением с фокусом ввода.У меня первый бит работает нормально, но я буду ошибаться, если смогу найти способ определить, есть ли у Emacs фокус ввода.

Ближайшее, что я могу найти, это frame-visible-p, ноэто только говорит вам, если кадр свернут или нет.

Любая помощь очень ценится - спасибо!

Ответы [ 2 ]

0 голосов
/ 12 января 2012

Вы можете запустить внешнюю команду. Это дает вам имя активного окна с 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)))))
0 голосов
/ 09 января 2012

Вы можете попробовать опрашивать по таймеру и проверять событие switch-frame.Может или не может работать.См. Руководство по Elisp, узел Focus Events.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...