Recientemente compré mi primera Mac en una década y estoy en el proceso de configurarla. Soy un usuario de Emacs y he determinado que solo quiero Emacs normales, no Aquamacs, para poder usar mi configuración existente desde otros sistemas operativos. He intentado seguir muchos procedimientos que he encontrado en línea (como este , este y este del sitio desde el que descargué Emacs ), y he intentado combinar las piezas de varias maneras, pero nunca metí las cosas en un estado que incluso se acercaba a lo que estoy acostumbrado / esperando:
- Un demonio de Emacs comienza a ejecutarse en el inicio o tan pronto como lo necesite ; Cualquiera esta bien. Cualquier nuevo marco de Emacs está respaldado por el mismo servidor.
- Cuando abro un archivo de texto desde el Finder, el archivo se abre en Emacs, en un marco gráfico existente si es posible.
- Si ejecuto Emacs.app, el sistema reutiliza el demonio emacs que se ejecuta en segundo plano en lugar de iniciar una nueva instancia y abrir una nueva ventana. ( punta de sombrero )
- Cuando ejecuto Emacs desde una terminal, la terminal se ocupa de sus asuntos sin esperar a que termine con Emacs (a menos que use '-nw')
- AFAIK en ningún momento durante las operaciones descritas anteriormente debería terminar Emacs en un estado ("¿modo de edición del servidor?") Donde está esperando que escriba
C-x #
, aunque no tengo un conocimiento profundo de este. - (Consideraría esto como una bonificación). Hay alguna forma de invocar Emacs desde un terminal para que Emacs reutilice un marco existente si es posible.
¿Cómo podría configurar Emacs para que se comporte así?
Estoy particularmente perplejo al hacer que el Finder abra cosas en Emacs de la manera que quiero (# 2), ya que las guías que he encontrado generalmente crean una serie de alias, Applescripts, scripts de bash, etc. y no estoy seguro que quiero decirle al Finder que use para abrir archivos de texto.
¡Gracias!
R. @lawlist pregunta: "¿Se abre un nuevo marco de forma predeterminada cuando abre un nuevo archivo desde el terminal a pesar de que hay un marco existente?" La respuesta es que si inicio un servidor al inicio como se describe aquí , abro un marco y luego abro un archivo escribiendo /Applications/Emacs.app/Contents/MacOS/bin/emacsclient -n <whatever>
, puedo hacer que el archivo se abra en un marco existente. Si no hay ningún marco abierto actualmente, tengo que usar "-nc" o cuando intento abrir un archivo no sucede nada.
B. @lawlist pregunta: "¿Desea que el demonio se ejecute al iniciar sesión, o sería suficiente cargar Emacs manualmente después del inicio de sesión?" Correr manualmente estaría bien.
M-x server-start
iniciará manualmente el servidor para queemacsclient
pueda comunicarse con él. He colocado(server-start)
en miinit.el
archivo en lugar de utilizar un demonio al iniciar sesión; sin embargo, muchas personas prefieren la opción de inicio de sesión del demonio. Y, por supuesto, el.emacs
archivo sería un lugar adecuado para(server-start)
.ns-find-file
- que se activa automáticamente cuando un archivo está asociado con Emacs.app. La función de mi archivo de intercepción en los enlaces anteriores también modificans-find-file
si eso es algo que le interesa. Por supuesto, necesitas construir Emacs--with-ns
.Respuestas:
Para hacer que Emacs.app abra archivos en un marco existente en lugar de un nuevo marco, agréguelo
(setq ns-pop-up-frames nil)
a un archivo de configuración como~/.emacs
.Puede abrir un archivo desde una terminal con
open -a emacs file
oemacsclient -n file
. Si Emacs.app no está abierto pero hay unEmacs --daemon
proceso, por alguna razónemacsclient -n file
no funciona peroemacsclient -nc file
sí.Asegúrese de usar el
emacsclient
binario incluido con la versión de Emacs que usa, como/Applications/Emacs.app/Contents/MacOS/bin/emacsclient
, o/usr/local/bin/emacsclient
si instaló Emacs con Homebrew.Para iniciar un servidor Emacs al iniciar sesión, por ejemplo, guarde esta lista como
~/Library/LaunchAgents/my.emacsdaemon.plist
:El plist se carga automáticamente la próxima vez que inicie sesión, pero puede cargarlo inmediatamente ejecutando
launchctl load ~/Library/LaunchAgents/my.emacsdaemon.plist
.Editar: todavía no sé por qué las personas asocian tipos de archivos con una aplicación AppleScript en lugar de solo Emacs.app. Sin embargo, el script en la respuesta de kuzzooroo también podría escribirse como un script de shell:
Puede usar Platypus para guardar el script como una aplicación:
Acabo de comenzar a usar Emacs, pero tengo una configuración completamente diferente. Hice mi propia aplicación Emacs haciendo una copia de iTerm.app, cambiando el CFBundleIdentifier en Info.plist para que la aplicación use un archivo de preferencias diferente y estableciendo el comando predeterminado en
/usr/local/bin/emacs
. He añadido(server-start)
a~/.emacs
y abra la aplicación Emacs personalizada al iniciar la sesión. Utilicé Platypus para crear una aplicación que se ejecutaemacsclient -n "$@";open -b my.emacs
y la convertí en la aplicación predeterminada para archivos de texto.fuente
La solución de Lauri combinada con las sugerencias de los comentarios han abordado en gran medida mis problemas. He pegado debajo de un Applescript que uní a partir de cosas que encontré en línea. El script ayuda a suavizar algunas arrugas restantes, por ejemplo, su comportamiento es un poco mejor si no hay un marco Emacs actual.
EDITAR: el propósito del script es asociarse con archivos .txt en el Finder.
fuente