杂种狗

杂种狗

默认情况下,在命令提示符下输入信息时mutt,可以使用 清除提示符Ctrlg,如手册:

^G 不适用 中止

我一直在尝试将此功能绑定到Escape.不幸的是,abort没有在可用函数中列出,也没有在手册,或在来源

我尝试在我的.muttrc

绑定编辑器 <esc> 中止

但它会抛出一个错误:

/home/jason/.mutt/muttrc,第 143 行出错:abort:map 中没有这样的函数

我尝试过使用不同的地图,例如 ( generic) 并尝试了其他虚构函数,例如clear,但无济于事。

我将如何绑定Escape以清除提示行?

答案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

相关内容