如何获取CTRL + B,CTRL + L,ALT + K等的unicode字符?

时间:2014-01-02 15:16:03

标签: linux unix terminal

我正在编写一个与linux中的Nano接口的应用程序。 Nano需要接收控制序列以保存/退出/并使用文件(^G ^R ^O ^Y ^K等...)

我通过盲目的机会找出了^X = U+0018的unicode。但是,由于我希望我的应用程序完整,我希望能够为ctrl / alt / shift +任何其他键的组合提供完整的unicode字符列表。

我尝试通过连接netcat并使用netcat按下(例如)CTRL + B并查看另一侧显示的内容来实现此目的。这适用于其中一些,而不是所有,因为终端在发送之前“解释”它。

我现在正在提供赏金,我想要的是

  • A)获取所有转义码的方法,或
  • B)一份综合清单,其中包括我上面提到的那些。

3 个答案:

答案 0 :(得分:1)

您还没有在问题中包含太多代码,因此我不确切知道您是如何完成任务的。使用Python处理子进程的最佳方法是使用subprocess模块。如果您可以提供更多代码详细信息,例如如何处理子进程并对其进行绑定,我们可能会更有帮助。

话虽如此,Linux支持向任何进程发送信号。这是通过kill系统调用完成的。 Python还在os.kill中包装了这个系统调用。您只需将目标的pid和信号编号作为参数传递。如果您正在使用子流程,Popen.send_signal应该是要使用的方法。

要恢复它,您需要目标进程的进程ID - 在您的情况下应该是终端或Nano--并且需要知道信号编号。

在你的情况下,我不认为 CTRL + X 是一个注册信号。相反,它是一个特殊字符(某些值映射到应用程序或终端中的CTRL+X)。你需要弄清楚这个值是什么,并通过你的过程发送它。

希望这有帮助!

答案 1 :(得分:0)

虽然我真的不认为你应该做你正在做的事情(打开Nano作为子进程,然后向其发送控制序列)。在我看来,你试图用expect脚本或至少相同的风格来控制Nano。在python中(我不熟悉pty.spawn,但签名似乎缺少你需要的功能:与孩子的双向沟通​​)你应该查找popen:http://docs.python.org/2/library/subprocess.html#subprocess.Popen

使用popen,您可以通过设置自定义stdin / out / err文件描述符来生成一个孩子并仍然可以从python“读取和写入”它。

至于发送内容的确切价值,请查看:http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Fcompiler%2Fref%2Fruascii.htm

看起来似乎:“\ x18”应该可以正常使用。

答案 2 :(得分:0)

想出来:

正如Paulo Bu所说,当按下 CTRL + X 等按键时终端不会收到信号,这只是关键组合。 CTRL + X 具有等效的unicode。

Hexadecimal code: 18, U+0018. 

获取角色的过程:在显示角色的gedit等编辑器中按 ctrl + shift + U + 0018