¿Cómo abrir un archivo en un proceso existente de emacs desde la línea de comandos?

14

Tengo varias secuencias de comandos que iniciarán todas las aplicaciones y archivos relacionados con un proyecto específico. Pero, lanzará múltiples instancias de emacs, en lugar de simplemente hacer que los emacs actuales abran los archivos solicitados. Prefiero que los emacs actuales simplemente abran los archivos de texto del proyecto en un nuevo búfer.

¿Alguna idea de cómo puedo hacer eso?

bev
fuente
Echa un vistazo a mi respuesta stackoverflow.com/a/38655619/2450748 Aunque 5 años después :)
nexayq

Respuestas:

21

M-x server-startdentro de la sesión de Emacs, luego use emacsclient -n file1 file2 ...para agregar archivos a los Emacs existentes. Hay opciones adicionales que puede utilizar, por ejemplo, -cpara abrir los archivos en una nueva ventana (marco).

geekosaur
fuente
gracias dood. Eso es lo que necesito saber. Todavía no estoy verificando la "respuesta correcta", porque escuché que siempre debes mantenerlo abierto un poco para darles a los demás la oportunidad de contribuir. Pero ya he puesto tu respuesta en algunos guiones.
bev
Normalmente, desearía colocar (server-start)su archivo .emacs, en lugar de iniciar el servidor manualmente. Yo uso (and window-system (server-start))para evitar iniciar el servidor si estoy ejecutando emacs en una terminal.
cjm
En Emacs moderno es igual de útil en una terminal; ver la -topción
geekosaur
@cjm: en realidad inicio el servidor en mi archivo .emacs. Simplemente no lo
usé
5

Poner (server-start)en su .emacsarchivo.

Agregue esto a ~/.bashrc

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

luego úsalo myeditcomo tu editor. Deberá usar la -copción para abrir una ventana.

Entonces puedes hacer esto:

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

o

run-script #that uses myedit
myedit -c
ctrl-alt-delor
fuente
Richard, gracias por el aporte. Todavía estoy desconcertando algunas cosas con tu guión. Primero, dado que emacsclient no tiene una opción -c, supongo que es una cosa bash, pero no lo sé. En segundo lugar, ¿por qué no poner emacs como editor alternativo? Gracias
Bev
# $ emacsclient --help .... Se aceptan las siguientes OPCIONES: ... -c, --create-frame Crea un nuevo marco en lugar de intentar usar el marco actual de Emacs ... -a EDITOR, --alternate -editor = EDITOR Editor al que recurrir si el servidor no se está ejecutando Si EDITOR es la cadena vacía, inicie Emacs en modo demonio e intente conectarse de nuevo
ctrl-alt-delor
No necesita (y, de hecho, probablemente no quiera) usar parámetros posicionales en la definición de un alias. Considera cómo se alias foo='echo bar $*'expande set quux; foo baz. Si desea utilizar los parámetros posicionales, pruébelo como una función de shell:myedit() { emacsclient … "$@"; }
Chris Johnsen