答案1
杂种狗
使用键绑定是不可能的。Ctrl-G在 mutt 中以比宏或键绑定处理更低的级别进行硬编码(参见mutt_getch()
mutt 的源代码,在 mutt 中返回错误的所有用户输入的核心^G
)。
macro editor \e '^G'
也不行。
您可以做的是将终端配置为^G
按下时发送Escape
使用 xterm:
xterm -xrm 'XTerm.VT100.translations: #override <KeyPress> Escape: string(0x7)'
如果您正在使用screen
,您也可以这样做
screen -X bindkey $'\e' stuff $'\a'
在调用 mutt 之前并在之后恢复它(不幸的是,似乎您不能在屏幕中拥有每个屏幕窗口的键绑定)。另外,如果您的电子邮件编辑器是 vi,这也会是一个问题。
尼奥穆特
自发布以来20200313有$abort_key
配置变量可以更改默认值Ctrl-G。
答案2
对我来说,将 escape 也绑定到一起似乎是一个非常糟糕的主意ControlG。我来这里寻找一个杂种解决方案,但由于似乎没有,我会为任何偶然发现这个问题的人提供我正在做的事情的答案。这不是最佳的,但不会影响任何其他程序:
macro editor \e "<enter><shell-escape>xdotool key control+g<enter>"
或者
macro editor \e "<enter><shell-escape>xsendkey Control+g<enter>"
使用 xdotool 或 xsendkey 之类的东西来伪造 control+g 是有效的,并且不会扰乱其他地方的转义。退出行编辑器对我来说有视觉延迟,但索引绑定将立即起作用,并且一旦使用索引绑定,视觉延迟就会消失。第一次输入是必要的,这样 mutt 就不会只输入“....”并将其放入标题或搜索词或其他内容中。
答案3
对于 NeoMutt,自版本 2020-03-13 起,您可以执行以下操作:
set abort_key = "<Esc>"
另外,您最好也将此行放入启动脚本中,例如.bashrc
:
export ESCDELAY=0
原因,引用自这里, 是
请注意,当用作中止键时,您可能还需要将环境变量 ESCDELAY 设置为较低值甚至 0,这将减少 ncurses 等待区分单个按键与终端转义序列开始的时间。默认时间为 1000 毫秒,因此非常引人注目。
感谢 @Stéphane Chazelas 指出了这个abort_key
选项。我认为将其作为单独的详细答案可以更好地为观众服务。
答案4
这个解决方案太糟糕了,以至于作者宁愿编辑 Mutt 的源代码来摆脱 ^G
警告:此解决方案似乎与 OSX、Emacs 和其他使用Ctrl+的应用程序不兼容G
在 Mutt 的第一天之后,我几乎错误地在 Vim 中使用了 ^G...然后我尝试了一些在这里似乎有效的方法,在i3 窗口管理器和xfce 终端。
将此行添加到~/.i3/config
:
bindsym --release Escape exec --no-startup-id xvkbd -xsendevent -text "\[Escape]\[Control]\[g]"
不得不使用,"\[Escape]\[Control]\[g]"
因为这只会"\[Control]\[g]"
让它在 Vim 中停止工作。
如果你没有使用i3,我想你可以使用xbindkeys按下xvkbd -xsendevent -text "\[Escape]\[Control]\[g]"
时运行。Esc
这不是一个漂亮的解决方案...它可能会使您的Esc密钥在某些程序中无法使用,但至少在这里看起来没问题。
编辑:
我现在看到Ctrl+G部分使 Vim 显示文件中的位置。目前还没有什么太戏剧性的事情。
这个链接似乎有更好的解决方案,但是对于乌尔克斯VT: http://www.unixli.com/q/answers-urxvt-map-esc-key-to-key-sequence-83211.html