bash 在 urxvt 中 - 在读取变量时在已键入的字符上退格

bash in urxvt - backspacing on alrady typed character while reading variable

目的是将光标放在屏幕上的某个位置(屏幕中心附近),输入一些初始文本,并提示用户输入更多文本以保存在变量中,同时让他正常的 readline 行编辑功能。

我最初的尝试是:

  1. 将光标垂直居中echo/printf添加一些空格,
  2. 通过echo/printf,
  3. 再次水平居中光标
  4. 问题read -i "editable pre-text" -e answer.

但是我注意到下面描述的行为,并制作了以下两个示例 lines-code 来证明它。

执行以下脚本时

echo -n "______________"
read -e risp

只要没有输入,Backspace 是无效的(这是我喜欢的一种行为,因为 echoreadread) 期间不能被删除。

但是,键入内容(例如一些文本)然后使用 Backspace 将其删除(完全删除并包括第一个键入的字符)将导致光标跳转一旦 Backspace 删除了第一个键入的字符,就将其添加到终端的第一个冒号。

换句话说,当脚本启动时,Backspace 什么都不做,而 XBackspace 将导致光标跳转到终端的第一列。

这种行为的原因是什么,我该如何避免?

鉴于 的标题,我希望它与现在的标题有关,但我无法理解是否真的如此。

如评论中所述,您应该使用 read-p 选项来打印提示,而不是尝试在 read 命令之前设置它。

-e 选项要求 read 使用 readline 库来处理输入,允许更广泛的行编辑字符。但是,为了实现这些行为,readline 需要能够重绘当前行,如果读取开始时当前行上有任何内容,则这是不可能的。这是不可能的,因为 Unix 没有为应用程序提供任何机制来查看控制台上显示的内容。所以在某些情况下,readline 只会清除该行。使用 -p 选项允许 readline 输出提示,然后它可以知道该行当前是什么样子。