How do I output a string in the bottom right corner of the terminal?
Asked
Active
Viewed 2,783 times
2 Answers
9
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.
}
That assumes all characters in $string
are one cell wide (and that $string
doesn't contain control characters (like newline, tab...)).
If your string may contain zero-width (like combining characters) or double-width ones, you could use ksh93's printf
's %Ls
format specifier that formats based or character width:
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.
}
That would erase the leading part of the last line though.

Stéphane Chazelas
- 544,893
4
tput cup $(tput lines) $[$(tput cols)-16]
printf "string"
or
tput cup $[$(tput lines)-1] $[$(tput cols)-16]
printf "string"
where 16 is the length that you want to reserve for the string.

Jeff Schaller
- 67,283
- 35
- 116
- 255

Yunus
- 1,684
zsh
andyash
but it did not work. – cuonglm Nov 23 '15 at 16:02zsh -f
, and nothing printed. The same problem withyash
. – cuonglm Nov 23 '15 at 16:19tput cup "$((y))" "$((x))"
, then I got only thew
character at the right corner. – cuonglm Nov 23 '15 at 16:57