Отправка нажатия клавиш операционной системе в EmacsW32 - PullRequest
0 голосов
/ 31 января 2009

Как вы, вероятно, знаете, если вы пишете текст на нескольких языках и используете 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 ]

1 голос
/ 31 января 2009

Просто чтобы убедиться, что вы хотите, чтобы это произошло: вы меняете язык в ОС. Emacs получает это событие, отправляет нажатие клавиши обратно в ОС и затем не меняет язык.

Для этого вы можете вызвать внешнюю утилиту.

Я не уверен, почему ты хочешь сделать это, хотя.

Если вы изменили язык ОС, то пусть ОС обработает метод ввода. Если вы не хотите использовать метод ввода вашей ОС, то используйте метод переключения-ввода внутри emacs и не беспокойтесь о состоянии ОС.

Я что-то упустил?

0 голосов
/ 31 января 2009

Если вы не хотите использовать метод ввода вашей ОС, то используйте метод переключения-ввода внутри emacs, и не беспокойтесь о состоянии ОС.

Это именно тот результат, который я хочу получить. Сложность в том, что я постоянно переключаюсь на метод ввода с ОС, потому что «нажми Shift для переключения языка» сейчас часть моей памяти.

...