mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-05-19 03:20:21 -07:00
This patch takes runProcessWithInput out of Dmenu, runProcessWithInputAndWait out of Dzen, and runInXTerm out of RunInXTerm and collects them in one central module called Run. This way, other modules may include Run instead of Dmenu to get what they want without giving the impression of making use of dmenu.
103 lines
3.7 KiB
Haskell
103 lines
3.7 KiB
Haskell
-----------------------------------------------------------------------------
|
|
-- |
|
|
-- Module : XMonadContrib.WmiiActions
|
|
-- Copyright : (c) Juraj Hercek <juhe_xmonad@hck.sk>
|
|
-- License : BSD3
|
|
--
|
|
-- Maintainer : Juraj Hercek <juhe_xmonad@hck.sk>
|
|
-- Stability : unstable
|
|
-- Portability : unportable
|
|
--
|
|
-- Provides `actions' as known from Wmii window manager (
|
|
-- <http://wmii.suckless.org>). It also provides slightly better interface for
|
|
-- running dmenu on xinerama screens. If you want to use xinerama functions,
|
|
-- you have to apply following patch (see Dmenu.hs extension):
|
|
-- <http://www.jcreigh.com/dmenu/dmenu-3.2-xinerama.patch>. Don't forget to
|
|
-- recompile dmenu afterwards ;-).
|
|
-----------------------------------------------------------------------------
|
|
|
|
module XMonadContrib.WmiiActions (
|
|
-- * Usage
|
|
-- $usage
|
|
wmiiActions
|
|
, wmiiActionsXinerama
|
|
, executables
|
|
, executablesXinerama
|
|
) where
|
|
|
|
import XMonad
|
|
import XMonadContrib.Dmenu (dmenu, dmenuXinerama)
|
|
import XMonadContrib.Run (runProcessWithInput)
|
|
|
|
import Control.Monad (filterM, liftM, liftM2)
|
|
import System.Directory (getDirectoryContents, doesFileExist, getPermissions, executable)
|
|
|
|
-- $usage
|
|
--
|
|
-- You can use this module with the following in your Config.hs file:
|
|
--
|
|
-- > import XMonadContrib.WmiiActions
|
|
--
|
|
-- and add following to the list of keyboard bindings:
|
|
--
|
|
-- > ,((modMask, xK_a), wmiiActions "/home/joe/.wmii-3.5/")
|
|
--
|
|
-- or, if you are using xinerama, you can use
|
|
--
|
|
-- > ,((modMask, xK_a), wmiiActionsXinerama "/home/joe/.wmii-3.5/")
|
|
--
|
|
-- however, make sure you have also xinerama build of dmenu (for more
|
|
-- information see "XMonadContrib.Dmenu" extension).
|
|
|
|
-- | The 'wmiiActions' function takes the file path as a first argument and
|
|
-- executes dmenu with all executables found in the provided path.
|
|
wmiiActions :: FilePath -> X ()
|
|
wmiiActions path =
|
|
wmiiActionsDmenu path dmenu
|
|
|
|
-- | The 'wmiiActionsXinerama' does the same as 'wmiiActions', but it shows
|
|
-- dmenu only on workspace which currently owns focus.
|
|
wmiiActionsXinerama :: FilePath -> X ()
|
|
wmiiActionsXinerama path =
|
|
wmiiActionsDmenu path dmenuXinerama
|
|
|
|
wmiiActionsDmenu :: FilePath -> ([String] -> X String) -> X ()
|
|
wmiiActionsDmenu path dmenuBrand =
|
|
let path' = path ++ "/" in
|
|
getExecutableFileList path' >>= dmenuBrand >>= spawn . (path' ++)
|
|
|
|
getExecutableFileList :: FilePath -> X [String]
|
|
getExecutableFileList path =
|
|
io $ getDirectoryContents path >>=
|
|
filterM (\x -> let x' = path ++ x in
|
|
liftM2 (&&)
|
|
(doesFileExist x')
|
|
(liftM executable (getPermissions x')))
|
|
|
|
{-
|
|
getExecutableFileList :: FilePath -> X [String]
|
|
getExecutableFileList path =
|
|
io $ getDirectoryContents path >>=
|
|
filterM (doesFileExist . (path ++)) >>=
|
|
filterM (liftM executable . getPermissions . (path ++))
|
|
-}
|
|
|
|
-- | The 'executables' function runs dmenu_path script providing list of
|
|
-- executable files accessible from $PATH variable.
|
|
executables :: X ()
|
|
executables = executablesDmenu dmenu
|
|
|
|
-- | The 'executablesXinerama' function does the same as 'executables' function
|
|
-- but on workspace which currently owns focus.
|
|
executablesXinerama :: X ()
|
|
executablesXinerama = executablesDmenu dmenuXinerama
|
|
|
|
executablesDmenu :: ([String] -> X String) -> X ()
|
|
executablesDmenu dmenuBrand =
|
|
getExecutablesList >>= dmenuBrand >>= spawn
|
|
|
|
getExecutablesList :: X [String]
|
|
getExecutablesList =
|
|
io $ liftM lines $ runProcessWithInput "dmenu_path" [] ""
|
|
|