TUI的Emacs里,使用Org的Export Dispatcher时,`Ctrl`相关快捷键提示`Invalid Key`。

大佬们有没有遇到类似问题的?

最新的macOS和Emacs(Doomemacs + evil),长期以来在终端使用Emacs时都会出现这个问题(但系统自带Terminal.app可以正确识别快捷键)。

正常比如点击C-b是不导出标题,C-s是导出当前子树,但在TUI里这一系列的快捷键都不好使。

换过iTerm2、Kitty、Ghostty,都没能解决问题,或者短期内问题解决但过了一阵子又出现了。

说得太模糊了

呃,TUI是指终端里的Emacs,Emacs自带一个函数 org-export-dispatch ,默认绑定到C-c C-e,这个函数会打开一个分层菜单,这个菜单里包含一组导出相关的选项,通过输入字符选择需要导出的格式,同时有一组开关,用来切换Body onlyExport scope等,这组开关的切换是绑定到C-bC-s这样的快捷键的,如果遇到不认识的输入,Emacs会输出一个Invalid Key的提示。在GUI(即图形界面)的Emacs里,Ctrl开头的快捷键是好使的,但很多终端里就不行,macOS自带的Terminal.app可以正确识别,但iTerm2、Kitty和Ghostty我自己测试都不行。

可以检查下自己各个终端的 TERM 环境变量是多少

这个有关系吗?

  • Terminal.app: ansi
  • iTerm2.app: xterm-256color
  • Kitty.app: xterm-kitty
  • Ghostty.app: xterm-ghostty

我自己修改了下Ghostty的TERM,export TERM=ansi ,除了颜色以外并没有改变什么。

俺上次出现类似的问题是因为 tmux 中的 TERM 变量有问题,不过看你列出的结果应该都是设置正常了的,有点摸不到头脑了…

有试过在各个终端通过 cat 指令以及在 emacs 通过 describe-key 函数对比输入是否一样吗?(比如用 C-1 这种比较吊柜的键试试)

1 个赞

在我这里在 org 文件里按 C-c C-e 能够正常的弹出 export 窗口 (ghostty, kitty) 然后再按 C-b C-s 也能够正常的 toggle 选项。我也使用 evil。

建议可以排查一下是否是 doomemacs 配置出了问题。可以从 emacs -Q 开始排查。

我有一个用于 debug 的 minimal 配置,仅设置了极简的配置,调整了一些不调整没办法用的配置。使用方式如下 emacs -Q -nw -l minimal-init.el.

1 个赞

这个问题只有在Export Dispatcher里才出现,通过describe-key在GUI和TUI里输入不同快捷键的结果都是一样的。

感谢老哥,基本可以确认是doomemacs的配置出了问题。

感谢@milan-glacier 指导,目前定位到是doomemacs的:osx tty这个模块的问题,把这个模块去掉就正常了。

这个模块的主要功能是让终端里的Emacs可以和系统剪贴板通信,目前我还在找替代方案。