我是否可以使用ANSI转义序列实际保存多个光标位置?

4
根据这个来源,以下是关于光标可执行的操作:
- Position the Cursor:
  \033[<L>;<C>H
     Or
  \033[<L>;<C>f
  puts the cursor at line L and column C.
- Move the cursor up N lines:
  \033[<N>A
- Move the cursor down N lines:
  \033[<N>B
- Move the cursor forward N columns:
  \033[<N>C
- Move the cursor backward N columns:
  \033[<N>D

- Clear the screen, move to (0,0):
  \033[2J
- Erase to end of line:
  \033[K

- Save cursor position:
  \033[s
- Restore cursor position:
  \033[u

所以你可以使用\033[s保存光标位置,然后使用\033[u恢复它。但是如果我想保存多个光标位置怎么办?

例如,假设我想保存两个光标位置,然后恢复它们。值会被擦除对吧?所以我的问题是:是否有一种方法,使用ANSI转义序列或者不使用,来保存多个光标位置以便在bash中稍后恢复它们?


你可以使用 "\033[s" 在代码中保存光标位置,但最好考虑使用从所选输出行的偏移量并更新输出而不是使用保存的位置。为什么?如果您的程序在某个地方输出了额外的一行,并且您正在使用 ANSI 转义返回到固定位置,那么您现在将会偏移一行。使用固定行和偏移量,您只需在下一次更新时用格式化数据覆盖输出即可。 - David C. Rankin
1个回答

1

ANSI终端没有记忆光标位置的能力。如果您需要执行任何类似此类的复杂操作,您将不得不自己跟踪光标位置。

这是很多工作,并且很难做到正确。使用ncurses会更好。


其实,如果我做不到也没关系。我只是好奇是否有可能。谢谢! - souki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接