Quiero poder invocar Emacs desde la línea de comandos, y comenzar Emacs gráficos si no se está ejecutando o visitar un archivo en un Emacs que ya se está ejecutando. Intenté hacer esto con emacsclientlo que sé que es la forma "correcta" de hacerlo, pero tuve muchos problemas con él en OS X, se bloqueó al azar o el emacs --daemonproceso se bloqueó durante el apagado o reinicio de la máquina, y descamación general. Si bien me gustaría que eso funcione, en este momento en open -arealidad funciona mucho mejor, excepto por este problema que describiré a continuación:
Usando open -aasí:
$ open -a Emacs file.txt
iniciará Emacs si no se está ejecutando y visitará el archivo. Pero si hago esto cuando el búfer actual no es *scratch*el archivo se abre en un nuevo marco (es decir, una nueva ventana del sistema).
Aquí hay una sesión de ejemplo:
$ open -a Emacs file.txt
Esto inicia Emacs y abre file.txt, por lo que hay un solo marco con este búfer. Si cambio al *scratch*búfer y hago esto:
$ open -a Emacs file1.txt
Abre este archivo en el mismo marco. Ahora hay un solo marco con este archivo abierto, y si hago esto:
$ open -a Emacs file2.txt 
Abre un nuevo marco, lo que resulta en dos marcos abiertos a la vez.
Intenté jugar con args de línea de comandos para Emacs usando el --argsinterruptor a open, pero esto no parece funcionar para llamadas posteriores, por ejemplo:
$ open -a Emacs --args --eval='(print "foo")'
$ open -a Emacs --args --eval='(print "bar")'
Esto solo imprime "foo" en el búfer de mensajes ... la segunda vez que Emacs se pone en primer plano pero no se imprime ningún mensaje.
No estoy seguro de cómo se opencomunica con las aplicaciones que ya se están ejecutando, ¿alguien sabe cómo podría averiguarlo? ¿O hay alguna forma de obtener un registro mucho más detallado de lo que está sucediendo que el Messagesbúfer? No se imprime nada interesante en ese búfer durante la sesión anterior, así que no sé cómo podría hackear algunos Emacs Lisp para hacer lo que quiero ...
¡Gracias!

find-filey luego lo estableceríadebug-on-erroren t y verificaría el seguimiento de la pila para obtener alguna pista sobre cómo se invoca Emacs. Agregar un error afind-filepodría ser tan simple como copiar la definición de la función al búfer scratch de lisp y agregarle una llamadaerror(p(error "cause stack trace"). Ej . NUNCA CAMBIE EL ARCHIVO DE FUENTESfind-file- ¡siempre haga esto en un scratch bufer!emacsclientnuevamente, y comenzarlo con(server-start)miinit.elparece estar funcionando mejor queemacs --daemonen el arranque, que es lo que había intentado la primera vez que lo intentéemacsclient.Respuestas:
La respuesta está aquí: variable emacs para "abrir con" en el marco original
Es un cambio en la configuración predeterminada en las versiones más recientes de emacs. Añadir:
al archivo .emacs.
Muy feliz de haber encontrado esto.
fuente
open -a /Applications/Emacs.app $1cosas parecen funcionar bien! Tenga en cuenta que inicio el servidor en mi init, para tener emacs disponibles para git, por ejemplo.