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


12

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ます。どうやってやるの?


このようなクロスポスト(こことstackoverflowで)は本当に通常のビジネスですか?
ДМИТРИЙМАЛИКОВ

いいえ:積極的に推奨されていません...
jasonwryan

SOでは話題外なので、コピーを
削除

@ dmitry.malikovこれは質問にとってより良い場所のようです。
xralf

さらに良い; xralfがSOコピーを削除しました。どうもありがとう
Michael Mrozek

回答:


8

XMonadのcontribパッケージを見ると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、キーバインド定義を簡単にすることも示していることに注意してください)

これら2つを組み合わせることも可能です。どちらもタイプですX ()。つまり、Xモナドにあります。用いた>>タイプのものである、(に確認:t (>>)ghci

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

我々は持っている(runOrRaiseMaster "firefox" (className =? "Firefox")) >> (sendMessage $ JumpToLayout "Full")二つの組み合わせとして、X ()タイプの種類X ()も、それはこのようにキーにバインドすることができます。

EDIT )コード行に欠落している>>

Edit2- modm > modMask

Edit3 これはxmonad.hsうまくいけばうまくいきます。

なぜあなたのためにHaskellを学んでみませんか?


作業用の回答やその他の情報、Haskellチュートリアルをありがとうございます。私はHaskellの構文と関数のパラダイムが好きです。機能しないのは、>> (sendMessage $ JumptoLayout "Full")コンストラクターでエラーが発生した部分だけです。多分それは簡単なことかもしれませんが、Haskellを学んだ後で解決します。
xralf

忘れてしまった:まだmodm動作しませんcontrolMask。まだを使用しています。
xralf

@xralf、(1)ブラケットがありませんでした-今は機能しますか?(2)xmonad.hsこれを修正するためにあなたの全体が必要です。より良いただ、この辺りのconfigアーカイブを見ていると、他の人がそれを行うか、言及を使用する方法をご覧くださいEZConfig
sr_

ブラケットは役に立ちませんでした。これが私が使っているxmonad.hsファイルです。
xralf

(1)角かっこはまだ間違っX ()ています。キーにバインドするタイプのアクションはである必要があり(runOrRaiseMaster ...) >> (sendMessage ...)、その結果,((...,...), (runOrR...) >> (send...) ) (a (before run...
sr_
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.