Отправка нажатия клавиши в операционную систему в 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)

Чего я не могу найти, так это вызова функции, которая отправит ключ в операционную систему (или по-другому изменит язык системы).


person Alexey Romanov    schedule 30.01.2009    source источник


Ответы (2)


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

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

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

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

Я что-то упускаю?

person jrockway    schedule 31.01.2009

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

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

person Alexey Romanov    schedule 31.01.2009