2009-10-08 9 views
9

C'est une question plutôt rudimentaire, mais quelle est la différence pratique entre ouvrir un nouveau fichier dans un cadre séparé (make-new-frame) à partir d'emacs ou ouvrir le fichier dans une instance d'emacsclient? Je peux voir que si vous travaillez à travers un terminal, la différence est claire ... mais emacsclient peut-il aussi restreindre la liste des buffers accédés par (buffer-menu) ou ido-mode aux buffers ouverts dans cette instance emacsclient particulière?Emacs - emacsclient ou nouveau cadre?

Répondre

5

Il n'y a vraiment aucune différence entre les deux situations, à part le fait que le serveur configure un état local de tampon pour activer C-x # (aka server-edit).

Vous pouvez limiter le comportement M-x list-buffers comme vous demandez avec les conseils suivants:

(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)))) 

Maintenant, quand vous faites M-x buffer-menu dans un tampon visité par emacsclient, vous ne voyez que d'autres tampons visités par le même client (s). Cela fonctionne normalement lorsque le tampon n'est pas visité par un emacsclient.

Je n'utilise pas ido, mais j'imagine que la personnalisation serait similaire (si ce conseil ne fonctionne pas tel quel). Les détails sont que lorsque vous exécutez emacsclient, les tampons qui s'ouvrent sont associés au processus serveur (il peut y en avoir plusieurs car vous pouvez ouvrir le même fichier via plusieurs invocations de emacsclient). Les clients du serveur d'un tampon sont stockés dans la variable locale du tampon server-buffer-clients.

Pour savoir quels tampons sont associés à une invocation particulière de emacsclient, trouver le processus pour ce emacsclient et faire: (process-get proc 'buffers) (où proc est le processus de emacsclient particulier - l'un des éléments de la liste qui se trouve dans server-buffer-clients).

C'est tout ce que le conseil fait.

+0

Merci! Comme Jed mentionne, il ne semble y avoir aucune différence quand un nouveau cadre est ouvert, mais le conseil ci-dessus fonctionne quand j'ouvre un nouveau fichier avec emacsclient -t. Intéressant ... Je vais regarder dans cela pour ido-mode et éventuellement ibuffer. Très appréciée! – hatmatrix

+0

L'avez-vous fait fonctionner avec ido? – tatsuhirosatou

3

Il n'y a pas de différence dans emacs 23, tant que emacsserver est en cours d'exécution. La liste de tampons sera la même dans chacun.

+0

Merci - oui, cela semble plutôt correct, mais Emacs semble être conscient du client qui accède à un fichier particulier, comme le souligne Trey ... mais merci pour votre contribution! – hatmatrix

Questions connexes