Linenoise: 使 ctrl 左右

创建于 2016-11-24  ·  8评论  ·  资料来源: antirez/linenoise

这些键盘快捷键在快速导航现有线路时非常有用。 有什么理由不执行它们吗?

所有8条评论

A:这不是 POSIX/UNIX 中典型的移动命令。 线噪声是 100% POSIX。

但是,很容易将其添加到您自己的 linenoise 副本中。 许多使用 linenoise 的人出于某种原因对其进行了破解。 这很容易理解和修改。

这是一个比较 Win/Unix/Emacs 上的控制键使用情况的图表: https ://en.wikipedia.org/wiki/Control_key


该怎么办?

在 linenoise.c 的第 41 行,您将找到有关如何控制光标的讨论。

在第 768 行你会发现
静态 int linenoiseEdit(int stdin_fd, int stdout_fd, char *buf, size_t buflen, const char *prompt)

如果您要更改编辑功能,它将在此功能中。

另请记住,必须使用 API 调用打开多行编辑:

linenoiseSetMultiLine(1);

我希望这会有所帮助,感恩节快乐! (不管你身在哪里 :-)

这是指与#64 和#92 相同的想法,还是其他?

我不认为 linenoise 将自己限制为 POSIX 定义的行编辑功能(而且我什至找不到 POSIX 定义的特定转义序列的来源,尽管我发现了很多关于 vi/emacs/readline back-word 和前向词序列)。 您可能会想到 linenoise 依赖于 POSIX 环境这一事实,但这仅意味着它必须远离特定于操作系统的调用。

也许我不清楚 - 我知道 control+left 不对应于控制字符(以 ctrl+a 对应于 \01 的方式,等等)。 许多终端模拟器为此产生了不同的转义序列(如\033[1;5D\033f ),一些行编辑库默认绑定以向前/向后导航一个单词。 至少,我认为这就是这个问题所暗示的。

如果您发现列出了 POSIX 定义(未)定义的行编辑转义序列的内容,或者指出 linenoise 不会实现任何不属于 POSIX 标准的内容,请告诉我,因为我一直找不到它。

编辑:如果您指的是上面链接的表格,尽管这不是指 POSIX,但我想我明白您的意思。 不过,我并不是特别赞成 ctrl+left/right,但我不认为某些顺序是一个坏主意。 此外,这不是键组合或 readline 绑定的完整列表 - 我相信 readline 默认情况下将 esc-b/f (可能还有其他更长的转义序列)绑定到 back/forward-word,这些未在此处列出。

我认为 JelteF 想要的功能涉及扩展输入转义序列 linenoise 句柄(这里,例如通过按箭头键或删除生成的序列),并且您指的是输出转义序列(例如发送到输出以实际移动光标的序列) . 我确实同意处理 termcap 超出了 linenoise 的范围,我很欣赏 linenoise 是用尽可能少的命令实现的这一事实。

也许@JelteF可以澄清此功能请求的确切要求。 我认为这是关于在 linenoiseEdit() 中处理两个额外的序列,但我可能错了。

仅供参考,如果是在按下ctrl-leftctrl-right时向左/向右移动一个单词(分别使用相应的长转义序列\033[5;DC ,我在 OCaml 绑定中有一个补丁: https ://github.com/fxfactorial/ocaml-linenoise/commit/c3d130cd62419ed3e77203bea392b12830c3e593

@c-cube 是对的,这就是我的意思。 很抱歉没有早点回复。

哈哈,才一年半,这在互联网时代什么都不是。 就在 linenoiseEdit() 中。 谢谢@c-cube :+1:

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

krux02 picture krux02  ·  8评论

ozancaglayan picture ozancaglayan  ·  21评论

ghost picture ghost  ·  4评论

denisvm picture denisvm  ·  9评论

fatcerberus picture fatcerberus  ·  5评论