某些键组合不适用于`key-translation-map`

时间:2015-07-15 15:25:01

标签: emacs elisp

我想在我的emacs中使用Win+arrow来使用windmove移动窗口。由于配置是在各种机器之间共享的,因此我有

部分
(windmove-default-keybindings 'super) ;; ⌘+direction

我在emacs配置的Windows特定部分(最后执行)中有以下内容来实现它:

(when (equal window-system 'w32)
    (setq
       w32-pass-lwindow-to-system nil
       w32-lwindow-modifier 'super
       w32-pass-rwindow-to-system nil
       w32-rwindow-modifier 'super
       w32-pass-apps-to-system nil
       w32-apps-modifier 'hyper
       w32-pass-alt-to-system nil
       w32-scroll-lock-modifier nil))

(dolist (direction-symbol '(left right up down))
  (let* ((direction (symbol-name direction-symbol))
         (windmove-command (intern  (concat  "windmove-"  direction)))
         (keypress-numlock-off (concat  "<C-M-S-kp-"  direction ">"))
         (keypress-numlock-on (concat  "<C-M-kp-" direction ">"))
         (super-direction-keypress (concat  "<s-" direction ">")))
    (define-key key-translation-map (kbd  keypress-numlock-off) (kbd super-direction-keypress) )
    (define-key key-translation-map (kbd  keypress-numlock-on) (kbd super-direction-keypress))))

还运行Autohotkey脚本,将Win+arrow键转换为Emacs的组合键:

#Right::
IfWinActive ahk_class Emacs
    Send, ^!+{NumpadRight}
return

此设置在Emacs 23和Emacs 24中完美运行,直到我升级到Emacs 24.5。它刚刚停止工作。我无法弄清楚原因。

当我致电describe-key Win-Up时,我得到了

  

c为C-M-UP&GT; (翻译自&lt; C-M-kp-up&gt;)运行命令   向上翻译列表,这是

中的交互式编译Lisp函数

这是一个错误的翻译,因为key-translation-map看起来像

 (keymap
 (C-M-kp-down .
              [s-down])
 (C-M-S-kp-down .
                [s-down])
 (C-M-kp-up .
            [s-up])
 (C-M-S-kp-up .
              [s-up])
 (C-M-kp-right .
               [s-right])
 (C-M-S-kp-right .
                 [s-right])
 (C-M-kp-left .
              [s-left])
 (C-M-S-kp-left .
                [s-left])
 (double-down-mouse-1 . mouse--down-1-maybe-follows-link)
 (down-mouse-1 . mouse--down-1-maybe-follows-link)
 (24 keymap
     (56 . iso-transl-ctl-x-8-map)))

如果我使用与Emacs 24.4相同的配置,它按预期工作。如果我启动Emacs 24.5.1它不会。有什么变化如此剧烈?

1 个答案:

答案 0 :(得分:0)

我猜某些东西已经从版本24.4更改为24.5它已停止工作。但是,在阅读http://www.gnu.org/software/emacs/manual/html_node/elisp/Translation-Keymaps.html后,  有效的解决方案是使用input-decode-map而不是key-translation-map