12

在阅读这些 问题EmacsWiki 文章中关于将 Caps Lock 映射到 Windows 中的 emacs 中的控制时,最好的答案似乎涉及注册表。我的问题是当用户因为没有管理员权限而无法修改机器的注册表时可以做什么。有没有办法从emacs中进行映射?这篇文章非常接近,甚至说:“正如人们所提到的,您当然可以将 Caps-Lock 映射到其他键,例如 Control 键。” 但我不知道如何表示控制键(使用各种看起来非常全面但可能不是以 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)

这似乎不起作用。

4

4 回答 4

10

我知道这并不能真正回答你的问题,但 Trey Jackson 基本上解释了这个问题。单独检测控制键需要 Windows 上的低级键盘挂钩,我认为 Emacs 没有实现。

一种方法(涉及外部程序,但不需要管理员权限)是使用AutoHotkey。您只需要以下 2 行脚本:

CapsLock::Ctrl
LCtrl::Capslock

每当打开 emacs 时,您都需要运行此脚本,但幸运的是 Autohotkey 是一个非常低调的应用程序(通常只占用大约数百 Kb 的内存)。例如,您可以在 .emacs 中执行此脚本,以便在打开 emacs 时交换控制键和大写锁定键。

于 2009-05-08T16:36:20.993 回答
7

我相信它不起作用,因为 Windows(或 X)没有为[capslock]or传递实际事件[control]——它是一个修饰键,比如[shift]. 按下修饰键不会导致应用程序获得击键,但如果按下修饰键和第二个(非修饰键)键,则会获得击键。

例如[a]and[A]是两个不同的键,一个是常规的“a”,另一个本质上是“shift-a”。我相信您可以将 Windows 设置为让“shift-a”实际上发送“z”或其他东西。

因为[capslock], [control], [shift],[meta]都是修饰键,所以它们本身不会为应用程序生成键事件。

简而言之,Emacs 没有得到[control]可以重新映射的关键事件,而是得到了一个C-a事件。这通常通过[control][a]键的明显组合来完成。但是,事件可能由不同的击键产生,比如说[F10]甚至[y](令人困惑,是的)。

我是这样理解的。当然欢迎澄清。

于 2009-05-08T16:20:43.120 回答
1

在 Windows 上重新映射 CapsLock 的最简单方法是下载此CapsLockChanger实用程序,选择要映射到的键(控制)并将其放在开始->启动菜单中。

它保留在您的托盘中,完成密钥重新映射的工作,并且不需要弄乱注册表。

于 2009-05-09T16:36:48.637 回答
0

您不一定需要管理员权限才能修改注册表。
事实上,Windows 注册表是一个分段资源,很像文件系统,您可以对注册表中的各个分支和节点拥有细粒度的权限。您确定您无法更改注册表的假设是否正确?我认为默认情况下在 Vista 上是这样,但在以前的 Windows 上不是。

于 2009-05-09T19:26:28.857 回答