Как запустить определенный код elisp после запуска нового кадра Emacsclient?

Чтобы узнать, как автоматически оценивать определенный код lisp при каждом запуске 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.

Другие вопросы по тегам