mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-05-19 03:20:21 -07:00
WindowGo.hs: +raiseBrowser, raiseEditor
Specialize runOrRaise in the same way as with Actions.Search, for one's browser and one's editors.
This commit is contained in:
parent
acd13fd324
commit
64396d85ab
@ -10,8 +10,7 @@ Defines a few convenient operations for raising (traveling to) windows based on
|
||||
monad, such as 'runOrRaise'. runOrRaise will run a shell command unless it can
|
||||
find a specified window; you would use this to automatically travel to your
|
||||
Firefox or Emacs session, or start a new one (for example), instead of trying to
|
||||
remember where you left it or whether you still have one running.
|
||||
-}
|
||||
remember where you left it or whether you still have one running. -}
|
||||
|
||||
module XMonad.Actions.WindowGo (
|
||||
-- * Usage
|
||||
@ -19,13 +18,19 @@ module XMonad.Actions.WindowGo (
|
||||
raise,
|
||||
runOrRaise,
|
||||
raiseMaybe,
|
||||
|
||||
raiseBrowser,
|
||||
raiseEditor,
|
||||
module XMonad.ManageHook
|
||||
) where
|
||||
|
||||
import XMonad (Query(), X(), withWindowSet, spawn, runQuery, focus)
|
||||
import Control.Monad (filterM)
|
||||
import qualified XMonad.StackSet as W (allWindows)
|
||||
import Data.Char (toLower)
|
||||
|
||||
import XMonad (Query(), X(), withWindowSet, spawn, runQuery, liftIO, focus)
|
||||
import XMonad.ManageHook
|
||||
import XMonad.Prompt.Shell (getBrowser, getEditor)
|
||||
import qualified XMonad.StackSet as W (allWindows)
|
||||
|
||||
{- $usage
|
||||
|
||||
@ -39,7 +44,10 @@ and define appropriate key bindings:
|
||||
> , ((modMask x .|. shiftMask, xK_b), runOrRaise "firefox" (className =? "Firefox"))
|
||||
|
||||
(Note that Firefox v3 and up have a class-name of "Firefox" and "Navigator";
|
||||
lower versions use other classnames such as "Firefox-bin"
|
||||
lower versions use other classnames such as "Firefox-bin". Either choose the
|
||||
appropriate one, or cover your bases by using instead something like
|
||||
@(className =? "Firefox" <||> className =? "Firefox-bin")@.)
|
||||
|
||||
For detailed instructions on editing your key bindings, see
|
||||
"XMonad.Doc.Extending#Editing_key_bindings". -}
|
||||
|
||||
@ -84,3 +92,15 @@ raiseMaybe f thatUserQuery = withWindowSet $ \s -> do
|
||||
case maybeResult of
|
||||
[] -> f
|
||||
(x:_) -> focus x
|
||||
|
||||
-- | Given a function which gets us a String, we try to raise a window with that classname,
|
||||
-- or we then interpret that String as a executable name.
|
||||
raiseVar :: IO String -> X ()
|
||||
raiseVar getvar = liftIO getvar >>= \var -> runOrRaise var (fmap (map toLower) className =? var)
|
||||
|
||||
-- | 'raiseBrowser' and 'raiseEditor' grab $BROWSER and $EDITOR respectively and they either
|
||||
-- take you to the specified, or they try to run it. This is most useful if your variables are simple
|
||||
-- and look like 'firefox' or 'emacs'.
|
||||
raiseBrowser, raiseEditor :: X ()
|
||||
raiseBrowser = raiseVar getBrowser
|
||||
raiseEditor = raiseVar getEditor
|
||||
|
Loading…
x
Reference in New Issue
Block a user