zoukankan      html  css  js  c++  java
  • 终端下不换行刷新当前行

    终端下耗时较长的程序运行过程中输出中间状态时,有时信息太多,希望一些次要的信息能被覆盖掉,整体显得干净一些。

    以往我用" "字符,控制输出的光标回到行首,再次输出覆盖上一行的信息,只要输出不换行,且下次输出的行长度不短于上一次,看起啦就是最后一行不断地在刷新。

    但是如果下一次的输出长度不确定,甚至因接口限制而必须换行时,这种方式就不行了。

    玩过BBS的都知道,ANSI定义了一套终端控制转义字符,可以更精细地控制屏幕输出,比如颜色,光标位置等。查阅ANSI转义代码表

    CSI n K   EL – Erase in Line,当n==2时,清除当前行。

    CSI n F    CPL – Cursor Previous Line,光标上移一行。

    CSI为ESC字符,也就是八进制的33或者x1E字符,再跟一个左大括号。

    所以,如果能够不换行,只需要输出 33[2K字符,就能实现清除当前行并光标回到行首。

    如果字符串输出时,输出接口会自动加上一个换行的话,那就用CSI F回到上一行即可。

    最终,我用这种方式实现了,在Blade中,编译源代码的状态信息自动刷新,削减了3/4的滚屏。

  • 相关阅读:
    10.16(day54)
    10.17(day55)
    10.15(day53)
    10.14(day52)
    10.12(day51)
    10.11(day50)form表单,css的引入,css选择器,css修改字体属性
    10.10(day49)初识前端,html基础
    9.25(day44)
    9.24(day43)
    9.23(day42)数据库的配置,数据库表的引擎,数据类型,约束条件
  • 原文地址:https://www.cnblogs.com/chen3feng/p/4254694.html
Copyright © 2011-2022 走看看