これまで、私は箱のスクリプトの出力に基づいて、私のxmonadでキーバインディングの効果を考えていました。私は最終的に無関係の理由でそれをしないことに決めましたが、私は最近ハスケルを学ぶ練習と同様のことをやろうとしました。テストはIOの文字列を返し、卵がStringを想定しているためxmonadのキーバインドでreadProcessの出力を使用するにはどうすればよいですか?
test = readProcess "echo" ["-n", "gvim"] []
これは、アップスロー:
ので、機能を与えられました。
((modm, xK_y), spawn ("xmessage " ++ test))
です。カッコいい。私はIO操作が予測不可能なので、それらを別々に保つ必要があるということを知っています。ファイン。だから私は、オンラインでいくつかの突きをまわりましたし、これになった(xmessageを落とし、ちょうど自身でテストの出力を渡したい):
((modm, xK_y), liftIO test >>= spawn)
これは悪いです。それは煩わしくコンパイルしますが、バインディングを試しても何も起こりません。 (私はまた、 "xmessage test"を生成してそれを動作させたものに置き換えました)
だから私は "私の機能に何か問題があるかもしれない"と思ったので、私はそれを再現しましたが、GCHiから "gvim"それでは、私はそれをhaskellファイルに書きます:
main = test >>= putStrLn
test = readProcess "echo" ["-n", "gvim"] []
正しく動作します。
だからどこが間違っていたのですか?
編集:解決策は、readProcess
の代わりにrunProcessWithInput
を使用することでした。 関連リンク:https://ghc.haskell.org/trac/ghc/ticket/5212xmonad io binding not working
残念ながら違いはありません。 – HokieGeek
新しいアイデアを追加しました。 – ErikR
私は自分の質問を編集しましたが、現在の例では、-nオプションを付けたエコーは、少なくともスタンドアロンプログラムで試してみると、改行を返すようには見えません。他の提案を試してみよう。 – HokieGeek