在EmacsW32中向操作系统发送击键

时间:2009-01-30 22:45:31

标签: windows emacs 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 个答案:

答案 0 :(得分:1)

为了确保,您希望这样:您可以更改操作系统中的语言。 Emacs获取此事件,将按键发送回操作系统,然后取消更改语言。

您可以调用外部实用程序来执行此操作。

但是,我不确定你为什么要这样做。

如果您更改了操作系统的语言,请让操作系统处理输入法。如果你不想使用你的操作系统的输入法,那么在emacs里面做toggle-input-method,不要担心操作系统的状态。

我错过了什么吗?

答案 1 :(得分:0)

  

如果您不想使用操作系统的输入法,那么在emacs中进行切换输入法,不要担心操作系统的状态。

这正是我想要得到的结果。困难在于我发现自己一直在切换操作系统输入法,因为“按Shift键切换语言”是我手指记忆的一部分。