【问题标题】:User super key for meta commands in emacsemacs 中元命令的用户超级键
【发布时间】:2013-09-24 00:17:47
【问题描述】:

我正在尝试学习 emacs,并希望将键盘上的超级键用于 emacs 中的任何元命令,因为我使用 dwm 作为我的窗口管理器,并且它广泛使用元键。我看过this page,用它试试

(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 看起来无法正常工作。
  • 当我使用它们时,我尝试使用 M-x 看看它是否有任何影响。当我尝试使用我的超级键时,我只是在缓冲区中插入一个 x。但是当我尝试使用元键时, M-x 仍然有效。所以我不认为它是 Windows 管理器。

标签: emacs key-bindings emacs24


【解决方案1】:

我同意@Tyler

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

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

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

这两个符号(变量)都是必需的,因为如果您只使用 x-super-keysym 'meta,它会启用两个键作为元键。如果你只使用 x-meta-keysym 'super,它会同时禁用两者,de 命令缓冲区将返回 s-x is undefined。

2) 在 config.h 文件中将 meta 的 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 元键,因为您的手指不太舒服,并且可能会导致您对击键响应缓慢。根据您的环境尝试选项 2 或 3。

【讨论】:

    【解决方案2】:

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

    编辑:是终端仿真器在按键到达 emacs 之前吞噬了按键,所以原始命令确实可以工作,只要按键实际到达 emacs。

    【讨论】:

      猜你喜欢
      • 2013-09-30
      • 1970-01-01
      • 2021-11-16
      • 2011-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      相关资源
      最近更新 更多