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