2016-08-17 47 views
2

我期待實現一個遠程客戶端,它通過nc連接到Linux,並開始bash。因此,我需要告訴bash我可以從stdout中發送給我的功能,以及我如何發送鍵碼和其他內容到其stdin,以便它可以解析它們。TERM =啞終端的必備功能

這是用TERM=something環境變量完成的,我需要設置一些值。如果我不設置它,然後各種方案開始抱怨:

$ mc 
The TERM environment variable is unset! 

我發現我可以設置術語dumb地說,我的客戶實在有限。而且似乎我仍然錯過了一些東西。

從這裏看起來dumb終端不具備這兩種能力,但什麼能力也仍有望有哪些?有關於它的規範或事實標準嗎?

+0

啞是字面上。它只是吐出你發送的字符,除了回車和輸出空格外,沒有定位功能。沒有「光標」可以四處移動,因此無法在其中打印「複雜」的界面,而無需在每次更改時打印出整個屏幕。並注意這不是bash抱怨,這是mc。它需要一個合適的終端。嘗試VT100或其他東西,而不是愚蠢的。 –

+0

@MarcB,哦,我肯定無法實現'vt100',我只想檢查一下'dumb'實現是否可以像'dumb'終端那樣工作。例如,我注意到當Linux上的標準終端在最後一行的最後一列上打印字符時不會自動滾動。 –

+0

它將(只)在打印一個附加字符以包裝到下一行時執行此操作。 –

回答

2

去來源可以提供幫助。終端數據庫有評論。這裏是一個slice from that

#### Specials 
# 
# Special "terminals". These are used to label tty lines when you don't 
# know what kind of terminal is on it. The characteristics of an unknown 
# terminal are the lowest common denominator - they look about like a ti 700. 
# 

dumb|80-column dumb tty, 
     am, 
     cols#80, 
     bel=^G, cr=^M, cud1=^J, ind=^J, 
unknown|unknown terminal type, 
     gn, use=dumb, 

「啞巴」,並認爲「未知」的終端類型,但很少使用:

  • 「啞」了automargins(文字「包裹」在右邊緣),假定有80列,並且ASCII BEL和回車符。缺少更好的東西,cud1(光標向下)是一個ASCII換行符。 ind(索引)值是相同的,這意味着當您到達屏幕底部時,文本向上滾動。

    沒有光標尋址(cup)也沒有交替(例如任意沿着行或列移動)。

  • 「未知」添加了「通用」標誌,標誌着它不適合curses應用程序使用。把它想象成一臺打印機。

至於最低要求,實際上取決於個人申請。 ncurses可以設法在屏幕上移動而不需要實際上有cup。它與六種策略一起工作。如果您閱讀mvcur的來源,您可以瞭解其需求。因爲(在這種情況下)它可能與俚語(它不會緊密地檢查)鏈接,所以諸如mc的應用程序不僅僅依賴於ncurses來決定它是否工作。所以mc做自己的檢查,這可能會增加限制。

實際上,除非您選擇有限的終端描述,如「啞」,否則大多數終端可能會遇到。

進一步閱讀:

+0

那麼,'^ G'是字節0x07,意味着我的客戶端在接收到它時應該發出嘟嘟聲?而'^ M'是0x0D,它是'\ r',而'^ J'實際上是'\ n',所以當遠程發送0x0D時,我的客戶端應該將光標移回行的開頭。 –

+0

yes - 但是:回車可能(通常是)由終端驅動程序(而不是終端本身)翻譯成'^ M^J'。終端描述只會告訴*終端*可以做什麼。 –

2

你的信息,最好的來源將是terminfo項,容易與infocmp工具查看:

infocmp dumb 
#  Reconstructed via infocmp from file: /lib/terminfo/d/dumb 
dumb|80-column dumb tty, 
     am, 
     cols#80, 
     bel=^G, cr=^M, cud1=^J, ind=^J, 

這使得它很清楚,啞終端是相當有限的......

+0

謝謝。現在我只需要破譯標誌。=) –

+0

在現代linux上的'man terminfo'中,有一些很好的功能列表和一些解釋,至少足以解釋正在發生的事情。 – fvu

+0

仍然會很高興得到這些解釋在線。包括'-L'在內的 –