在阅读these questions或EmacsWiki article中关于在Windows中的emacs中将Caps Lock映射到控件时,最佳答案似乎涉及注册表。我的问题是当用户无法修改机器的注册表时,用户可以做什么,因为他们没有管理员权限。有没有办法从emacs中进行映射? This article非常接近,甚至说,“正如人们所提到的,你当然可以将Caps-Lock映射到其他键,例如Control键。”但我无法弄清楚如何表示控制键(使用various references看起来相当全面,但可能不是以Windows为中心),尝试类似
(setq w32-enable-caps-lock nil)
(global-set-key [capslock] '[control])
和
(setq w32-enable-caps-lock nil)
(global-set-key [capslock] 'ctl-x-map)
似乎不起作用。
答案 0 :(得分:9)
我知道这并没有真正回答你的问题,但Trey Jackson基本上解释了这个问题。要单独检测控制键需要Windows上的低级键盘钩子,我认为Emacs不会实现。
一种方式(涉及外部程序,但不需要管理员权限)是使用AutoHotkey。您只需要以下2行脚本:
CapsLock::Ctrl
LCtrl::Capslock
每当emacs打开时你都需要运行这个脚本,但幸运的是Autohotkey是一个相当低调的应用程序(通常只需要几百Kb的内存)。例如,您可以在.emacs中执行此脚本,以便在打开emacs时交换控制键和大写锁定键。
答案 1 :(得分:6)
我认为它不起作用,因为Windows(或X)没有传递[capslock]
或[control]
的实际事件 - 它是一个修饰键,如[shift]
。按修改键不会导致应用程序进行击键,但是如果按下修改器和第二个(非修饰符)键,则会获得击键。
例如[a]
和[A]
是两个不同的键,一个是常规的“a”,另一个是“shift-a”。我相信你可以设置Windows以使“shift-a”实际发送“z”或其他东西。
由于[capslock]
,[control]
,[shift]
,[meta]
都是修饰符键,因此它们不会为应用程序生成关键事件。
简而言之,Emacs没有获得可以重新映射的[control]
键事件,它会获得C-a
个事件。这通常通过[control]
和[a]
键的明显组合来完成。但是,事件可以通过不同的击键生成,例如[F10]
甚至[y]
(令人困惑,是的)。
这就是我理解的方式。当然欢迎澄清。
答案 2 :(得分:1)
在Windows上重新映射CapsLock的最简单方法是下载此CapsLockChanger实用程序,选择要映射到(控件)的键并将其放在Start-> Startup菜单中。
它保留在您的托盘中,完成密钥重新映射的工作,并且不需要乱用注册表。
答案 3 :(得分:0)
您不一定需要管理员权限才能修改注册表 实际上,Windows注册表是一个分段资源,非常类似于文件系统,您可以在注册表中的各个分支和节点上拥有细化权限。 你确定你不能改变注册表的假设是正确的吗? 我认为在Vista上默认情况下是这样,但在之前的Windows上却没有。