Emacs中用于元命令的用户超级键

10

我正在尝试学习Emacs,并希望在Emacs中使用我的键盘上的超级键作为任何元命令,因为我使用dwm作为我的窗口管理器,它广泛使用元键。我已经阅读了这个页面,并尝试使用它来实现。

(setq x-meta-keysym 'super)
(setq x-super-keysym 'meta)

我无奈地发现,我想在emacs中翻转它们,但没有成功。当我使用C-h v检查变量x-meta-keysym和x-super-keysym时,命令似乎被正确执行了。当我使用Linux工具xev检查超级键时,它确认我按下的键被映射到Super_L。


这对我有效。然而,你的窗口管理器将在Emacs看到它们之前拦截按键。因此,如果你的窗口管理器使用超级键,你会遇到冲突,这可能会使Emacs似乎不能正常工作。 - Tyler
当我使用它们时,我尝试使用M-x并查看其是否有任何影响。当我尝试使用我的超级键时,我只是将x插入缓冲区。但是当我尝试使用元键时,M-x仍然有效。因此,我认为这不是窗口管理器的问题。 - adiviness
原始代码对我来说很有效。使用超级键来代替窗口管理器来操作emacs真是太有趣了。这显示了对emacs的执着 :) - undefined
2个回答

9

我同意@Tyler的观点。

在我的情况下,我使用dwm作为窗口管理器,因此meta(ALT)键用于控制几乎所有其功能。当使用emacs时,meta键与某些键绑定冲突,例如:当我移动单词M-f或Mb时(这就是我来到这个主题的原因;)),所以我找到了三种选择来解决这个问题:

1)更改emacs键绑定并使用超级键作为meta键

(setq  x-meta-keysym 'super
       x-super-keysym 'meta)

两个符号(变量)都是必需的,因为如果您只使用x-super-keysym 'meta,则会将两个键都启用为元键。如果您只使用x-meta-keysym 'super,则会禁用两个键,并且命令缓冲区将返回s-x未定义。

2) 在config.h文件中更改dwm元绑定到超级键。请查看http://dwm.suckless.org/customisation/windows_key

 /* key definitions */
 -#define MODKEY Mod1Mask /* meta (ALT) key */
 +#define MODKEY Mod4Mask /* super (windows or cmd) key */

3) 重写xmodmap键位绑定,将mod1交换为super,将mod4交换为meta(一定要检查xmodmap返回的内容,不要影响其他程序的按键绑定)

最后,我建议不要更改默认的Emacs meta键位,因为这样对手指来说不太舒适,可能会导致您对按键作出缓慢的反应。根据您的环境尝试选项2或3。


5
所以,事实证明上述命令只在emacs未使用终端模式时有效。我一直在尝试在终端中执行它,这就是为什么它没有起作用的原因。我不确定如何在终端中修复它,但我想这已经足够好了。

编辑:事实证明原始命令确实可以工作,只要按键实际上到达emacs之前,终端仿真器会捕捉按键。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接