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

StackOverflow https://stackoverflow.com/questions/1980784

Вопрос

О том, как автоматически оценивать определенный код Lisp каждый раз запустив emacsclient, нажмите здесь.

Моя проблема в другом.Я хочу написать сценарий, который открывает новый фрейм 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top