我有一個使用xmonad的XMonad.Prompt.Input的新想法。我認爲這真的很酷,如果可以製作一個簡單的計算器來計算用戶輸入的內容並將結果返回到下一個提示的文本中,當用戶按下escape時結束......問題是,我沒有很知道如何處理同類型...xmonad提示中的簡單計算器
到目前爲止,我有這樣的:
不工作。我得到:
Couldn't match expected type `[Char]' with actual type `IO String'
Expected type: String
Actual type: IO String
In the return type of a call of `runAndGetOutput'
In the second argument of `calcPrompt', namely
`(runAndGetOutput ("calc" ++ next))'
我明白它有事情做與runAndGetOutput返回IO字符串的事實,我需要一個正常的字符串inputPrompt進口XMonad.Prompt.Input包括在內。但我不知道如何處理...
非常感謝您的幫助!
編輯: 現在我有這樣的:
runAndGetOutput :: String -> IO String
runAndGetOutput cmd = do
(_, pout, _, phandle) <- runInteractiveCommand cmd
a <- hGetContents pout
waitForProcess phandle
return a
calcPrompt :: XPConfig -> String -> X()
calcPrompt c ans =
inputPrompt c ans ?+ \next ->
liftIO (runAndGetOutput ("echo -n " ++ next)) >>= calcPrompt c
哪個編譯,但不會按預期工作。我可以打開提示符,輸入一些文本,然後啓動shell命令,但它只是放棄stdo值,而不是將它用作新的提示文本。
我希望帶有echo的版本可以做到以下幾點:當我打開提示時,會顯示一些默認字符串。當我輸入一個數值並按回車鍵時,另一個提示符會打開,並輸入先前輸入的值(由於echo只返回已獲得的數值)。如果它使用echo,我會用一些bash腳本替換echo來執行計算並返回結果而不是echo。
最近編輯: 最後解決。我小小的計算片段的最終代碼是在我自己的答案:)謝謝大家。
工作正常。非常感謝! – 2011-12-27 17:24:03