Emacs - истощенный или новый кадр? - PullRequest
9 голосов
/ 09 октября 2009

это довольно рудиментарный вопрос, но в чем практическое отличие открытия нового файла в отдельном фрейме (make-new-frame) от emacs или открытия файла в экземпляре emacsclient? Я вижу, что если вы работаете через терминал, разница очевидна ... но может ли emacsclient дополнительно ограничить список буферов, к которым обращается (buffer-menu) или ido-mode, буферами, открытыми в этом конкретном экземпляре emacsclient?

Ответы [ 2 ]

5 голосов
/ 09 октября 2009

На самом деле нет никакой разницы между этими двумя ситуациями, за исключением того факта, что сервер устанавливает некоторое локальное состояние буфера для включения C-x # (он же server-edit).

Вы можете ограничить M-x list-buffers поведение, как вы спрашиваете, с помощью следующего совета:

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

Теперь, когда вы делаете M-x buffer-menu в буфере, который посещает emacsclient, вы видите только другие буферы, посещенные тем же клиентом (ами). Он работает как обычно, когда буфер не посещается emacsclient.

Я не использую ido, но я думаю, что настройка будет аналогичной (если этот совет не будет работать как есть).

Подробности в том, что при запуске emacsclient открывающиеся буферы связаны с серверным процессом (их может быть больше одного, потому что вы можете открыть один и тот же файл с помощью нескольких вызовов emacsclient). Серверные клиенты буфера хранятся в локальной переменной буфера server-buffer-clients.

Чтобы выяснить, какие буферы связаны с конкретным вызовом emacsclient, найдите процесс для этого emacsclient и выполните: (process-get proc 'buffers) (где proc - это конкретный процесс emacsclient - один из элементов списка найдено в server-buffer-clients).

Вот и весь совет.

3 голосов
/ 09 октября 2009

В emacs 23 нет никакой разницы, пока emacsserver работает. Список буферов будет одинаковым в каждом.

...