簡體   English   中英

xterm 在原始輸入上報告錯誤的轉義序列

[英]xterm reports wrong escape sequences on raw input

我目前正在嘗試在 Linux 中進行原始輸入(例如,我通常使用 ncurses 或類似的東西)。

我已經做到了,每一個按鍵都直接報告給我的應用程序,並作為一系列十六進制代碼轉儲。

如果我按鍵盤上的“a”鍵,我會得到這個 output:

 #  hex string
00 0x61 'a'

這很簡單。 0x61 是 ASCII 'a' 的十六進制代碼,我可以反過來使用(char) 0x61將其打印回控制台。

現在我正在嘗試進行基本的行編輯。 如果我按下左箭頭鍵,例如使用xterm ,我會得到這個 output:

 #  hex string
00 0x1B '\x1b'
01 0x5B '['
02 0x44 'D'

根據這個網站,在“鍵盤處理”部分,

左箭頭 [...] 發送的代碼可以作為kcub1給出。

根據 termcap 文件,序列應該x1b OD

 ~ infocmp xterm | grep kcub1
kcub1=\EOD

雖然這發生在xtermtermite中,但它不會在默認的 tty 或urxvt中。

根據xterm 常見問題

轉義序列 [...] 被選為“PC 風格”代碼(如 SCO“ansi”),即

ESC [ H ESC [ F

對於正常模式,和

ESC OH ESC OF

適用於 cursor 應用模式

我想我必須將 xterm 設置為“正常模式”或將 termcap 文件中的所有 O 替換為“[”?

閱讀箭頭鍵以支持 xterm 和非 xterm 終端的最佳方式是什么?

然后,還有cub能力:

cub=\E[%p1%dD

在同一頁上,還有一個關於“參數化字符串”的部分。 我想這就是 cub 能力中的%p1%d所指的嗎?

%p1指的是“push first parm”, %d指的是“print pop() as in printf”。

這是什么意思呢? 什么被推到哪里? 我在任何時候都不會調用 pop() ,第二個選項是什么意思?

感謝您提前提供任何幫助。

編輯:這是一個小的 C 程序,它演示了我在說什么。 如果我使用gcc kilo.c編譯並運行它,按左箭頭鍵會發出27 91 ('[') 68 ('D') 注意左括號而不是預期的O

終端描述的特殊鍵列表是假設應用程序已將終端初始化為全屏模式,使用特殊鍵的應用程序模式而不是初始正常模式 命令行應用程序通常不這樣做(它們當然可以:查找smkxrmkx )。

進一步閱讀:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM