Como abrir um arquivo em um processo existente do emacs na linha de comando?

13

Eu tenho vários scripts que iniciarão todos os aplicativos e arquivos relacionados a um projeto específico. Porém, ele iniciará várias instâncias do emacs, em vez de simplesmente fazer com que o emacs atual abra os arquivos solicitados. Prefiro que o emacs atual simplesmente abra os arquivos de texto do projeto em um novo buffer.

Alguma idéia de como eu posso fazer isso?

bev
fonte
Dê uma olhada na minha resposta stackoverflow.com/a/38655619/2450748 Embora 5 anos mais tarde :)
nexayq

Respostas:

20

M-x server-startdentro da sessão do Emacs, use emacsclient -n file1 file2 ...para adicionar arquivos ao Emacs existente. Existem opções adicionais que você pode querer usar, por exemplo, -cpara abrir os arquivos em uma nova janela (quadro).

geekosaur
fonte
obrigado dood. É o que eu preciso saber. Ainda não estou verificando a 'resposta certa', porque ouvi dizer que você deve sempre mantê-la aberta por um tempo para dar aos outros a chance de contribuir. Mas eu já coloquei sua resposta em alguns scripts.
Bev
Normalmente, você deseja (server-start)inserir seu arquivo .emacs, em vez de iniciar o servidor manualmente. Eu uso (and window-system (server-start))para evitar iniciar o servidor se estiver executando o emacs em um terminal.
Cjm 12/03/11
No Emacs moderno, é tão útil em um terminal; veja a -topção
geekosaur 12/03
@ cjm - na verdade eu inicio o servidor no meu arquivo .emacs. Eu simplesmente não usá-lo :-)
Bev
5

Coloque (server-start)no seu .emacsarquivo.

Adicione isto a ~/.bashrc

alias myedit='emacsclient --alternate-editor="" --no-wait $*' #quotes intentionaly left blank

depois use myeditcomo seu editor. Você terá que usar a -copção para abrir uma janela.

Então você pode fazer isso:

myedit -c a-file
run-script #that uses myedit

ou

run-script #that uses myedit
myedit -c
ctrl-alt-delor
fonte
Richard, obrigado pela contribuição. Ainda estou intrigando algumas coisas com seu script. Primeiro, como o emacsclient não tem uma opção -c, estou assumindo que é uma coisa bash, mas não sei. Segundo, por que não colocar o emacs como editor alternativo? Graças
Bev
# $ emacsclient --help .... As seguintes OPÇÕES são aceitas: ... -c, --create-frame Crie um novo quadro em vez de tentar usar o atual quadro Emacs ... -a EDITOR, --alternate -editor = Editor do EDITOR para fazer o fallback para se o servidor não estiver executando Se EDITOR for a sequência vazia, inicie o Emacs no modo daemon e tente conectar-se novamente
ctrl-alt-Delor
Você não precisa (e, de fato, provavelmente não deseja) usar parâmetros posicionais na definição de um alias. Considere como se alias foo='echo bar $*'expande emset quux; foo baz . Se você quiser usar os parâmetros posicionais, experimentá-lo como uma função shell:myedit() { emacsclient … "$@"; }
Chris Johnsen