【问题标题】:Redraw screen in terminal在终端重绘屏幕
【发布时间】:2010-09-09 19:55:57
【问题描述】:

一些程序如何编辑终端上显示的内容(随机选择一个例子,程序“sl”)?我在考虑这里的 Linux 终端,它也可能发生在其他操作系统中,我不知道。我一直认为,一旦显示了一些文本,它就会留在那里。如何在不重绘整个屏幕的情况下更改它?

【问题讨论】:

    标签: linux terminal


    【解决方案1】:

    有些字符可以发送到终端,使光标向后移动。然后可以覆盖文本。

    有一个列表here。注意“移动光标的东西”行。

    【讨论】:

    • 现在我明白为什么在catless 中查看二进制文件会破坏我的终端……它总是会更改字符集,我不得不重新启动,哈哈。
    【解决方案2】:

    如果您使用回车符 ('\r') 而不是换行符 ('\n') 终止发送到终端的行,它会将光标移动到当前行的开头,从而允许程序在之前打印的内容之上打印更多文本。我偶尔会用它来显示长任务的进度消息。

    如果您需要进行更多终端编辑,请使用ncurses 或其变体。

    【讨论】:

      【解决方案3】:

      为了建立在@Corporal Touchy 的回答之上,有一些库可以为您处理其中的一些功能,例如curses/ncurses

      【讨论】:

        【解决方案4】:

        试试这个 shellscript

        #!/bin/bash
        i=1
        while [ true ]
            do
                    echo -e -n "\r $i"
                    i=$((i+1))
            done
        

        -n 选项可防止换行...而 \r 执行回车...您一次又一次地写入同一行 - 没有滚动或其他任何内容

        【讨论】:

          【解决方案5】:

          下士 Touchy 已经回答了这是如何在最低级别完成的。为了更容易开发,curses library 提供了比简单地向终端发送字符更高级别的控制。

          【讨论】:

            【解决方案6】:

            许多应用程序都使用curses 库,或与之绑定的某种语言。

            对于单行重写,例如更新进度信息,特殊字符“carriage return”,通常由转义序列“\r”指定,可以将光标返回到当前行的开头允许后续输出覆盖之前写入的内容。

            【讨论】:

              【解决方案7】:

              NCurses 是一个跨平台库,可让您在智能终端上绘制用户界面。

              【讨论】:

                【解决方案8】:

                我同意 danio,ncurses 是要走的路。这是一个很好的教程:

                http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/

                【讨论】:

                  【解决方案9】:

                  根据您发送控制序列的终端。常见的序列例如 esc[;H 将光标发送到特定位置(例如在 Ansi、Xterm、Linux、VT100 上)。但是,这将根据用户的类型或终端而有所不同...curses(与 terminfo 文件一起)将为您包装该信息。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2012-04-23
                    • 1970-01-01
                    • 1970-01-01
                    • 2010-10-11
                    • 2015-11-09
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多