存在未转换版本时忽略转换命令

Shifted command ignored when unshifted version exists

我有以下绑定:

M-q   => fill-paragraph
M-S-q => unfill-paragraph

但是任一组合键都会产生第一个:fill-paragraph,所以它 似乎 Shift 因此 unfill 被忽略。我设置了 第二个我自己:

(prelude-require-package 'unfill)
(define-key prelude-mode-map "\M-\S-q" nil)  ; don't let prelude dictate it
(global-set-key (kbd "M-S-q") 'unfill-paragraph)

Emacs 有一个回退到未移位序列的行为 当转移的版本不存在时(这看起来不错,但应该 这种情况不会发生)。所以如果我没有 M-S-q 绑定,然后按它应该会导致 fill-paragraph,这 是我不高兴看到的。这表明 Emacs 以某种方式 不知道第二个绑定。但我已经证实它确实如此 通过 C-h f unfill-paragraph 确认知道。调用自 M-x 表明它运作良好。

为什么 Shift 被忽略了?

(这是 Emacs 的 GUI 版本,我的 Shift 键适用于其他 东西。)

Emacs 在处理 shift 时存在一些令人困惑的问题 w.r.t,因为 shift 修饰符有时被视为普通修饰符,但其他时候是特殊大小写以修改基本字符,因此它是大写的。

在这种情况下,我认为您需要 ?\M-Q。相反,?\C-Q?\C-q 相同,因此您需要使用 ?\C-S-q 将某些内容绑定到 C-S-q。

这可能值得 M-x report-emacs-bug