端末の右下隅に文字列を出力するにはどうすればよいですか?
string=whatever
stty size | {
read y x
tput sc # save cursor position
tput cup "$((y - 1))" "$((x - ${#string}))" # position cursor
printf %s "$string"
tput rc # restore cursor.
}
これは、$string
のすべての文字が1つであると想定していますcell幅(そして$string
には制御文字(改行、タブなど)が含まれていません)。
stringにゼロ幅(文字の結合など)または倍幅のものが含まれる場合は、ksh93のprintf
の%Ls
形式指定子を使用して、ベースまたは文字幅をフォーマットできます。
string='whatéver'
# aka string=$'\uFF57\uFF48\uFF41\uFF54\uFF45\u0301\uFF56\uFF45\uFF52'
stty size | {
read y x
tput sc # save cursor position
tput cup "$((y - 1))" 0 # position cursor
printf "%${x}Ls" "$string"
tput rc # restore cursor.
}
しかし、それは最後の行の先頭部分を消去します。
tput cup $(tput lines) $[$(tput cols)-16]
printf "string"
または
tput cup $[$(tput lines)-1] $[$(tput cols)-16]
printf "string"
ここで、16は文字列用に予約する長さです。