我想强迫emacs激活,在某些情况下被收购,以“窃取”焦点。例如,当我完成org-Pomodoro或重要的约会提醒时。
现在,我正在寻找一种“本机”方式来这样做,只是为了减少外部依赖性。(只要Linux对我来说可以,跨平台会更好)。
从emacs内部技术上可行吗?
[编辑]解决方案:
如果使用GUI,则效果很好:
(x-focus-frame nil)
[出于历史原因...]我尝试过:
框架可见性(无效)
(make-frame-visible)
并且:
(make-frame-invisible)
(make-frame-visible)
但是这些似乎仅在Emacs已被激活时才起作用。
框架抬起(无效)
降低帧似乎实际上隐藏了emacs。
(lower-frame)
但是,从定时器提高帧数却没有。即,什么都没有发生。
(raise-frame)
似乎在提高它之前缺少“ activate-emacs”。
[关于外部解决方案的注意事项]
当前,作为一种(解决方法/解决方案?),我使用了一些elisp:
(call-process "activateEmacs")
以及相应的bash脚本:(您可能需要先在系统上安装xdotool)
#!/bin/sh
sleep 0.5
xdotool search --onlyvisible --class emacs windowactivate
谢谢你的建议。降低框架的效果,但是出于某种原因升高框架不会重新升高吗?
—
Leo Ufimtsev'3
我相信@TomTromey是正确的。您可以进行如下测试。首先,创建一个空闲计时器:
—
丹
(defvar my-timer (run-with-idle-timer 5 t (lambda () (raise-frame))))
。用悬挂框架M-x (suspend-frame)
。5秒钟后,该帧将重新出现。
好吧,如果您在这里
—
Leo Ufimtsev'3
(suspend-frame)
等待而无需单击另一个窗口,那么它将起作用。但是,如果您暂停框架并在另一个应用程序中工作,那么emacs不会重新出现。至少在我的系统上没有(带有Mate桌面的Fedora 21)。一个简单的例子是:: (run-at-time "5 sec" nil '(lambda () (interactive) (message "trying to raise frame") (raise-frame)))
在另一个应用程序上运行并运行alt-tab。该消息将显示在缓冲区中,但不会引发emacs ...有什么想法吗?
我正在使用Gui版本的emacs吗?(不是终端版本),您是否也在使用gui?
—
Leo Ufimtsev
raise-frame
。