我想在我的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它不会。有什么变化如此剧烈?
答案 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
。