移动光标
转义码可用于定位光标。 这通常用于在屏幕上的不同位置提供时钟或某种其他类型的信息,例如每次绘制提示时的上角。 下面是定位光标的转义码列表:
表 13-4:光标移动转义序列
Escape Code Action
\033[l;cH 将光标移动到行 l 和列 c
\033[nA 向上移动光标 n 生产线
\033[nB 向下移动光标 n 生产线
\033[nC 向前移动光标 n 字符
\033[nD 向后移动光标 n 字符
\033[2J 清屏,将光标移动到左上角(第0行,第0列)
\033[K 从光标位置清除到当前行尾
\033[s 存储当前光标位置
\033[u 调用存储的光标位置
使用上面的代码,我们将构建一个提示,每次显示提示时,它都会在屏幕顶部绘制一个包含时钟(以黄色文本呈现)的红色条。 提示的代码是这个令人生畏的字符串:
PS1="\[\033[s\033[0;0H\033[0;41m\033[K\033[1;33m\t\033[0m\033[u\]
<\u@\h \W>\$ "
PS1="\[\033[s\033[0;0H\033[0;41m\033[K\033[1;33m\t\033[0m\033[u\]
<\u@\h \W>\$ "
让我们来看看字符串的每个部分,看看它做了什么:
移动光标
表 13-5:复杂提示字符串的分解
序列动作
序列动作
\[ 开始一个非打印字符序列。 这样做的目的是让 bash 正确计算可见提示的大小。 如果没有准确的计算,命令行编辑功能将无法正确定位光标。
\033[s 存储光标位置。 需要在屏幕顶部绘制条形和时钟后返回提示位置。 请注意,某些终端仿真器无法识别此代码。
\033[0;0H 将光标移动到左上角,即第 0 行第 0 列。
\033[0;41m 将背景颜色设置为红色。
\033[K 从当前光标位置(左上角)清除到行尾。 由于背景颜色现在是红色,线条被清除为创建我们条形的颜色。 请注意,清除到行尾不会改变光标位置,光标位置仍保留在左上角。
\033[1;33m 将文本颜色设置为黄色。
\t 显示当前时间。 虽然这是一个“打印”元素,但我们仍然将它包含在提示的非打印部分中,因为我们不希望 bash 在计算显示提示的真实大小时包含时钟。
\033[0m 关闭颜色。 这会影响文本和背景。
\033[u 恢复之前保存的光标位置。
\] 结束非打印字符序列。
<\u@\h \W>\$ 提示字符串。