Даже когда emacsclient запускается в терминале, оконная система не является нулевой

Я хочу вызвать некоторые функции, когда я запускаю 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 подключается к серверу и создает новую рамку, но поскольку сервер работает в графической среде, он сообщает, что windows-система «ns», в то время как в терминальной среде она будет равна нулю. Поэтому при запуске emacsclient -t на терминале функции активировать отчетов мыши не выполняются. После запуска emacsclient, если я создаю новую рамку с C-x 5 2 , то функции включения отчетов мыши будут запущены, потому что в этой рамке система окон будет равна нулю.

При смешивании кадров между терминалами и оконными системами значение window-system всегда будет равным значению сервера Emacs.

Есть ли способ, которым я могу запустить Emacs графически и emacsclient в текстовом режиме и запустить функции мыши там? Другими словами, можно ли определить, что создаваемый фрейм окажется в графической или текстовой среде?

Может быть, я должен просто всегда запускать эти функции, когда фрейм создается независимо от значения window-system ?

-121--1596536- Преобразовать массив значений перечисления в комбинацию бит-флаг Как создать комбинацию бит-флаг из массива значений перечисления самым простым и оптимальным способом в C # 2.0. Я на самом деле нашел решение, но я просто не удовлетворен сложностью...

Как создать комбинацию бит-флаг из массива значений перечисления самым простым и оптимальным способом в C # 2,0. Я на самом деле нашел решение, но я просто не удовлетворен сложностью здесь.

enum MyEnum
{
    Apple = 0,
    Apricot = 1,
    Breadfruit = 2,
    Banana = 4
}

private int ConvertToBitFlags(MyEnum[] flags)
{
    string strFlags = string.Empty;
    foreach (MyEnum f in flags)
    {
        strFlags += strFlags == string.Empty ?
            Enum.GetName(typeof(MyEnum), f) :
            "," + Enum.GetName(typeof(MyEnum), f);
    }
    return (int)Enum.Parse(typeof(MyEnum), strFlags);
}
8
задан blins 25 October 2019 в 12:10
поделиться