2009-10-08 11 views
9

esta es una pregunta bastante rudimentaria, pero ¿cuál es la diferencia práctica entre abrir un nuevo archivo en un marco separado (make-new-frame) de emacs o abrir el archivo en una instancia de emacsclient? Puedo ver que si está trabajando a través de un terminal, la diferencia es clara ... ¿pero emacsclient puede restringir adicionalmente la lista de almacenamientos intermedios a los que accedió (buffer-menu) o ido-mode a los buffers abiertos en esa instancia emacsclient particular?Emacs - emacsclient o nuevo marco?

Respuesta

5

Realmente no hay diferencia entre las dos situaciones, aparte del hecho de que el servidor configura algún estado de buffer local para habilitar C-x # (también conocido como server-edit).

Puede limitar M-x list-buffers comportamiento como que está pidiendo a los siguientes consejos:

(defadvice list-buffers-noselect (before list-buffers-noselect-limit-to-those-for-emacsclient activate) 
    "When the current buffer is a being viewed by an emacclient, restrict the buffers to those associated with the emacsclient" 
    (when (and (null (ad-get-arg 1)) server-buffer-clients) 
    (let ((blist (delete-dups (reduce 'append 
             (mapcar (lambda (proc) (process-get proc 'buffers)) 
               server-buffer-clients))))) 
     (ad-set-arg 1 blist)))) 

Ahora cuando haces M-x buffer-menu en un buffer visitado por emacsclient, sólo se ve otros tampones visitados por el mismo cliente (s) Funciona normalmente cuando el buffer no es visitado por un emacsclient.

No uso ido, pero imagino que la personalización sería similar (si este consejo no funciona como está).

Los detalles son que cuando ejecuta emacsclient, los almacenamientos intermedios que se abren están asociados con el proceso del servidor (puede ser más de uno porque puede abrir el mismo archivo mediante múltiples invocaciones de emacsclient). Los clientes de un servidor de búfer se almacenan en la variable local de búfer server-buffer-clients.

Para saber en qué tampones están asociados con una invocación particular de emacsclient, busque el proceso para que emacsclient, y hacer: (process-get proc 'buffers) (donde proc es el proceso emacsclient particular, - uno de los elementos de la lista que se encuentra en server-buffer-clients).

Eso es todo lo que hace el consejo.

+0

Gracias! Como menciona Jed, parece que no hay diferencia cuando se abre un nuevo marco, pero el consejo anterior funciona cuando abro un nuevo archivo con emacsclient -t. Interesante ... Investigaré esto por ido-mode y posiblemente por ibuffer. ¡Muy apreciado! – hatmatrix

+0

¿Lo conseguiste trabajando con ido? – tatsuhirosatou

3

No hay diferencia en emacs 23, siempre que se ejecute emacsserver. La lista de buffer será la misma en cada uno.

+0

Gracias - sí parece bastante correcto, pero parece que hay cierta conciencia por parte de emacs sobre qué cliente está accediendo a un archivo en particular, como señala Trey ... ¡pero gracias por su aporte! – hatmatrix

Cuestiones relacionadas