【问题标题】:serial ctrl+a escape sequence串行 ctrl+a 转义序列
【发布时间】:2014-02-17 21:18:45
【问题描述】:

我正在使用 pyserial 创建一个串行应用程序。我正在寻找 CTRL+ACTRL+E 的 ASCII 或 ANSI 转义序列(转到开头和行尾)。我似乎无法在任何地方找到转义码。有谁知道列出代码的资源? CTRL+ACTRL+E 似乎是非常通用的光标到行首和光标到行尾线路控制键。我必须相信存在转义序列。

任何建议将不胜感激!

【问题讨论】:

  • 'A'-0x40 又名0x01...
  • 你在和什么样的串口设备通信?是什么让您认为它支持 ANSI 转义,或 readline 风格的编辑,或其他什么?或者您是否尝试在将用户输入发送到串行设备或其他设备之前对其进行编辑?

标签: python serial-port escaping pyserial


【解决方案1】:

ASCII 字符和 ANSI 控制代码都没有真正定义一个叫做 CTRL+A 的东西。

然而,ASCII 控制字符 0-31(官方名称从 NUL 到 US)传统上被映射为可打印字符 64-95 的“控制版本”。所以,0 是 ^@,1 是 ^A,2 是 ^B,等等。

ASCIIcontrol character 上的维基百科页面提供了更多信息。

所以,^A 为 1,^E 为 5。


同时:

CTRL+ACTRL+E 似乎是非常通用的光标到行首和光标到行尾控制键。

它们并不是那么普遍。这些是“基本 emacs 控制键”的一部分,许多 Unix 终端仿真器和一些基于 Unix 的 GUI 应用程序(以及诸如 libreadline CLI 编辑库和 Qt 文本小部件之类的东西)按惯例支持。但是,尝试在 DOS 提示符或 Microsoft Word 中按 ^A,它不会转到行首。

而且,仅将 ^A 或 ^E 发送到 ANSI 兼容的终端并不一定会将光标移动到行首或行尾。要正确执行此操作,您需要实际发送相应的 ANSI 控制序列。任何 ANSI 转义码列表,例如 Wikipedia's,都会向您展示可用的代码。

不幸的是, 没有正确的答案来解决你想要做的事情。 ANSI 将整个 80x25(或其他)屏幕视为可访问的,并且不区分其中包含某些内容的字符位置和空白字符位置。因此,您不能移动到“行尾”,除非您的意思是“第 79 列”。

而且,如果您要查找的内容是移动到第 0 列和第 79 列,使用 CHA 命令('\x1b[0G''\x1b[79G')很容易——但并非所有 ANSI 终端都支持;特别是 DOS ANSI.SYS 和任何与之兼容的东西都会忽略它。

【讨论】:

  • 这是正确答案。 CTRL+A 是 \x01,CTRL+E 是 \x05。我从维基百科页面底部的链接中找到了一个相当全面的列表。为方便起见,这里是link。感谢您的帮助!
  • @user3320804:该资源有一个非常奇怪的 ANSI 命令子集。它有点接近 ANSI.SYS、VT100 和 xterm-color 共有的子集……但甚至不完全一样。我猜如果您不使用颜色,并且不使用 ANSI.SYS 中的任何不同功能(例如从第 0 列向左移动),它们是尽可能安全和可移植的功能吗?
猜你喜欢
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
  • 2011-01-01
  • 2014-03-18
相关资源
最近更新 更多