プログラムが実行されている場合、xmonadでショートカットの動作をどのように変更しますか?

プログラムが実行されている場合、xmonadでショートカットの動作をどのように変更しますか?

設定ファイルでいくつかのキーマップを使用していますxmonad.hs

...
    , modMask = mod4Mask     -- Rebind Mod to the Windows key
...
 [ ((controlMask, xK_Print), spawn "sleep 0.2; scrot -s")
 , ((0, xK_Print), spawn "scrot")
 , ((controlMask, xK_f), spawn "firefox")
 ]

firefox時間が経つと、3番目のマッピングが実行されますctrl+f。もっと複雑な作業をしたいと思います。

if (firefox is running):
  focus and maximize firefox window:
else:
  run firefox

ctrl+fそしてそれをに変えたいですwin+f。どうすればいいですか?

答え1

見ているXMonad用の貢献パッケージ、あなたは発見するでしょうXMonad.Actions.WindowGo、輸出される次の機能:

runOrRaiseMaster :: String -> Query Bool -> X ()

プログラムの文字列引数を受け入れます。走る、「Firefox」、使用されるブールクエリなどすでに実行中であることを確認、X11プロパティを介して(className =? "Firefox")(例を参照)XMonad.Actions.WindowGoページ変形の場合)。

したがって、あなたがしなければならないことは、runOrRaiseMaster "firefox" (className =? "Firefox")必要なキーにバインドすることです。で説明XMonad.Doc.Extending、渡す

((modMask, xK_f ), runOrRaiseMaster "firefox" (className =? "Firefox"))

キーバインディング構成の一部としてData.Map(詳細は設定方法によって異なります。つまり、全体xmonad.hs、参照キーバインディングの追加)。

ノート本当の意味なしウィンドウの最大化XMonadから。指示に従って設定すると、次のことがMod4行われます。f

  • 「Firefox」に一致するクラス名を持つウィンドウがある場合、集中するそしてマスターとして設定、つまり最も最近ボールでリストしたもの、する大きな窓
  • 一致するウィンドウがない場合、Firefoxは生産そしてマスターとして設定

Full呼び出し後のレイアウトを選択して最大化をシミュレートできますrunOrRaiseMasterここで説明されているように:

("M-<F1>", sendMessage $ JumpToLayout "Full")

(この例もXMonad.Util.EZConfigより簡単なキーバインディング定義が可能です)

コンビネーションどちらも可能です。どちらもタイプX ()です。つまり、Xモナドで。タイプが次のように使用します>>:t (>>)inで確認ghci)。

(>>) :: Monad m => m a -> m b -> m b

(runOrRaiseMaster "firefox" (className =? "Firefox")) >> (sendMessage $ JumpToLayout "Full")また、キーにバインドできるように、2種類の組み合わせがあります。X ()X ()

)編集コード行がありません。>>

編集2 modm-> modMask

編集3 これはxmonad.hsうまくいきます。

Haskellを学んで大きな利点を享受するのはどうでしょうか?)

関連情報