設定ファイルでいくつかのキーマップを使用しています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
。