2009-10-08 3 views
9

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

ответ

5

Разница между этими двумя ситуациями не отличается, кроме того, что сервер устанавливает некоторое буферное состояние, чтобы включить C-x # (aka 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, вы видите только другие буфера посещаемых тот же клиент (s). Он работает нормально, когда буфер не посещается emacsclient.

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

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

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

Это все советы.

+0

Спасибо! Как упоминает Джед, нет никакой разницы при открытии нового фрейма, но приведенный выше совет работает, когда я открываю новый файл с emacsclient -t. Интересно ... Я посмотрю на это для ido-mode и, возможно, ibuffer. Очень признателен! – hatmatrix

+0

Помогли ли вы работать с ido? – tatsuhirosatou

3

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

+0

Спасибо - да, похоже, оно в основном правильное, но, похоже, некоторые члены emacs осознают, что клиент обращается к определенному файлу, как указывает Трей ... но спасибо за ваш вклад! – hatmatrix

Смежные вопросы