在Windows上映射大写锁定以从Emacs内部进行控制
当阅读thesequestions或EmacsWiki article关于在Windows中的emacs中将Caps Lock映射为控件时,最好的答案似乎涉及注册表。我的问题是用户无法修改机器的注册表,因为他们没有管理员权限可以执行什么操作。有没有办法从emacs内部进行映射? This article来哦,所以关闭,甚至说,“正如人们已经提到的,你当然可以将Caps-Lock映射到其他键,例如控制键。”但我无法弄清楚如何表示的控制键(使用various references看起来很全面,但可能不是以Windows为中心),试图像在Windows上映射大写锁定以从Emacs内部进行控制
(setq w32-enable-caps-lock nil)
(global-set-key [capslock] '[control])
和
(setq w32-enable-caps-lock nil)
(global-set-key [capslock] 'ctl-x-map)
其不要的东西t似乎工作。
我知道这并不能真正回答你的问题,但特雷杰克逊基本上解释了这个问题。单独检测控制键需要Windows上的低级别键盘钩子,我不认为Emacs实现了该键。
单程(涉及外部程序,但不需要管理权限)是使用AutoHotkey。所有你需要的是以下2行脚本:
CapsLock::Ctrl
LCtrl::Capslock
您需要每当Emacs是开放的,但幸运的是AutoHotkey的是相当低调的应用程序来运行该脚本(通常只需要大约几百KB的内存)。例如,您可以在.emacs中执行此脚本,以便在打开emacs时交换控制键和大写锁定键。
我相信它不起作用,因为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]
(令人困惑,是的)。
这就是我的理解。当然欢迎澄清。
是的,这是我得到的感觉,但谢谢你阐述它,比我能有的更好。 – 2009-05-08 17:04:14
在Windows上重新映射CapsLock的最简单方法是下载此CapsLockChanger实用程序,选择一个映射到(控制)的密钥并将其放入您的开始 - >启动菜单。
它保留在您的托盘中,做关键重新映射的工作,并不需要与注册表搞混了。
您不一定需要管理员权限才能修改注册表。
实际上,Windows注册表是一种分段资源,非常像文件系统,您可以在注册表中的各个分支和节点上拥有细化权限。 你确定你的假设,你不能改变注册表,是正确的吗? 我认为这是默认情况下在Vista上,而不是在以前的Windows上。
关键重新映射的常用方法是非常低级的和每台机器(更改到HKLM \ SYSTEM的某处),因此管理员权限是必须的。 – 2009-05-09 19:32:52
做好了我假设的解决方案并找到了另一种方法。我对AutoHotKey进行了非常简短的介绍,并假设它必须要求管理员权限,但它看起来像魅力一样工作。我将编辑该问题并添加一些相关链接。 – 2009-05-08 17:06:39
纠正我,如果我错了,但脚本示例的第二行中的拼写应该是“LCtrl :: CapsLock”而不是“LCtrl :: Cpaslock” – 2010-01-07 00:23:08
当然,你是对的。固定。 – polyglot 2010-01-08 01:13:57