Skip to content

Latest commit

 

History

History
276 lines (206 loc) · 7.04 KB

230-87341-000211 光标位置.sy.md

File metadata and controls

276 lines (206 loc) · 7.04 KB
show version enable_checker
step
1.0
true

光标位置

回忆上次内容

  • 上次讲了\n、\r之外的转义序列
    • \a是␇ (bell),
    • \b 退回一格
    • \t 水平制表符
    • \v\f LineFeed
  • 通过16进制数值转义
    • \xhh
    • 把(hh)16进制对应的ascii字符输出
  • 通过8进制数值转义
    • \nnn
    • 把(nnn)8进制对应的ascii字符输出
  • 这次加了3个
    • \\ 输出 \
    • \" 输出 `
    • \' 输出 '
  • 还有哪个转义字符我们一直没研究?🤔

图片描述

  • 这个\e是干什么的?
  • 这个\e是干什么的?
  • 转义之后的的含义竟然还是escape

搜索结果

图片描述

  • \是转义字符,要和后面的字符一起构成转义序列
  • \e是转义序列,转义的含义是Escape
  • 那从这里Escape之后是要去哪里呢?

图片描述

  • 这样可以从当前字符序列Escape出去
  • 后面的内容可能就不是纯文本了
  • 而是控制序列
    • [2;10H控制DEC VT102只在2-10列进行输出
  • 这个标准来自于ANSI escape code

缘起

  • 电传打字机的输出调节
    • 只能通过控制色带来控制打印颜色和深度
  • 早期的终端只能通过调节显示器亮度来进行改变
    • 各个终端的制造商都有一些自己的独特的控制字符
    • 就像各种手机充电接口
    • 只要接受到这些控制字符
    • 终端就可以进行调整
    • 比如在某个横纵坐标位置[x,y]输出字符
  • 但是不同终端控制方式不同
    • 可能造成显示状态异常
    • 远程终端输出结果不可控
    • 需要一个关于控制字符的统一标准
  • 1964年 ISO 646
    • 在欧洲以ECMA-6的形式存在
    • 后来被ANSI(American National Standards Institute)
    • 整合为工业标准
    • 发展为ANSI X3.64
  • 在计算机发展为图形用户界面之后
    • 在各种 terminal软件 中实现

esc键

图片描述

  • Teletype Model 33终端的键盘
    • 1963年推出
    • 数据通信行业中最受欢迎的终端之一
    • 注意shift和ctrl都已经出现
    • Alt Mode出现在第1列
  • 当时还没有esc键

escape 跳出

图片描述

  • 现在键盘都有这个按键
  • 1的左下,Q的右边
  • 可以从当前的纯文字输出里面逃escape出来
  • 进行控制信息的传输

escape

图片描述

  • 现在这个东西叫做esc

键盘的进化

  • 早年间的一体机
  • 有的esc还在1旁边
  • 这是当年最流行的DEC VT102

图片描述

位置的变化

  • 后来放在第一行第一列
  • escape体现重要性
  • 玩一些terminal上面的游戏的时候也可以退出主游戏
  • 进行一些设置、存盘、读档、退出之类的操作
  • 知道什么时候退比较重要

图片描述

标准键盘

  • 这是非常常用的US101标准键盘了

图片描述

行业标准

  • 这个开始有了行业标准
  • 没有电脑也能用键盘练习指法

图片描述

继续进化

  • 后来键盘部分有一定程度软化,有了touchbar

图片描述

智能设备

  • 手机和pad阶段好像不容易找到esc按键了
  • 但这个字符一直都在
  • 而且很硬

图片描述

操作

图片描述

  • \33[nA 光标上移n行
  • \33[nB 光标下移n行
  • \33[nC 光标右移n行
  • \33[nD 光标左移n行
  • \33[y;xH设置光标位置
  • \33[2J 清屏
  • \33[K 清除从光标到行尾的内容
  • \33[s 保存光标位置
  • \33[u 恢复光标位置
  • \33[?25l 隐藏光标
  • \33[?25h 显示光标
  • 我们试试\33[2J

输出字符

print("\33[2J")
  • \33是转义序列
  • \33\033的省略写法
  • \33是8进制数形态
  • 也可以写成16进制形态\x1b
  • J是模式选择
    • 清屏模式
    • 分为四种清屏
      • 0J - 从光标清到屏幕结束
      • 1J - 从光标清到屏幕开头
      • 2J - 整屏幕清
      • 3J - 整屏幕清并选择清空滚动缓存

图片描述

设置光标

print("\33[1;1Hoeasy")
  • H是选择模式
  • 1;1指的是屏幕左上角
    • 整个屏幕80*24
    • 1;1指的是左上角
    • 中间用的是;
    • 设置好了之后输出后面的字符oeasy

图片描述

  • 可以先清屏再输出么?

清屏并设置光标

print("\33[2J")
print("\33[1;1Hoeasy")
print("\33[2J\33[1;1Hoeasy")
print("\33[2J\33[10;10Hoeasy")
  • 这样终端接受到了一串字符串
  • "\33[2J\33[1;1Hoeasy"
    • \33[2J 终端接收到后清屏
    • \33[1;1H终端接收到后设置光标
    • 终端输出oeasy
  • "\33[2J\33[10;10Hoeasy"
    • 先清屏
    • 再在(10,10)坐标输出oeasy
  • 退出游乐园

先输出重定向

图片描述

  • 然后用三引号的方式去原样输出这个图像
  • 尝试自己做一下

输出

  • %s/\$/\\/g
    • 替换所有结尾处的单引号

图片描述

加上移动

图片描述

  • for是一个循环
    • 让i从1到10
    • 每个位置愣一秒
    • str把数字i变成字符串好相加
    • 纵向可以了
  • 横向可以么?

横向移动

图片描述

  • " "*i就是输出i个空格
  • 如果我想让猫说出时间
  • 还能刷新怎么办呢?

时间函数

  • 找到前面的输出时间的py函数
#!/usr/bin/python3
import time
localtime = time.strftime(' %H:%M:%S',time.localtime(time.time()))
print(localtime,end="")
  • 先验证一下
  • 然后尝试整合

整合

图片描述

  • 这样就可以又移动
  • 又刷新时间了

总结

  • 我们了解了一个新的转义模式
  • \33控制字符串
  • 他退出当前输入字符串
  • 进行控制信息的何止
  • 可以清屏
  • 也可以确定光标位置
  • 还能做什么呢?
  • 应该可以设置颜色???🤔

图片描述

  • 我们下次再说!👋