在我的 GUI 中,我希望每个键盘键(至少是字母、数字和符号)在按下时都会显示自定义文本的下一个字母,而不是显示键入的键。
例如,如果我将文本设置为:
Bash 是一个兼容 sh 的命令语言解释器
我输入:
29vVXKJmTQ3JXJ3jvUNHGRmC4A4ncK
我想看到出现:
Bash 是兼容 sh 的逗号
(并且下一个按下的键,无论是哪个键,都应显示“n”。)
我可以使用哪种策略在任何键入的键和自定义文本之间进行映射?
答案1
分享并享受:
#!/bin/bash
TYPEDSTRING=""
COVERSTRING="hello world"
POS=0
while IFS= read -r -n 1 -s X
do
if [ "$X" == "" ]
then
break
fi
if [ "$X" == $'\x7F' ]
then
echo -n -e '\b \b'
if [ "$POS" != "0" ]
then
POS=$(( (POS-1) ))
TYPEDSTRING="${TYPEDSTRING:0:POS}"
fi
else
echo -n "${COVERSTRING:POS:1}"
TYPEDSTRING="${TYPEDSTRING}$X"
POS=$(( (POS+1) ))
fi
done
echo
echo "'$TYPEDSTRING'"