!!! linux vt码
? vt ? ? C语言 ?    2017-09-02 01:19:47    309    0    0
simon88   ? vt ? ? C语言 ?

使用vt码,可以在终端上显示颜色,闪烁,背景色等特效。下面罗列一些常用的vt码,欢迎大家补充。

 

一、锁\开键盘代码

代码定义:

锁键盘:ESC[2h

开键盘:ESC[2l

应用:

1.直接在键盘上顺序敲入Esc+[+2+h四键,键盘即被锁住。

2.在C语言程序显示字符串中包含锁代码:printf(″%c[2h字串″,’\033’)

3.在shell程序中用echo命令:echo″^[[2h字串″.注Esc键在vi编辑器中输入方法为:Ctrl+v,然后按一下Esc键,在屏幕上显示^[示已输入。

同样显示开锁代码则键盘被解锁。

 

二、删除字符代码

代码定义:

ESC[nX:清除光标右边n个字符,光标不动。

ESC[2K:清除整行,光标不动。

ESC[J或ESC[OJ:清除光标右下屏所有字符,光标不动。

ESC[1J:清除光标左上屏所有字符,光标不动。

ESC[2J或ESCc:清屏,光标移到左上角。

ESC[nM:删除光标之下n行,剩下行往上移,光标不动。

ESC[nP:删除光标右边n个字符,剩下部分左移,光标不动。

在vi 编辑器中,ESC 键的输入方法为,Ctrl + v + ESC键

应用:

一般用于自己开发的编辑器中或涉及行编辑的应用程序中。

 

三、插入字符代码

代码定义:

ESC[n@:在当前光标处插入n个字符。

ESC[nL:在当前光标下插入n行。

应用:

一般用于自己开发的编辑器中或涉及行编辑的应用程序中。

 

四、移动光标

代码定义:

ESC[nA:光标上移n行。

ESC[nB:光标下移n行。

ESC[nC:光标右移n个字符。

ESC[nD:光标左移n个字符。

ESC[n;mH :光标定位到第n行m列(类似代码ESC[n;mf)。

 

五、定义字符显示属性代码

代码定义:

ESC[p;p;p;……m 其中属性值p可以是一个或多个,具体定义如下:

p 含义

0 清除所有属性

1 高亮度显示

4 下划线(如果硬件支持的话)

5 闪烁(如果硬件支持的话)

25 无闪烁

7 反场(前背景交换)

27 无反场

8 隐藏(不显示)

10 选择基本字体

11 选择第一替代字体;让ASCII值小于32的字符显示时直接取自ROM芯片内

12 选择第二替代字体;在作为ROM字符显示之前先压缩扩展高位ASCII码值

30 前景黑色

31 前景红色

32 前景绿色

33 前景褐色

34 前景蓝色

35 前景紫色

36 前景蓝绿色

37 前景白色

38 开启下划线标志;白色前景用白色下划线

39 关闭下划线标志

40 背景黑色

41 背景红色

42 背景绿色

43 背景褐色

44 背景蓝色

45 背景紫色

46 背景蓝绿色

47 背景白色

 

六、其它代码

代码定义:

ESC7:保存当前光标位置参数及字符属性。

ESC8:恢复保存的光标位置参数及字符属性。

\n :插入换行符

\t :插入一个Tab键。

\r :插入回车符。

^G :插入响铃符(pc嗽叭鸣叫一次),在vi中按Ctrl+g即可输入。

\c :用于shell程序中,不换行。

 

在练习使用vt码,所以用shell 写了一小段进制转换的脚本。

shell脚本可以实现各个进制之间的转换功能,主要是利用bc

echo $[进制#值] #计算其他进制转换成十进制

echo "obase=进制;值" | bc #十进制转换成其他进制

我把我当脚本共享出来,希望大家能够提出改进意见。而且,觉得界面太繁琐,不够友好。

通过vt码,可以实现在终端上不需要重复的滚屏的效果。(tput 也可以做到这个,好像 …)

#################################################
# File name: BHD_Converter.sh
# Author: 
# mail: 
# Create Time: 
# Copyright 
#################################################
#!/bin/bash
BLANKS=""
function toDec()
{
    echo -n "$BLANKS $BLANKS dec number: "
    echo $[$1#$2]
}
function DecTo()
{
    declare -A sys_arr
    sys_arr=([2]='bin' [8]='oct' [10]='dec' [16]='hex')
    echo -n "$BLANKS $BLANKS${sys_arr[$1]} number: "
    echo "obase=$1;$2" | bc
}
#convert $1 from $2 to $3
function _to_()
{
#func_arr[2]: means covert from binary to decimal
    declare -A func_arr
    func_arr=([2]="2#" [8]="8#" [10]="10#" [16]="16#")
    num=$[${func_arr[$2]}$1]
    DecTo $3 $num
}
while true 
do
echo "$BLANKS1. to dec"
echo "$BLANKS2. from dec to  "
echo "$BLANKS3. convert to each other"
echo -n "input choice (quit to exit): "
read choice
if [[ $choice == "quit" ]] || [[ $choice == "q" ]]
then
break
fi
case $choice in
 ​

1)

# to dec
echo
echo
echo "======= $BLANKS convert to dec: ======="
echo -n "$BLANKS input value: "
read bin_num
echo -n "$BLANKS $BLANKS $BLANKS  from: "
read sys_from
toDec $sys_from $bin_num
echo
echo
;;​

2)

#from decimal to
echo
echo
echo "======= $BLANKS from dec to: ======="
echo -n "$BLANKS input dec: "
read dec_num
echo -n "$BLANKS $BLANKS $BLANKS $BLANKS to: "
read sys_to
DecTo $sys_to $dec_num
echo
echo
;;​

3)

#convert to each other
echo
echo
echo "======= $BLANKS convert to each other: ======="
echo -n "  $BLANKS input value: "
read bin_num
echo -n "$BLANKS $BLANKS $BLANKSfrom: "
read sys_from
echo -n "$BLANKS $BLANKS $BLANKS $BLANKS to: "
read sys_to
_to_ $bin_num $sys_from $sys_to
;;
esac
done
clear​

代码是从vi编辑器中拿出的,在输出语句(echo)中使用到vt码时,需要在前面加上ESC(这里没有显示出来),可以查看上面给出的vt码列表,否则不能正常显示。

上一篇: 5.顺序表和链表的比较

下一篇: c语言0,'\0',EOF,NULL的区别

309 人读过
0 条评论