tôi có một ý tưởng mới về cách sử dụng XMonad.Prompt.Input của xmonad. Tôi nghĩ nó sẽ rất tuyệt, nếu người ta có thể tạo một máy tính đơn giản để tính toán những gì người dùng nhập vào và trả về kết quả trong văn bản của lời nhắc tiếp theo, kết thúc khi người dùng nhấn thoát ... Vấn đề là, tôi không khá biết làm thế nào để đối phó với các loại ...Máy tính đơn giản trong lời nhắc xmonad
cho đến nay tôi có điều này:
nào không hoạt động. Tôi nhận được:
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))'
tôi hiểu nó có cái gì để làm với thực tế rằng runAndGetOutput trả IO String và tôi cần một String bình thường đối với inputPrompt bao gồm từ XMonad.Prompt.Input nhập khẩu. Nhưng tôi không có đầu mối làm thế nào để đối phó với điều đó ...
Cảm ơn rất nhiều sự giúp đỡ của bạn!
EDIT: Bây giờ tôi có điều này:
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
nào biên dịch, nhưng không hoạt động như mong đợi. Tôi có thể mở dấu nhắc, nhập một số văn bản, sau đó nó khởi chạy lệnh shell, nhưng sau đó nó chỉ loại bỏ giá trị stdo thay vì sử dụng nó như là một văn bản nhắc nhở mới.
Tôi mong đợi phiên bản có tiếng vang như sau: Khi tôi mở lời nhắc, một số chuỗi mặc định được hiển thị. Khi tôi nhập một giá trị và nhấn trở lại, một dấu nhắc khác sẽ mở ra với giá trị được nhập trước đó (nhờ tiếng vọng mà chỉ trả lại giá trị của nó). Nếu nó làm việc với echo, tôi sẽ thay thế echo bằng một số script bash để thực hiện các phép tính và trả về kết quả thay vì echo.
EDIT gần đây: Cuối cùng đã được giải quyết. Mã cuối cùng của đoạn trích nhỏ của tôi là tự trả lời của tôi :) Cảm ơn tất cả.
Điều đó có hiệu quả. Cảm ơn rất nhiều! –