Emacs 和 Evince 之间的 Synctex,将焦点移至向后搜索

Emacs 和 Evince 之间的 Synctex,将焦点移至向后搜索

有一个很好的方法使 Emacs、Evince 和 Synctex 协同工作。但是它有一个小问题:当您进行向后搜索时,焦点不会移至 Emacs(因此您必须使用鼠标或 Alt+Tab 进行此操作)。这是一个轻微但令人不快的问题。

在 Linux 中(我使用的)有一个名为控制端可用于在窗口之间移动焦点。但是我不知道如何将其添加到脚本中上文提到的,所以我决定问一下。

(我相信这个问题的重点是使用 Emacs Lisp,所以较少的与 Ask Ubuntu 相关)。

答案1

添加以下代码,取自https://lists.gnu.org/archive/html/bug-auctex/2013-04/msg00004.html,到你的.emacs

(defun raise-client-frame ()
  (let ((wmctrl (executable-find "wmctrl")))
    (if wmctrl
    (start-process "wmctrl" nil wmctrl "-R" (frame-parameter nil 'name)))))
;; This raises the frame when using Evince.
(add-hook 'TeX-source-correlate-mode-hook
      (lambda ()
        (when (TeX-evince-dbus-p)
          (dbus-register-signal
           :session nil "/org/gnome/evince/Window/0"
           "org.gnome.evince.Window" "SyncSource"
           (lambda (file linecol &rest ignored)
         (TeX-source-correlate-sync-source file linecol ignored)
         (raise-client-frame))))))
;; This raises the frame when using all other viewers.
(add-hook 'server-switch-hook 'raise-client-frame)

AUCTeX 的当前版本支持使用 Evince 进行正向/反向搜索,不再需要使用旧的黑客技术。

答案2

 (defadvice raise-frame (after make-it-work (&optional frame) activate)
     "Work around some bug? in raise-frame/Emacs/GTK/Metacity/something.
      Katsumi Yamaoka <[hidden email]> posted this in
      http://article.gmane.org/gmane.emacs.devel:39702"
      (call-process
       "wmctrl" nil nil nil "-i" "-R"
       (frame-parameter (or frame (selected-frame)) 'outer-window-id)))

假设您已经wmctrl在系统上安装,请将上述代码放入您的初始化文件中。

来源: http://emacs.1067599.n8.nabble.com/Raising-the-Emacs-frame-in-response-to-a-DBUS-signal-td399111.html

相关内容