На самом деле нет никакой разницы между этими двумя ситуациями, за исключением того факта, что сервер устанавливает некоторое локальное состояние буфера для включения 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
).
Вот и весь совет.