如何在按下按键时一次显示一个字母的自定义文本?

如何在按下按键时一次显示一个字母的自定义文本?

在我的 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'"

相关内容