emacs-mac-port 不识别"C-/"的问题

emacs-mac-port 不知为何不识别C-/键,不知道大家有没有碰到过?

环境:

  • OS: macOS 10.13
  • Emacs: GNU Emacs 25.3.1 (x86_64-apple-darwin16.7.0, Carbon Version 157 AppKit 1504.83) of 2017-09-17

问题:无法识别C-/。因为我将之绑定为了undo,因此还是挺不方便的。

在网上搜了一圈好像没有人问这个问题… 不知道这里有没有人碰到过。多谢了

什么叫做“不识别”?被系统(或者输入法等其它程序)拦截的意思么(但如果是这样就跟 Emacs 没关系)?

~ $ open -a Emacs --args -Q

C-h c DEL
C-h c C-/
M-x version

DEL (translated from <backspace>) runs the command backward-delete-char-untabify
C-/ runs the command undo
GNU Emacs 25.3.1 (x86_64-apple-darwin16.7.0, Carbon Version 157 AppKit 1504.83) of 2017-09-17

同是 macOS High Sierra,emacs 版本 "GNU Emacs 25.3.2 (x86_64-apple-darwin13.4.0, Carbon Version 157 AppKit 1265.21) of 2017-09-12" 没有这种问题。 DEL 键 (Fn + delete)识别也没问题。

看看你的系统快捷键设置,可能这个按键被拦截了。

你怎么又换回mac了。。

换电脑了啊。毕竟我还要用 Adobe 全家桶。

我尝试理解你的问题:你提到DEL键,又提到C-/。首先,在terminal下,C-?自动识别为DEL键,而不是C-/ (是否用Shift键的区别)。其次,C-/绑定为undo也是undo-tree的默认设置,terminal和gui下运行都为正常。第三,C-?在gui下不会被替换为DEL键,就是C-?

这样的类似terminal和gui下键位识别区别的问题还有:

  • <tab> vs. TABC-i;(按键TAB在terminal和GUI下的区别)
  • C-- 自动识别为C-_;(shift不起作用)
  • C-| 自动识别为C-\;(shift不起作用)

如果你同时terminal和gui的emacs,这些按键绑定注意下就行了。比较麻烦的是TAB(用于company-modeauto-complete触发键),简单处理办法是统统帮成TAB (i.e. (kbd "TAB"),TAB按键和C-i的按键识别一致),不要在GUI下区分使用<tab>TAB了。(注:<tab>(kbd "<tab>") )

不知道是不是你的问题,给别人当个信息参考吧。(以上是OS X下确认的信息,Linux应该一样吧,没注意测试过。)

多谢各位的耐心帮助。之前问题描述的有点不清楚,这里再明确描述一下:

  1. 将外接PC键盘上的DEL键识别为<C-backspace>的问题。这个是由于我有如下设置:
    (setq mac-function-modifier 'control)
    去掉该设置后就没有问题了。这个原因尚不清楚。
  2. 无法接受到C-\键组合。这个问题其实是有时发生有时不发生。原因似乎是搜狗输入法截获了该键组合。但是奇怪的是我之前用的Emacs24就没有这个问题。

总之,希望能对有类似问题的人一点些微参考。

我也碰到这个问题: 在windows上通过PuTTy以ssh方式连到服务器上,在里面用emacs编辑文件,也是C-/识别为C-_,很奇怪。没解决。

我也遇到这个问题了,后面翻代码发现,macport 版本默认 control 是会被 OS 拦截的。 https://bitbucket.org/mituharu/emacs-mac/src/a124e5d0ccb820095be99c78d51abfd36ee22d9b/src/macterm.c#lines-6163

这一点文档里也有说明 https://bitbucket.org/mituharu/emacs-mac/src/a124e5d0ccb820095be99c78d51abfd36ee22d9b/doc/emacs/macport.texi#lines-222

类似还有 command 键,我在配置里 disable 了这2个就正常了。

(setq mac-pass-control-to-system nil)
(setq mac-pass-command-to-system nil)

楼主的问题比较早了,还是回复下,希望对后面遇到同样问题的同学有帮助 :slight_smile: