mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-08-05 22:51:52 -07:00
new contrib module to launch apps with command line parameters
This commit is contained in:
70
XMonad/Actions/AppLauncher.hs
Normal file
70
XMonad/Actions/AppLauncher.hs
Normal file
@@ -0,0 +1,70 @@
|
||||
{- |
|
||||
Module : XMonad.Actions.AppLauncher
|
||||
Copyright : (C) 2008 Luis Cabellos
|
||||
License : None; public domain
|
||||
|
||||
Maintainer : <zhen.sydow@gmail.com>
|
||||
Stability : unstable
|
||||
Portability : unportable
|
||||
|
||||
A module for launch applicationes that receive parameters in the command line.
|
||||
The launcher call a prompt to get the parameters.
|
||||
-}
|
||||
module XMonad.Actions.AppLauncher ( -- * Usage
|
||||
-- $usage
|
||||
launchApp
|
||||
|
||||
-- * Use case: launching gimp with file
|
||||
-- $tip
|
||||
) where
|
||||
|
||||
import XMonad (X(),MonadIO)
|
||||
import XMonad.Core (spawn)
|
||||
import XMonad.Prompt (XPrompt(showXPrompt), mkXPrompt, XPConfig())
|
||||
import XMonad.Prompt.Shell (getShellCompl)
|
||||
|
||||
{- $usage
|
||||
This module is intended to allow the launch of the same application
|
||||
but changing the parameters using the user response. For example, when
|
||||
you want to open a image in gimp program, you can open gimp and then use
|
||||
the File Menu to open the image or you can use this module to select
|
||||
the image in the command line.
|
||||
|
||||
We use Prompt to get the user command line. This also allow to autoexpand
|
||||
the names of the files when we are writing the command line.
|
||||
-}
|
||||
|
||||
{- $tip
|
||||
|
||||
First, you need to import necessary modules. Prompt is used to get the promp
|
||||
configuration and the AppLauncher module itself.
|
||||
|
||||
> import XMonad.Prompt
|
||||
> import XMonad.Actions.AppLauncher as AL
|
||||
|
||||
Then you can add the bindings to the applications.
|
||||
|
||||
> ...
|
||||
> , ((modm, xK_g), AL.launchApp defaultXPConfig "gimp" )
|
||||
> , ((modm, xK_g), AL.launchApp defaultXPConfig "evince" )
|
||||
> ...
|
||||
|
||||
-}
|
||||
|
||||
-- A customized prompt
|
||||
data AppPrompt = AppPrompt String
|
||||
instance XPrompt AppPrompt where
|
||||
showXPrompt (AppPrompt n) = n ++ " "
|
||||
|
||||
type Application = String
|
||||
type Parameters = String
|
||||
|
||||
{- | Given an application and its parameters, launch the application. -}
|
||||
launch :: MonadIO m => Application -> Parameters -> m ()
|
||||
launch app params = spawn ( app ++ " " ++ params )
|
||||
|
||||
|
||||
{- | Get the user's response to a prompt an launch an application using the
|
||||
input as command parameters of the application.-}
|
||||
launchApp :: XPConfig -> Application -> X ()
|
||||
launchApp config app = mkXPrompt (AppPrompt app) config (getShellCompl []) $ launch app
|
@@ -67,6 +67,7 @@ library
|
||||
XMonad.Doc.Configuring
|
||||
XMonad.Doc.Extending
|
||||
XMonad.Doc.Developing
|
||||
XMonad.Actions.AppLauncher
|
||||
XMonad.Actions.Commands
|
||||
XMonad.Actions.ConstrainedResize
|
||||
XMonad.Actions.CopyWindow
|
||||
|
Reference in New Issue
Block a user