2017-01-16 65 views
0

我在我的tcl終端程序中使用stty raw -echo。 我想要做的只是一些關鍵的新聞事件,如標籤一些行動。因爲我想委託給rlwrap或其他默認處理程序的按鍵事件的其餘部分,如將光標移動到左側,並在光標插入文本,或按Ctrl + Ç到終止程序。有沒有辦法做到這一點?如何使用tcl將原始模式終端中的按鍵處理委託給rlwrap

+1

可能不是您想的方式,因爲跨程序委派責任使終端連接(和初始化)變得繁瑣。 –

回答

0

stty中有一個處理信號的選項,即isig選項。 另外,-opost將「\ n」處理爲「\ r \ n」。

stty raw -echo isig 

另一種選擇是使用顯式的,而不是-icanon min 1 time 0選項raw

0

唉,終端處理系統不能以簡單的方式工作。 但這並非不可能。我能想到的最簡單的機制(的確是唯一一個不會讓我對此感到畏縮的機制)是使用Expect擴展的interact命令的一些更高級的功能。

特別是,interact有效地連接了由Expect編輯的程序spawn,但您也可以添加模式以允許擴展的行爲。

package require Expect 

spawn /your/program yourarguments... 

interact { 
    "\t" { 
     # Do something special here as we've got a Tab 
     send "special special special\r" 
    } 
} 

您可以在衍生過程中使用rlwrap:

spawn rlwrap /your/program yourarguments... 
+0

謝謝。但是我沒有安裝Expect,我想分發這個程序。我猜想沒有多少人安裝了Expect。當您收到Ctrl + Z時,tcl中有沒有辦法將程序置於後臺? – Herbert

0

GitHub的version的最新rlwraphas a bindable readline commandrlwrap-direct-keypress可以綁定(例如,在你的.inputrc)到任意鍵要直接傳遞到您的程序,繞過rlwrap

當編輯輸入行時,所有其他按鍵仍然照常工作(例如移動光標)readline