2017-04-01 67 views
1

在這個問題上我問的readline功能的一個特定位:什麼是Windows組件實現類似於readline的功能?

Readline庫包含額外的功能,以保持以前輸入的命令行的列表,回憶也許重新編輯這些行

現在在Windows上使用Visual Studio,您不需要沒有臭味readline。您可以使用fgets,方向鍵將愉快地回想起您以前輸入的內容。當然你也可以編輯它們。

在linux上,非常相同的代碼(循環中的fgets)不能像這樣工作。向上箭頭顯示爲^[[A,左側和右側箭頭也不允許您按實驗所示導航該行,並且還描述了here

我的問題是,Windows的哪些部分使編輯成爲可能?

我認爲它可以是conhost.exe或如何實現fgets等。不知何故,我懷疑它是前者。無論如何,我想知道它究竟如何工作如果它被記錄在任何地方,等等。例如,除箭頭之外還有什麼其他鍵具有特殊含義並且處理方式不同,而不是作爲緩衝區的參數返回fgets寫信給。

+2

我*認爲*這是由控制檯設備邏輯處理的,只有當控制檯設備處於[熟悉模式]時纔會發生(https://msdn.microsoft.com/en-us/library/windows/desktop/ ms683462(v = vs.85)的.aspx)。實現細節可能會發生變化,但是,我猜這實際上是在當前版本的Windows的'conhost.exe'內部發生的。我很確定它不是C運行時庫的一部分,即與fgets無關。 –

回答

1

documentation for DOSKEY列出了特殊鍵。

我不知道任何文檔解釋說,在32位Windows中,此功能內置在控制檯中,並且doskey.exe僅僅是它的一個接口。但是,很容易確認此功能不依賴於使用C運行時庫運行的控制檯應用程序或從命令行shell啓動。

這是一個合理的猜測,實現此功能的實際代碼在當前版本的Windows中位於conhost.exe的內部,但當然這是一個實現細節,如有更改,恕不另行通知。從程序員的角度來看,所有重要的是DOSKEY功能在任何控制檯窗口上都存在,並且只要應用程序在cooked mode中就可用。

請注意,烹飪模式是默認設置。因此,除非應用程序明確禁用它,否則控制檯應用程序將具有DOSKEY功能。

相關問題