回答
這當然是可能的。歷史可以在某種程度上獨立於輸入來處理,因此理想情況下,您可以使用諸如addLine
和previousLine
等方法來表示歷史記錄的對象。然後你可以將它粘貼到你選擇的用戶界面上,無論是Gtk應用程序中的輸入框還是stdio上的某個輸入框。
作爲(未完)IRC客戶端的一部分,我已經寫了這樣的事情:https://github.com/exarkun/invective/blob/master/invective/history.py
而實際上,在同一項目中,你會發現LineInputWidget魚鉤這件事到標準輸入輸出,並且還器具諸如emacs風格的殺戮和猛擊,正向和反向字等。
stdiodemo.py無法處理像向上箭頭和向下箭頭這樣的事情,儘管如此,您可能需要進行明智的歷史導航。相反,您需要使用一些知道如何解釋終端控制序列的代碼,在原始模式下處理stdio。如果你曾經運行過「cat」並點擊箭頭或任何其他功能鍵,那麼你知道每個字節都有一個特殊的字節序列。程序中的某些東西需要解釋這些序列並將它們轉化爲合理的東西。這是twisted.conch.insults.insults.ServerProtocol
所做的。它將連接到終端的字節傳輸轉變爲另一種更豐富的傳輸方式:一種可以告訴你字節何時到達的傳輸方式,以及當按下各種特殊鍵時。您可以通過運行查看正在運行的輸入歷史基於行的協議的一個例子:
python -m twisted.conch.stdio
此使用ServerProtocol
和扭曲自己的輸入歷史課的一個(關於這個REPL的特別之處是運行一個Python REPL它具有與處理輸入同時運行的reactor,這在正常的Python REPL中是一項挑戰)。
你可以在twisted/conch/stdio.py中找到它的來源。重要的stdio連接代碼位於runWithProtocol
類中。看看它是如何實例化一個ServerProtocol
並將其連接到stdio與StandardIO
(所以它只是建立更多的stdiodemo.py的頂部)。儘管如此,ServerProtocol
只解釋來自終端的字節。它沒有你的應用程序邏輯。所以你需要給它一個實現你的應用程序邏輯的類。那是exactly what invective does。
- 1. Rpy2命令歷史
- 2. Rstudio命令歷史
- 3. 歷史命令沒有命令編號
- 4. Windows命令行歷史
- 5. 米拉的命令歷史?
- 6. 清除命令歷史
- 7. Shell歷史命令 - 功能
- 8. 從SSH命令行歷史記錄刪除特定歷史
- 9. tmux:列出命令提示歷史?
- 10. 非交互式Python命令歷史
- 11. redhat linux中的歷史命令
- 12. 蜂巢命令行CLI的歷史
- 13. 避免matlab命令歷史時間戳
- 14. Firebug命令行歷史記錄
- 15. MongoDB shell不維護命令歷史
- 16. 單更容易命令在bash歷史
- 17. OS X終端歷史丟失命令
- 18. 保存命令輸出到bash歷史
- 19. 檢索命令行歷史記錄
- 20. 搜索終端中的命令歷史
- 21. proc_open for php的命令歷史記錄
- 22. 通過命令過濾ZSH歷史
- 23. 備份mac osx終端命令歷史
- 24. Python中的歷史命令行
- 25. 歷史SQL Server上的命令
- 26. 當前bash命令不保存歷史
- 27. Shell歷史中的可疑命令
- 28. 其中是:命令歷史存儲?
- 29. 命令歷史的Cygwin快捷方式
- 30. 非交互式shell命令的歷史
你問'readline'嗎? http://docs.python.org/library/readline.html – 2010-07-14 14:05:24
不,這個'twisted'標籤意味着他在詢問Twisted異步標準io演示。 http://twistedmatrix.com/trac/browser/trunk/doc/core/examples/stdiodemo.py – Glyph 2010-07-16 03:09:18
感謝雕文的澄清! – Antonis 2010-07-16 09:44:07