2014-09-30 37 views
2

我有一個程序,我只需要讀取linux終端(xterm和控制檯)中的特殊鍵。目前我正在使用curses來做到這一點(儘管我絕對不需要詛咒其他任何東西),並且除了一個麻煩之外,它完美地工作:我不希望詛咒清除屏幕並更改CRLF模式。在沒有清除屏幕的情況下閱讀linux終端中的特殊鍵

也就是說,該代碼將做到這一點:

stdscr = curses.initscr() 
curses.cbreak() 
curses.noecho() 
stdscr.keypad(1) 

while True: 
    c = stdscr.getch() 
    if c == curses.KEY_UP: 
     scroll_up() 
    elif c == curses.KEY_DOWN: 
     scroll_down() 

但複雜的是,它會清除屏幕和終端上以前的內容沒有見過;所有來自後臺進程的輸出都會將換行符僅轉換爲換行符。

我知道我可以把終端變成未煮過的方式自己,延遲後ESC字符等等,但我想這個程序有特殊鍵,如F1首頁工作始終,對所有終端,並且因此這將是PITA

因此有任何方法要麼

  • 避免結算屏幕,詛咒和改變換行模式(I讀該函數0 ncurses的的可以使用它,但它不是由Python的實現),
  • 任何辦法恢復原來的畫面就被清除後手動還原CRLF行爲,這樣,
  • 在Linux中一貫閱讀特殊鍵的任何其他簡單方法?
+0

也許看看'的https:// bitbucket.org/pypy/pyrepl'。它是基於curses的,但不清除屏幕。 – 2014-09-30 08:33:44

+0

看起來很有意思,但是如何將它掛在這裏並不是很明顯,我是否應該實例化UnixConsole? – 2014-09-30 09:08:02

+0

啊,prepare()和get_event()。現在我該如何將換行符更改回CRLF? :D你想把它作爲一個答案;) – 2014-09-30 09:14:54

回答

2

(從註釋中移動)

也許看看https://bitbucket.org/pypy/pyrepl。它是基於curses的,但不清除屏幕。應用程序pythonipythoni1給出了一個Python提示符,它不使用readline,但提供了一個類似的界面,並帶有多行編輯(如果我們嘗試鍵入多行命令)。

要回答你的最新評論:方向鍵爲我pythonipythoni1工作...

+0

我會接受這個答案,因爲它確實工作得很好,但在這種情況下,我們結束了閱讀'hidraw0 '而不是設備。 – 2014-10-06 07:59:51

相關問題