Я хочу змусити активувати emacs, купувати їх за певні обставини та "красти" фокус. Наприклад, коли я закінчу орга-Помодоро або під час важливого нагадування про зустріч.
Тепер я шукаю «рідний» спосіб зробити це, просто зменшити зовнішні залежності. (просто для мене Linux добре, крос-платформне було б краще).
Це технічно можливо зсередини emacs?
[редагувати] Рішення:
Якщо використовується графічний інтерфейс, це добре працює:
(x-focus-frame nil)
[З історичних причин ...] Я спробував:
Видимість кадру (не працює)
(make-frame-visible)
І також:
(make-frame-invisible)
(make-frame-visible)
Але вони, здається, працюють лише в тому випадку, якщо Emacs вже активований.
Підняття кадру (не працює)
Зниження кадру, здається, фактично приховує emacs.
(lower-frame)
Але підняття кадру з таймера не означає. Тобто, нічого не відбувається.
(raise-frame)
Здається, перед тим, як підняти його, існує відсутність "активувати-emacs".
[ПРИМІТКА про зовнішнє рішення]
В даний час як (вирішення / рішення?) Я використовую трохи elisp:
(call-process "activateEmacs")
І відповідний скрипт bash: (можливо, спочатку вам потрібно буде встановити xdotool у вашій системі)
#!/bin/sh
sleep 0.5
xdotool search --onlyvisible --class emacs windowactivate
(defvar my-timer (run-with-idle-timer 5 t (lambda () (raise-frame))))
. Підвісьте рамку с M-x (suspend-frame)
. Через 5 секунд цей кадр знову з’явиться.
(suspend-frame)
зачекаєте там, не клацаючи в інше вікно. Але якщо ви призупинили кадр і переходите до роботи в іншій програмі, то emacs не з’явиться повторно. Принаймні, не в моїй системі (fedora 21 з комп’ютером Mate). Простий приклад такий: : (run-at-time "5 sec" nil '(lambda () (interactive) (message "trying to raise frame") (raise-frame)))
запустіть цю та вкладку alt на іншу програму. Повідомлення з’явиться в буфері, але emacs не піднімається ... Думки?
raise-frame
.