Отправка нажатия клавиши операционной системе в EmacsW32
Как вы, вероятно, знаете, если вы пишете текст на нескольких языках и используете Emacs, Emacs имеет собственную систему ввода, независимую от Windows (или других операционных систем). Методы ввода могут быть переключены с toggle-input-method
команда. Когда язык Windows меняется, Emacs получает <language-change>
нажатие клавиши. Я хотел бы тогда связать <language-change>
в toggle-input-method
, К сожалению, если я просто
(global-set-key (kbd "<language-change>") 'toggle-input-method)
и язык Windows, и метод ввода будут переключаться. Так что мне нужно что-то вроде
(defvar safe-language-change-flag nil)
(defun safe-language-change ()
(interactive)
(setq safe-language-change-flag (not safe-language-change-flag))
(when safe-language-change-flag
(toggle-input-method)
(send-key (kbd "<language-change>"))))
(global-set-key (kbd "<language-change>") 'safe-language-change)
То, что я не могу найти, это вызов функции, который отправил бы ключ операционной системе (или изменил язык системы другим способом).
2 ответа
Просто чтобы убедиться, что вы хотите, чтобы это произошло: вы меняете язык в ОС. Emacs получает это событие, отправляет нажатие клавиши обратно в ОС и затем не меняет язык.
Для этого вы можете вызвать внешнюю утилиту.
Я не уверен, почему вы хотите сделать это, хотя.
Если вы изменили язык ОС, то пусть ОС обработает метод ввода. Если вы не хотите использовать метод ввода вашей ОС, то используйте метод переключения-ввода внутри emacs, и не беспокойтесь о состоянии ОС.
Я что-то пропустил?
Если вы не хотите использовать метод ввода вашей ОС, то используйте метод переключения-ввода внутри emacs, и не беспокойтесь о состоянии ОС.
Это именно тот результат, который я хочу получить. Сложность в том, что я вместо этого постоянно переключаю метод ввода ОС, потому что "нажмите Shift для переключения языка" - это часть моей памяти.