Emacsclient не реагирует на щелчки мыши

Когда я запускаю emacsclient, он не реагирует на щелчки мыши. Мой основной процесс Emacs запускается в терминале и правильно реагирует на щелчки мыши, потому что в моем конфигурационном файле Emacs есть следующий код:

(xterm-mouse-mode 1)

Почему emacsclient не реагирует на щелчки мыши? Есть ли способ заставить это сделать?


person hekevintran    schedule 24.06.2011    source источник


Ответы (1)


Вероятно, это связано с тем, что некоторые настройки в Emacs специфичны для терминала, и манипулирование такими настройками в вашем файле инициализации повлияет только на терминал, который был активен во время оценки файла инициализации.

Следующие вопросы и ответы посвящены почти той же проблеме и подробно описаны:

Выполнить команду в новом кадре с помощью daemon/ клиент в Emacs

Для вашей проблемы, я думаю, это должно помочь:

(defun my-terminal-config (&optional frame)
  "Establish settings for the current terminal."
  (if (not frame) ;; The initial call.
      (xterm-mouse-mode 1)
    ;; Otherwise called via after-make-frame-functions.
    (if xterm-mouse-mode
        ;; Re-initialise the mode in case of a new terminal.
        (xterm-mouse-mode 1))))
;; Evaluate both now (for non-daemon emacs) and upon frame creation
;; (for new terminals via emacsclient).
(my-terminal-config)
(add-hook 'after-make-frame-functions 'my-terminal-config)
person phils    schedule 23.07.2011
comment
Отлично! На самом деле у меня была эта проблема только в сеансах GNU Screen, но это решает ее. - person hekevintran; 24.07.2011
comment
Рад слышать. Я только что понял, что, поскольку xterm-mouse-mode является глобальным второстепенным режимом, мой код был испорчен тем, что если вы намеренно отключите этот режим, а затем создадите новый кадр, он снова включится. Я отредактировал код соответствующим образом. Я думаю, что этот режим достаточно умен, чтобы не нуждаться в проверке window-system, которую я изначально включил (и которой в любом случае было недостаточно для идентификации xterm). - person phils; 24.07.2011
comment
Просто хотел упомянуть, что это может вызвать ошибку # 28800 с rxvt. - person Andrea Richiardi; 13.03.2018
comment
@AndreaRichardi, что ты имеешь в виду? Используете xterm-mouse-mode? Используете его в after-make-frame-functions? Что-то другое? - person phils; 13.03.2018
comment
Извините за задержку, но в основном звонок в after-make-frame-functions работает хорошо. Вызовы (my-terminal-config), вероятно, вызывают ошибку. Комментирование решает. Также обратите внимание, что это только ошибка emacsclient -nw. - person Andrea Richiardi; 03.04.2018
comment
Кто-нибудь наткнется на это: я почти уверен, что когда вы используете этот хук, а затем закрываете фрейм и возвращаетесь к терминалу, действия мыши начинают печатать escape-последовательности вместо того, чтобы работать нормально. Супер раздражающий побочный эффект, я постараюсь посмотреть, смогу ли я обнаружить закрытие кадров и восстановить нормальное поведение мыши. - person rien333; 05.06.2019
comment
@ rien333 Предполагая, что вы можете воспроизвести проблему из emacs -Q, я бы M-x report-emacs-bug об этом. - person phils; 05.06.2019
comment
Хм, так что я бы запустил emacs -Q (точнее, emacs-демон без файла конфигурации), затем добавил этот хук вручную, а затем посмотрел, сохраняется ли проблема? - person rien333; 05.06.2019
comment
Да, в самом деле. Вы можете использовать emacs --daemon -Q — эти аргументы работают вместе. Если выяснится, что проблема не возникает при этих условиях, вы можете начать рекурсивно разбивать ваш файл инициализации пополам, чтобы выяснить, какие еще факторы влияют. - person phils; 05.06.2019
comment
Хм, хорошо, он нашел способ исправить это, отправив escape-последовательность, который сбрасывает поведение мыши xterm обратно в нормальное состояние. Поэтому, если вы сделаете (send-string-to-terminal "\033[?1000l") до того, как emacs закроет фрейм, проблема исчезнет. - person rien333; 05.06.2019