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?


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).


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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.