Emacs - emacsclient или новый кадр?

Спасибо всем. Я знал, что что-то не так, когда тратил столько усилий на реализацию простого всплывающего окна.

Сначала я отклонил эту мысль, потому что было странно прибегать к координатам x и y, чтобы найти искомый узел, но я думаю, что это способ сделать это.

    // add MouseListener to tree
    MouseAdapter ma = new MouseAdapter() {
        private void myPopupEvent(MouseEvent e) {
            int x = e.getX();
            int y = e.getY();
            JTree tree = (JTree)e.getSource();
            TreePath path = tree.getPathForLocation(x, y);
            if (path == null)
                return; 

            tree.setSelectionPath(path);

            My_Obj obj = (My_Obj)path.getLastPathComponent();

            String label = "popup: " + obj.getTreeLabel();
            JPopupMenu popup = new JPopupMenu();
            popup.add(new JMenuItem(label));
            popup.show(tree, x, y);
        }
        public void mousePressed(MouseEvent e) {
            if (e.isPopupTrigger()) myPopupEvent(e);
        }
        public void mouseReleased(MouseEvent e) {
            if (e.isPopupTrigger()) myPopupEvent(e);
        }
    };

    (...)

    JTree tree = new JTree();
    tree.addMouseListener(ma);
9
задан Luke Girvin 14 February 2012 в 13:57
поделиться

2 ответа

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

Вы можете ограничить поведение Mx 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))))

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

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

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

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

Это все, что дает совет.

клиенты сервера хранятся в локальной переменной буфера server-buffer-clients .

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

Это все, что дает совет.

s серверных клиентов хранятся в локальной переменной буфера server-buffer-clients .

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

Это все, что дает совет.

buffers) (где proc - это конкретный процесс emacsclient - один из элементов списка в server-buffer-clients ).

Это все, что дает совет.

buffers) (где proc - это конкретный процесс emacsclient - один из элементов списка в server-buffer-clients ).

Это все, что дает совет.

5
ответ дан 4 December 2019 в 22:28
поделиться

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

3
ответ дан 4 December 2019 в 22:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: