¿Es posible ejecutar gnus
u otras cosas que tienden a bloquearse con frecuencia en una instancia de emacs separada y "reenviar los buffers" a la instancia principal de emacs. Creo que, en general, me pregunto qué tipo de comunicación entre las instancias de emacs es posible.
7
frame-bufs
github.com/alpaker/Frame-Bufs o una variedad de otras bibliotecas organizacionales (por ejemplo, proyectos , etc.) En pocas palabras, hay muchas maneras de organizar efectivamente un enorme volumen de buffers activos dentro de una instancia de Emacs.el-screen
para la organización del búfer, pero un enfoque orientado a proyectos podría tener más sentido. Estoy imaginando más de un maestro emacs y unos pocos trabajadores sin cabeza que bloquean cosas comognus
. La solución más simple posible: los emacses se comunican a través de sockets o el emacs maestro genera un trabajador efímero y toda la comunicación se realiza a través de stdin y stdout, pero luego tendría que tener muchos problemas para serializar y deserializar objetos específicos de emacs (ese es el trabajo duro que estoy tratando de evitar).Respuestas:
Asegúrese de que cada instancia de Emacs ejecute un demonio con un nombre único. Establezca la variable
server-start
para elegir el nombre del servidor, por ejemploDesde una instancia, puede ejecutar código en otra instancia con la función
server-eval-at
. El valor de la expresión se devuelve a la instancia local. Debe ser un valor que pueda leerse de nuevo: enteros, cadenas, listas y otras estructuras de datos "transparentes" están bien, pero puede transferir buffers, marcos, etc. de esta manera.Puede usar esta función para indicarle a otra instancia que abra un marco, para enumerar los nombres de búfer en otra instancia, etc. Tenga en cuenta que si la otra instancia está ocupada, su código se bloqueará hasta que responda al demonio.
No hay mucho código por ahí que utilice esta función: la mayoría de los usuarios de Emacs ejecutan una sola instancia. Entonces, haga lo que quiera hacer, probablemente tenga que hacer un trabajo de codificación.
fuente
emacs --daemon=gnus
lugar deemacs --daemon --eval '(setq server-name "gnus")'
Emacsclient
Utilice en lugar de Emacs el cliente Emacs. Primero debe hacer un
(server-start)
en su Emacs (en) y luego ejecutar el cliente en su propio marco conemacsclient -c test.mac
.También puede distinguir diferentes archivos del servidor con las opciones
-f ServerFile
(en Windows) o los nombres de los servidores-s ServerName
. Eche un vistazo a http://www.gnu.org/software/emacs/manual/html_node/emacs/emacsclient-Options.html . Para ello, debe configurar diferentes nombres de servidor para los diferentes Emacsen:(setq server-name "Server1")
etc.fuente