Я хочу вызывать некоторые функции, когда запускаю emacsclient в эмуляторе терминала. Код, который у меня есть, работает, когда Emacs запускается в текстовом терминале. Когда я запускаю Emacs в графическом режиме и запускаю emacsclient -t
в терминале, функции не запускаются, поэтому я не могу использовать мышь в эмуляторе терминала.
Вот код, о котором идет речь:
(defun my-terminal-config (&optional frame)
"Establish settings for the current terminal."
(message (format "%s" window-system)) ;; "ns" (Mac OS X) when Emacs is started graphically
(message (format "%s" (display-graphic-p))) ;; nil when Emacs is started graphically
(unless (display-graphic-p)
;; enable mouse reporting for terminal emulators
(xterm-mouse-mode 1)
(global-set-key [mouse-4] '(lambda ()
(interactive)
(scroll-down 1)))
(global-set-key [mouse-5] '(lambda ()
(interactive)
(scroll-up 1)))))
(add-hook 'after-make-frame-functions 'my-terminal-config)
Это странная ситуация. Emacsclient подключается к серверу и создает новый фрейм, но поскольку сервер работает в графической среде, он сообщает, что оконная система равна «ns», тогда как в терминальной среде она будет равна нулю. Поэтому, когда я запускаю emacsclient -t
в терминале, функции включения сообщений мыши не запускаются. Если после запуска emacsclient я создам новый фрейм с помощью C-x 5 2
, то функции включения отчетов с помощью мыши будут выполняться, потому что оконная система в этом фрейме будет нулевой.
Похоже, что при смешивании кадров между терминалами и оконными системами значение оконная система
всегда будет равным значению сервера Emacs.
Есть ли способ, которым я могу запускать Emacs в графическом режиме и emacsclient в текстовом режиме и запускать там функции мыши? Другими словами, можно ли определить, что создаваемый фрейм окажется в графической или текстовой среде?
Может быть, мне просто всегда следует запускать эти функции при создании фрейма, независимо от значения window- system
?