web-dev-qa-db-ja.com

Xmonad-キーをコマンドのチェーンにバインドします

Xmonad用のEZConfigモジュールを使用しています。バインドしたいModMask s最初に現在フォーカスされているウィンドウを他の画面に移動し、次にフォーカスを他の画面に移動します。

CycleWSモジュールを使用すると、「shiftNextScreen」に続いて「nextScreen」を実行することでこれを実現できます。

2つのコマンドを1つのキーにバインドできますか?

また、行ってみました

((modMask, xK_s),
     shiftNextScreen nextScreen)

しかし、nextScreenがshiftNextScreenの引数になるため、これは機能しません。これは意味がありません。私はhaskellをまったく知りません。

3
Fawkes5

今まで誰もあなたの質問に答えられなかったようです。試してみましょう:

TL; DR

_((modMask, xK_s),
     sequence_ [shiftNextScreen, nextScreen])
_

動作するはずです。

どうして?

http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Actions-CycleWS.html を見ると、

関数には次のタイプが表示されます。

_nextScreen :: X ()
shiftNextScreen :: X ()
_

xがモナドであり、キーバインディングのタイプが_(ButtonMask,KeySym), X ()_であるという知識とともに、必要なものは次のとおりです。

nextScreenshiftNextScreenを組み合わせて、タイプX ()の結果を取得します。

単純に次のようにリストを作成すると、次のようになります。

_[nextScreen,shiftNextScreen]_タイプは[X ()]で、閉じていますが、まだ必要なものはありません。

Xがモナドであることがわかっているので、 hoogle をすばやく検索すると、_sequence__が表示されます。

それは私たちに与えます:

_sequence_ [shiftNextScreen, nextScreen]
_

これはタイプX ()を生成するため、キーマッピングの右側の有効なアクションです。

5
Predator117