bash 在 urxvt 中 - 在读取变量时在已键入的字符上退格
bash in urxvt - backspacing on alrady typed character while reading variable
目的是将光标放在屏幕上的某个位置(屏幕中心附近),输入一些初始文本,并提示用户输入更多文本以保存在变量中,同时让他正常的 readline
行编辑功能。
我最初的尝试是:
- 将光标垂直居中
echo
/printf
添加一些空格,
- 通过
echo
/printf
, 再次水平居中光标
- 问题
read -i "editable pre-text" -e answer
.
但是我注意到下面描述的行为,并制作了以下两个示例 lines-code 来证明它。
执行以下脚本时
echo -n "______________"
read -e risp
只要没有输入,Backspace 是无效的(这是我喜欢的一种行为,因为 echo
在 read
在 read
) 期间不能被删除。
但是,键入内容(例如一些文本)然后使用 Backspace 将其删除(完全删除并包括第一个键入的字符)将导致光标跳转一旦 Backspace 删除了第一个键入的字符,就将其添加到终端的第一个冒号。
换句话说,当脚本启动时,Backspace 什么都不做,而 XBackspace 将导致光标跳转到终端的第一列。
这种行为的原因是什么,我该如何避免?
鉴于 的标题,我希望它与现在的标题有关,但我无法理解是否真的如此。
如评论中所述,您应该使用 read
的 -p
选项来打印提示,而不是尝试在 read
命令之前设置它。
-e
选项要求 read
使用 readline
库来处理输入,允许更广泛的行编辑字符。但是,为了实现这些行为,readline
需要能够重绘当前行,如果读取开始时当前行上有任何内容,则这是不可能的。这是不可能的,因为 Unix 没有为应用程序提供任何机制来查看控制台上显示的内容。所以在某些情况下,readline
只会清除该行。使用 -p
选项允许 readline
输出提示,然后它可以知道该行当前是什么样子。
目的是将光标放在屏幕上的某个位置(屏幕中心附近),输入一些初始文本,并提示用户输入更多文本以保存在变量中,同时让他正常的 readline
行编辑功能。
我最初的尝试是:
- 将光标垂直居中
echo
/printf
添加一些空格, - 通过
echo
/printf
, 再次水平居中光标
- 问题
read -i "editable pre-text" -e answer
.
但是我注意到下面描述的行为,并制作了以下两个示例 lines-code 来证明它。
执行以下脚本时
echo -n "______________"
read -e risp
只要没有输入,Backspace 是无效的(这是我喜欢的一种行为,因为 echo
在 read
在 read
) 期间不能被删除。
但是,键入内容(例如一些文本)然后使用 Backspace 将其删除(完全删除并包括第一个键入的字符)将导致光标跳转一旦 Backspace 删除了第一个键入的字符,就将其添加到终端的第一个冒号。
换句话说,当脚本启动时,Backspace 什么都不做,而 XBackspace 将导致光标跳转到终端的第一列。
这种行为的原因是什么,我该如何避免?
鉴于
如评论中所述,您应该使用 read
的 -p
选项来打印提示,而不是尝试在 read
命令之前设置它。
-e
选项要求 read
使用 readline
库来处理输入,允许更广泛的行编辑字符。但是,为了实现这些行为,readline
需要能够重绘当前行,如果读取开始时当前行上有任何内容,则这是不可能的。这是不可能的,因为 Unix 没有为应用程序提供任何机制来查看控制台上显示的内容。所以在某些情况下,readline
只会清除该行。使用 -p
选项允许 readline
输出提示,然后它可以知道该行当前是什么样子。