как запустить определенный код elisp после запуска нового фрейма emacsclient?
-
22-09-2019 - |
Вопрос
Моя проблема в другом.Я хочу написать сценарий, который открывает новый фрейм emacs (с фокусом на нем) (один из способов сделать это — запустить emacsclient -c
), а затем запустите следующий код elisp в этом кадре.
(org-remember)
Я пытался
emacsclient -c & emacsclient -eval '(org-remember)'
Но иногда он просто открывает новый кадр без фокуса, а затем запускает код elisp, а в других случаях он открывает новый кадр с фокусом, но запускает код elisp в старом кадре.
Некоторые, кто знает, что делает org-remember, могут спросить меня, почему бы просто не сделать это:
emacsclient -eval '(org-remember)'
но это не привлекает внимания к старому кадру.
Решение
Моя версия emacsклиент не поддерживает -c
аргумент, несмотря на документация, рекламирующая это.
Я не уверен, есть ли более чистый способ сделать это, но вы можете попробовать использовать make-frame
и select-frame
, вот так:
emacsclient -e '(select-frame (make-frame))' '(org-remember)'
Это создаст новый кадр, и, если ваш оконный менеджер не выберет его автоматически, предоставит ему фокус, а затем выполнит вторую команду с этим новым кадром, имеющим фокус.
Другие советы
Как насчет того, чтобы просто объединить две командные строки, которые вы уже пробовали, в одну:
emacsclient -c -e '(org-remember)'
Это работает в Emacs 23.1.