Я знаю, что tput sc сохраняет текущую позицию курсора, а tput rc восстанавливает его точно там, где был вызван tput sc. Проблема в том, что каждый раз, когда вызывается tput sc, он перезаписывает предыдущую сохраненную позицию.
Есть ли способ сохранить больше позиций, например. tput sc pos1 и tput sc pos2, которые можно восстановить, скажем, tput rc pos1 и tput rc pos2 соответственно? (Решение не нужно использовать tput, я упомянул об этом, потому что это единственная команда, которую я знаю, которая обрабатывает позицию курсора)
Если нет, существует ли способ, по крайней мере, сохранить позицию курсора локально в функцию, так что если функция использует tput sc, а затем вызывает другую функцию, которая снова запускается tput sc, каждая функция восстанавливает свою собственную сохраненную позицию курсора при вызове tput rc?
Спасибо заранее.
tput работает через управляющие последовательности терминала, перечисленные здесь: http://sydney.edu.au/engineering/it/~tapted/ansi.html Существует последовательность для извлечения текущей позиции (Позиция курсора - [ f4]) и выглядит как нет в tput. Чтобы извлечь его, используйте:
stty -echo; echo -n $'\e[6n'; read -d R x; stty echo; echo ${x#??}
30;1
Теперь вы можете извлечь позицию строки, сохраненную в $x, в другую переменную и переместить курсор, используя tput cup позже:
$ echo $my_saved_pos
12
$ tput cup $my_saved_pos 0
tput упоминается с ?, поэтому рассмотрите коды движения кодов ANSI:
$'\e[s' - сохраняет текущее положение $'\e[u' - восстанавливает предыдущую позициюПример :
$ printf "\e[s\e[6CWORLD\e[uHELLO\n"
HELLO WORLD