linux 如何获取CTRL+B、CTRL+L、ALT+K等的Unicode字符?

20jt8wwn  于 2023-01-08  发布在  Linux
关注(0)|答案(4)|浏览(129)

我正在编写一个在Linux中与Nano接口的应用程序。Nano需要接收控制序列以保存/退出/并处理文件(^G ^R ^O ^Y ^K等)
我偶然发现了^X = U+0018的unicode。但是由于我希望我的应用程序是完整的,我希望能够有一个完整的unicode字符列表,用于ctrl/alt/shift +任何其他键的组合。
我试着用netcat连接shell,按下(例如)CTRL+B,看看另一边出现了什么。这对一些shell有效,但不是所有shell都有效,因为终端在发送转义之前会“解释”它。
我现在悬赏,我想要的是

  • A)获取所有转义码的方法,或
  • B)一份全面的清单,包括我上面提到的。
aemubtdh

aemubtdh1#

你没有在问题中包含这么多代码,所以我不知道你是如何完成任务的。用Python处理子进程的最好方法是使用subprocess模块。如果你能提供更多代码细节,比如你是如何处理和绑定子进程的,我们会更有帮助。
话虽如此,Linux支持向任何进程发送信号。这是通过kill系统调用实现的。Python也将这个系统调用封装在os.kill中。你只需要将目标的pid和信号号作为参数传递。如果你使用子进程,Popen.send_signal应该是要使用的方法。
要恢复它,您需要目标进程的进程ID--在您的例子中应该是终端或Nano--并且需要知道信号号。
在您的例子中,我不认为CTRL + X是一个注册信号,而是一个特殊字符(在应用程序或终端中Map到CTRL+X的某个值),您需要弄清楚这个值是什么,并通过您的进程发送它。
希望这有帮助!

zlhcx6iw

zlhcx6iw2#

虽然我真的不认为你应该做你正在做的事情(打开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”应该就可以了。

4ioopgfo

4ioopgfo3#

我想明白了:
正如Paulo Bu所说,当按下CTRL + X这样的键时,终端接收到的不是信号,而是组合键。CTRL + X有一个Unicode等价物。

Hexadecimal code: 18, U+0018.

获取角色的过程:按ctrl + shift + U +0018在一个编辑器,如显示字符的gedit。

q1qsirdb

q1qsirdb4#

下面是ASCII表中的Control-{}代码,也许这就是您所需要的。

Char    Decimal     Hex
ctrl-@      0        00
ctrl-A      1        01
ctrl-B      2        02
ctrl-C      3        03
ctrl-D      4        04
ctrl-E      5        05
ctrl-F      6        06
ctrl-G      7        07
ctrl-H      8        08
ctrl-I      9        09
ctrl-J      10       0A
ctrl-K      11       0B
ctrl-L      12       0C
ctrl-M      13       0D
ctrl-N      14       0E
ctrl-O      15       0F
ctrl-P      16       10
ctrl-Q      17       11
ctrl-R      18       12
ctrl-S      19       13
ctrl-T      20       14
ctrl-U      21       15
ctrl-V      22       16
ctrl-W      23       17
ctrl-X      24       18
ctrl-Y      25       19
ctrl-Z      26       1A
ctrl-[      27       1B
ctrl-\      28       1C
ctrl-]      29       1D
ctrl-^      30       1E
ctrl-_      31       1F

要输入ctrl-X,您需要尽可能地向文件中输入unicode(18)。有时\x0018可能会起作用,这取决于解释器如何解释它

相关问题