5

How do I output a string in the bottom right corner of the terminal?

2 Answers 2

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.

9
  • I try the first one in zsh and yash but it did not work. Commented Nov 23, 2015 at 16:02
  • @cuonglm, did you try it at the prompt of an interactive shell and the comments caused problems? Also note that zsh and yash erase the region below their prompt. Commented Nov 23, 2015 at 16:14
  • @StéphaneChazelas: I removed all the comments, start with zsh -f, and nothing printed. The same problem with yash. Commented Nov 23, 2015 at 16:19
  • @cuonglm, nothing printed, or printed but then removed by your interactive shell's prompt doing a clear to end of screen (as yash and zsh do)? Commented Nov 23, 2015 at 16:25
  • @StéphaneChazelas: I'm not sure. If I use tput cup "$((y))" "$((x))", then I got only the w character at the right corner. Commented Nov 23, 2015 at 16:57
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.

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.