Сохранение большего количества позиций корсора (с tput?) В терминале bash

Я знаю, что 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?

Спасибо заранее.

1
задан 26 October 2013 в 14:49

2 ответа

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
4
ответ дан 24 May 2018 в 16:11

tput упоминается с ?, поэтому рассмотрите коды движения кодов ANSI:

$'\e[s' - сохраняет текущее положение $'\e[u' - восстанавливает предыдущую позицию

Пример :

$ printf "\e[s\e[6CWORLD\e[uHELLO\n"
HELLO WORLD
1
ответ дан 24 May 2018 в 16:11

Другие вопросы по тегам:

Похожие вопросы: