注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

gmd20的个人空间

// 编程和生活

 
 
 

日志

 
 

Linux终端打印字符时光标的控制和字体颜色  

2011-09-01 10:38:31|  分类: linux相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


很多人估计都有这种需求,使用printf打印输出的时候,可以指定输 出在屏幕上的指定位置,这样就可以有“刷屏”的效果了,而不用滚屏。这个东西,使用 ncorses 这个库http://www.gnu.org/s/ncurses/ 应该是可以的了,这个接口作这个应该和你简单啊。不过有人觉得可能有点大材小用了。

其 实终端本身也有支持一些特殊的控制字符组合“ ANSI/VT100 Terminal Control Escape Sequences” 参见http://www.termsys.demon.co.uk/vtansi.htm 这个网站,完整的都到那里去看吧。

摘录一些如下
<ESC> represents the ASCII "escape" character, 0x1B. Bracketed tags represent modifiable decimal parameters; eg. {ROW} would be replaced by a row number.

------------------------------------------



Cursor Control

Cursor Home         <ESC>[{ROW};{COLUMN}H

    Sets the cursor position where subsequent text will begin. If no row/column parameters are provided (ie. <ESC>[H), the cursor will move to the home position, at the upper left of the screen.

Cursor Up        <ESC>[{COUNT}A

    Moves the cursor up by COUNT rows; the default count is 1.

Cursor Down        <ESC>[{COUNT}B

    Moves the cursor down by COUNT rows; the default count is 1.

Cursor Forward        <ESC>[{COUNT}C

    Moves the cursor forward by COUNT columns; the default count is 1.

Cursor Backward        <ESC>[{COUNT}D

    Moves the cursor backward by COUNT columns; the default count is 1.

Force Cursor Position    <ESC>[{ROW};{COLUMN}f

    Identical to Cursor Home.

Save Cursor        <ESC>[s

    Save current cursor position.

Unsave Cursor        <ESC>[u

    Restores cursor position after a Save Cursor.

Save Cursor & Attrs    <ESC>7

    Save current cursor position.

Restore Cursor & Attrs    <ESC>8

    Restores cursor position after a Save Cursor.

-------------------------
Erasing Text

Erase End of Line    <ESC>[K

    Erases from the current cursor position to the end of the current line.

Erase Start of Line    <ESC>[1K

    Erases from the current cursor position to the start of the current line.

Erase Line        <ESC>[2K

    Erases the entire current line.

Erase Down        <ESC>[J

    Erases the screen from the current line down to the bottom of the screen.

Erase Up        <ESC>[1J

    Erases the screen from the current line up to the top of the screen.

Erase Screen        <ESC>[2J

    Erases the screen with the background colour and moves the cursor to home.

-----------------------------------


Set Display Attributes

Set Attribute Mode    <ESC>[{attr1};...;{attrn}m

    Sets multiple display attribute settings. The following lists standard attributes:

    0    Reset all attributes
    1    Bright
    2    Dim
    4    Underscore    
    5    Blink
    7    Reverse
    8    Hidden

        Foreground Colours
    30    Black
    31    Red
    32    Green
    33    Yellow
    34    Blue
    35    Magenta
    36    Cyan
    37    White

        Background Colours
    40    Black
    41    Red
    42    Green
    43    Yellow
    44    Blue
    45    Magenta
    46    Cyan
    47    White

-------------------------------------------------------


其他的还有滚屏 颜色的控制等





所以,简单的程序使用printf输出这个控制字符序列就可以起到控制光标和清除屏幕的作用了。比如下面这样写:



#include<stdio.h>
void main(void) {
    
    printf("dddddddddd1234\n");
    
    printf("%c[%dD",0x1b, 3);         //光标后退3个字符
    printf("%c[%dA",0x1b, 3);         //光标向上移动3行
    printf("11111111111111111111111111111111\n");

    printf("%c[2J",0x1b);       //清除屏幕
    
    printf("%c[32;40m",0x1b);       //设置文字颜色为绿色,背景为黑色
    printf("绿色的字");     
    printf("%c[31;42m",0x1b);      //设置文字颜色为红色,背景为绿色
    printf("红色的字");      

}

  评论这张
 
阅读(1151)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017