我正在创建一个zsh脚本,它可以自动完成,我也尝试使用tput和回显预期的输入的其余部分来做内联建议。它在添加字符时工作正常,但在删除字符时会有一个额外的空间。
这是该问题的图像。顶行是添加字符后的图像,您可以看到没有多余的空格。删除字符时,会出现多余的空格。
我认为发生的事情是,删除一个字符后,由于某种原因,行和列不能立即打印到。以下是最小的代码重现。
下面是要重现的最小代码:
function __keypress() {
zle .$WIDGET
__get_cur_pos
tput cup $__fut_row $((__fut_col + 1))
echo "works\033[K"
tput cup $__fut_row $__fut_col
}
function __delete() {
# remove the last character from buffer
BUFFER=${BUFFER%?}
__get_cur_pos
echo "fail\033[K"
tput cup $__fut_row $__fut_col
}
function __get_cur_pos(){
echo -ne "\033[6n"
read -t 1 -s -d 'R' line < /dev/tty
line="${line##*\[}"
__fut_row=$((${line%%;*}-1)) # extract the row number
__fut_col=$((${line##*;}-1)) # extract the column number
unset line
}
zle -N self-insert __keypress
zle -N __del __delete # change the action of delete key to deleting most recent and updating __current_input
bindkey "^?" __del
把代码放在一个文件中,并源代码,在这一点上,脚本将打印“作品”时,添加字符和“失败”时,删除。如果有人知道这里发生了什么事或可能的修复请告诉我。谢谢!
1条答案
按热度按时间bksxznpy1#
下面是我最终得到的代码,它打印在正确的区域,并自定义BUFFER右侧的样式。