SO: OS X 10.9.5, Mavericks
GNU Emacs 24.3.1 (x86_64-apple-darwin13.1.0, Carbon Version 1.6.0 AppKit 1265.19) del 2014-04-03 en Rainers-MacBook-Pro-3.local
Instalé emacs a través de homebrew de railwaycat y funciona bien, no tengo quejas. No uso emacs en el termoinal, y generalmente lo inicio a través de la aplicación.
Como dije, estoy feliz hasta ahora.
Solo tengo una cosa que no logré hacer bien (que funcionó bien en Linux antes), que es:
- obtener el demonio de emacs al iniciar sesión
- usando emacsclient para abrir
- cierre emacsdaemon y guarde todos los archivos al cerrar sesión
¿Alguna receta que pueda ayudarme a configurar esto?
Información agregada
Para iniciar un demonio emacs al iniciar sesión
Creé una aplicación Automator ejecutando el comando bash
/usr/local/bin/emacs --daemon
y lo agregué a los Elementos de inicio de sesión que funciona bien.
Utilizando demonio desde la terminal
Puedo utilizar el demonio emacs usando
emacsclient .bashrc
que abre .bashrc en una sesión de terminal emacs.
Utilizando desde GUI
Ahora sigue siendo la pregunta: ¿cómo puedo utilizarlo desde la GUI?
Según entiendo el emacsclient, no puedo abrir un emacsclient a menos que especifique un archivo para abrir.
Me gustaría abrir una GUI de emacsclient y abrir todos los archivos que se abrieron previamente . es posible?
Descubrí que puedo usar
emacsclient -c
en una terminal para hacer lo que quiero, pero ¿puedo hacer lo mismo para la GUI?
fuente
emacsclient
no es una aplicación en lo que respecta a OS X, solo loEmacs
es (y solo si se ha instalado de esa manera). ¿Por qué no usa las combinaciones de teclas del sistema para seleccionar una aplicación / ventana abierta? (No funcionará si Emacs se inició en modo demonio y todavía no hay un marco ("ventana")).Respuestas:
Realmente no me importa que Emacs.app siempre se ejecute, pero el hecho de que no pudiera cerrar la ventana sin matar accidentalmente el servidor de Emacs fue molesto. E incluso si intenta realmente matar el último fotograma, todavía no le permite: "Intentar eliminar el único fotograma visible o iconificado". ... Así que hacemos trampa.
Esta solución solo oculta Emacs (como Command+ h) cuando intenta cerrar la última ventana haciendo clic en el botón Cerrar.
Agregue lo siguiente a su Emacs init en alguna parte:
Y agregue Emacs a "Usuarios y grupos> Elementos de inicio de sesión", y haga clic en la casilla de verificación "Ocultar".
Su Emacs init también necesita llamar a
(start-server)
alguna parte.Estoy usando esta
emacsclient
envoltura para llevar a Emacs al frente primero:Cuestiones:
Al hacer clic en el icono de Emacs en el Dock, a veces parece crear aleatoriamente una nueva ventana. Pero no siempre.Esto se basa en la respuesta de @noaham que sugiere minimizar Emacs, y esta respuesta explica cómo enganchar tratando de cerrar la última ventana.
EDITAR:
Al buscar a través de la fuente, encontré el "enlace de teclas" para el
mac-apple-event-map
que se realizan llamadasmac-ae-reopen-application
.mac-ae-reopen-application
parece comprobar si hay marcos visibles e iconificados y de alguna manera debe perder nuestro oculto. Esto es posiblemente un error.La solución fácil es simplemente deshabilitar el enlace de teclas en su init:
Esto introduce un nuevo error menor: al hacer clic en el icono del dock cuando todas las ventanas están minimizadas, no se maximiza automáticamente una de ellas. La solución correcta sería reescribir
mac-ae-reopen-application
, pero apenas conozco emacs y elisp.fuente
El puerto Yamamoto Mitsuharu de emacs no es compatible con multi-tty desafortunadamente (vea este número ). Esto significa que no puede iniciar el demonio emacs desde la terminal e iniciar una ventana gui con emacsclient.
Esto es lo que hago: en mi init.el tengo
(server-start)
y ejecuto Emacs.app al iniciar sesión. La molestia aquí es que esto abre una ventana que tengo que minimizar manualmente.Luego tengo un script bash llamado
emacsc
con lo siguienteLuego creo una aplicación con AppleScript que contiene lo siguiente
Es importante pasar la
-n
bandera a emacsclient; de lo contrario, solo podrá usar la aplicación emacsc para abrir un cliente a la vez. Establecer la variable de ruta asegura que OS X pueda encontrar la versión correcta de emacsclient.Decirle a Emacs que "active" asegura que su ventana de cliente se iniciará en primer plano.
Como dije, la molestia es que debe minimizar manualmente la ventana de emacs al iniciar sesión y luego tenerla sentada en el muelle. Una forma de evitar esto es "ocultar" automáticamente Emacs después de iniciar sesión, pero luego de activarlo hará que se oculte.
fuente
No estoy seguro de cómo Railwaycat Emacs es diferente de la fórmula habitual de elaboración casera, pero con esta última lo haría
ln -sfv /usr/local/opt/emacs/*.plist ~/Library/LaunchAgents
, que se ejecutaríaemacs --daemon
al iniciar sesión.El plist se incluye como un documento AQUÍ en la fórmula . Todo lo que necesita para adoptarlo es cambiar la ruta a su aplicación emacs en la línea
<string>#{opt_bin}/emacs</string>
.Por cierto, también puede obtener Emacs como una aplicación OS X con Homebrew Emacs si lo instala con la
--cocoa
opción. (También deberá ejecutarbrew linkapps
después, vincularlo/Applications
o crear el vínculo usted mismo.fuente
En Mac, los demonios son, el 90% del tiempo, administrados usando launchd . Puede ejecutarlos en muchos desencadenantes, incluido el inicio / cierre de sesión del usuario. Hay una bonita aplicación para Mac llamada Lingon para ver y editar las diversas cosas que está ejecutando launchd. El wiki de emacs tiene algunas menciones de esto, incluido un archivo de configuración de ejemplo . Pero parece que no aborda su preocupación, es decir, cómo cerrar el demonio al cerrar sesión.
fuente
Cree una aplicación AppleScript como esta:
Es posible que tenga que ajustar la ruta, o puede dejar la ruta por completo. También podría usar algo más elegante con el que se inicia el demonio si aún no se está ejecutando.
fuente