現在のワークスペースでウィンドウを見つけ、それに何らかのアクションを適用する


4

私はこれがHaskellが得意な人にとっては本当に簡単なはずだと思いますが、私はそれが得意ではないのでそれを理解することができませんでした。 基本的に私は現在のワークスペースのウィンドウのリストを検索し、ある条件に一致するものを見つけてそれにアクションを適用したいと思います。見つからない場合は、このウィンドウを作成してください。 私はこのようなスケルトンコードを持っていました

import qualified XMonad.StackSet as W
import XMonad.Actions.WindowGo

findWindow condition actionIfFound actionIfNotFound = 
    ifWindow (condition <&&> member W.current) windowFound actionIfNotFound
        where windowFound = ask >>= w -> do actionIfFound w

回答:


7

古い投稿ですが、それでも回答が欲しい人のために

基本的には XMonad.StackSet.index現在のワークスペース内のウィンドウのリストは、次のようにして取得できます。

do
    windows <- gets (W.index . windowset)
    -- something...

そう findWindow このように実装することができます:

import qualified XMonad.StackSet as W
import Data.List (find)

findWindow :: (Window -> Bool) -> (Window -> X()) -> X() -> X()
findWindow condition actionIfFound actionIfNotFound = do
    windows <- gets (W.index . windowset)
    let found = find condition windows  -- found has type Maybe Window
    case found of
        Nothing -> actionIfNotFound
        Just w -> actionIfFound w

シモンズ:最後の3行はに短縮することができます maybe actionIfNotFound actionIfFound found

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.