2009-10-08 10 views
9

to raczej podstawowe pytanie, ale jaka jest praktyczna różnica między otwarciem nowego pliku w oddzielnej ramce (make-new-frame) z emacsa lub otwarciem pliku w instancji emacsclient? Widzę, że jeśli pracujesz przez terminal, różnica jest oczywista ... ale czy emacsclient może dodatkowo ograniczyć listę buforów dostępnych przez (menu-bufora) lub ido-tryb do buforów otwartych w tej konkretnej instancji emacsclient?Emacs - emacsclient lub nowa ramka?

Odpowiedz

5

Nie ma naprawdę żadnej różnicy między tymi dwoma sytuacjami, poza faktem, że serwer ustawia pewien bufor-stan lokalny, aby umożliwić C-x # (aka server-edit).

Można ograniczyć M-x list-buffers zachowanie jak pytasz z następującą radę:

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

Teraz kiedy robisz M-x buffer-menu w buforze odwiedzanym przez emacsclient, widzisz tylko inne bufory odwiedzone przez tego samego klienta (s). Działa normalnie, gdy bufor nie jest odwiedzany przez emacsclient.

Nie używam ido, ale wyobrażam sobie, że dostosowanie byłoby podobne (jeśli ta rada nie działa tak, jak jest).

Szczegóły są takie, że po uruchomieniu emacsclient bufory, które są otwierane, są powiązane z procesem serwera (może to być więcej niż jeden, ponieważ można otworzyć ten sam plik za pomocą wielu wywołań emacsclient). Klienci serwera bufora są zapisani w lokalnej zmiennej buforowej server-buffer-clients.

Aby dowiedzieć się, które bufory są związane z konkretnym wywołaniu emacsclient, znalezienie sposobu tego emacsclient, a nie: (process-get proc 'buffers) (gdzie proc jest zwłaszcza proces emacsclient - jeden z elementów listy znaleźć w server-buffer-clients).

Taka jest cała rada.

+0

Dzięki! Jak wspomina Jed, wydaje się, że nie ma różnicy, kiedy otwierana jest nowa ramka, ale powyższe porady działają, gdy otwieram nowy plik z emacsclient -t. Interesujące ... Zajrzę do tego w trybie ido i ewentualnie ibuffera. Bardzo doceniane! – hatmatrix

+0

Czy pracujesz z ido? – tatsuhirosatou

3

Nie ma żadnej różnicy w emacs 23, o ile działa emacsserver. Lista buforów będzie taka sama w każdej z nich.

+0

Dzięki - tak, wygląda na to, że jest poprawny, ale wydaje się, że część emacs ma świadomość, który klient uzyskuje dostęp do konkretnego pliku, jak zaznacza Trey ... ale dzięki za twój wkład! – hatmatrix

Powiązane problemy