Вы можете сделать -a ''
вещь с emacsclient
, но то, что делаю я и многие люди, - это какой-то сценарий, который в основном делает то, что делает emacsclient ''
, в несколько этапов.
Моя версия похожа на этот сценарий BASH: вас интересует функция ensure-server-is-running
. Это основная функция скрипта, далее следует функция ensure-server-is-running
, а остальное используется после этого для вашего любопытства, но не способствует ответу на вопрос.
#!/bin/bash
# ec.sh
#
# [function definitions]
#
ensure-server-is-running
ensure-frame-exists
focus-current-frame
Убедитесь, что сервер работает
# ec.sh function definition
# From https://emacs.stackexchange.com/a/12896/19972
function server-is-running() {
emacsclient -e '(+ 1 0)' > /dev/null 2>&1
}
function ensure-server-is-running(){
if ! server-is-running ; then
echo "Need to start daemon, press enter to continue, C-c to abort"
read
emacs --daemon
fi
}
И две другие функции:
# ec.sh function definition
# From https://superuser.com/a/862809
function frame-exists() {
emacsclient -n -e "(if (> (length (frame-list)) 1) 't)" 2>/dev/null | grep -v nil >/dev/null 2>&1
}
function ensure-frame-exists() {
if ! frame-exists ; then
emacsclient -c --no-wait
fi
}
# From https://emacs.stackexchange.com/a/54139/19972
function focus-current-frame() {
# Doesn't work a frame exists and is in a terminal
emacsclient --eval "(progn (select-frame-set-input-focus (selected-frame)))"
}
focus-current-frame
- это то, что заставит ОС поместить вас в текущий фрейм Emacs. Это самая важная особенность. Лично я вставляю адаптированную версию этого в приложение MacOS Automator. Когда есть фрейм графического интерфейса emacs, выполнение поиска в Spotlight EmacsC (обычно достаточно простого ввода e) помещает меня в мое окно emacs. Это сверхбыстрый способ перехода к окну emacs.
person
Philippe Carphin
schedule
01.05.2021