Как запустить emacs из командной строки, но использовать emacsclient, если сервер уже запущен?

Я использую emacs под Ubuntu

Если я хочу отредактировать a.txt, я либо щелкаю значок emacs, либо использую

$ emacs  --geometry 10x10 --fullscreen --no-splash ~/a.txt &

из баш. Мой файл .emacs запускает сервер emacs.

Если я затем хочу отредактировать другой файл из командной строки, я использую

$ emacsclient -n ~/b.txt

чтобы загрузить файл в существующий emacs.

но я продолжаю ошибаться, и весь ад рушится по-разному.

Как мне сделать команду bash 'e', которая проверяет, запущен ли уже сервер emacs, и выполняет соответствующую команду?

Попытки использовать переключатель emacsclient -a неизменно приводят к нежелательному и непродуманному поведению.

Дополнительные баллы, если он может «делать правильные вещи» и при запуске на консоли.


person John Lawrence Aspden    schedule 23.07.2014    source источник
comment
Какие проблемы вы находите с emacsclient -a?   -  person juanleon    schedule 23.07.2014


Ответы (1)


Пока это определение функции в .bashrc кажется идеальным решением:

function e #open emacs in background and disown it, or if already running use emacsclient
{
 echo "emacs function backgrounds and disowns emacs, or calls client if server already running; see .bashrc";
 local FLUFFY="$@";
 local SERVERSOCKET=/tmp/emacs${UID}/server ;
 echo "trying to open: " $FLUFFY 
 echo " checking: " $SERVERSOCKET "for emacs server " ;
 # test for existence of emacs server socket 
 if [ -e $SERVERSOCKET ]; then
     echo "using emacsclient"
     emacsclient -n $FLUFFY;
 else
     echo "starting emacs: make tea..."
     emacs  --geometry 10x10 --fullscreen --no-splash $FLUFFY & disown ;
 fi;
}

которое произошло от этого заклинания:

FLUFFY=~/b.txt ; if [ -e /tmp/emacs1000/server ]; then emacsclient -n $FLUFFY; else emacs  --geometry 10x10 --fullscreen --no-splash $FLUFFY & fi;

который делает то, что я хочу, проверяя наличие сокета сервера emacs для пользователя 1000.

person John Lawrence Aspden    schedule 23.07.2014