mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-08-01 12:41:52 -07:00
Removes LocateMode and LocateRegexMode from XMonad.Actions.Launcher
This commit is contained in:
@@ -15,33 +15,25 @@ module XMonad.Actions.Launcher(
|
|||||||
defaultLauncherModes
|
defaultLauncherModes
|
||||||
, ExtensionActions
|
, ExtensionActions
|
||||||
, LauncherConfig(..)
|
, LauncherConfig(..)
|
||||||
, LocateFileMode
|
|
||||||
, LocateFileRegexMode
|
|
||||||
, launcherPrompt
|
, launcherPrompt
|
||||||
-- * ToDo
|
|
||||||
-- $todo
|
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Data.List (find, findIndex, isPrefixOf, tails)
|
import Data.List (find, findIndex, isPrefixOf, tails)
|
||||||
import qualified Data.Map as M
|
import qualified Data.Map as M
|
||||||
import Data.Maybe (fromMaybe, isJust)
|
import Data.Maybe (fromMaybe, isJust)
|
||||||
import System.Directory (doesDirectoryExist)
|
import System.Directory (doesDirectoryExist)
|
||||||
import XMonad hiding (config)
|
import XMonad hiding (config)
|
||||||
import XMonad.Prompt
|
import XMonad.Prompt
|
||||||
import XMonad.Util.Run
|
import XMonad.Util.Run
|
||||||
|
|
||||||
{- $description
|
{- $description
|
||||||
This module lets you combine and switch between different types of prompts (`XMonad.Prompt.XPrompt`). It includes a set of default modes:
|
This module exemplifies usage of `XMonad.Prompt.mkXPromptWithModes`. It includes two modes:
|
||||||
|
|
||||||
* Hoogle mode: Search for functions using hoogle, choosing a function leads you to documentation in Haddock.
|
* Hoogle mode: Search for functions using hoogle, choosing a function leads you to documentation in Haddock.
|
||||||
|
|
||||||
* Locate mode: Search for files using locate, choosing a file opens it with a program you specify depending on the file's extension.
|
|
||||||
|
|
||||||
* Locate regexp: Same as locate mode but autocomplete works with regular expressions.
|
|
||||||
|
|
||||||
* Calc: Uses the program calc to do calculations.
|
* Calc: Uses the program calc to do calculations.
|
||||||
|
|
||||||
To use the default modes, modify your .xmonad:
|
To test it, modify your local .xmonad:
|
||||||
|
|
||||||
> import XMonad.Prompt(defaultXPConfig)
|
> import XMonad.Prompt(defaultXPConfig)
|
||||||
> import XMonad.Actions.Launcher
|
> import XMonad.Actions.Launcher
|
||||||
@@ -50,47 +42,23 @@ import XMonad.Util.Run
|
|||||||
|
|
||||||
A LauncherConfig contains settings for the default modes, modify them accordingly.
|
A LauncherConfig contains settings for the default modes, modify them accordingly.
|
||||||
|
|
||||||
> launcherConfig = LauncherConfig { pathToHoogle = "/home/YOU/.cabal/bin/hoogle" , browser = "firefox" , actionsByExtension = extensionActions }
|
> launcherConfig = LauncherConfig { pathToHoogle = "/home/YOU/.cabal/bin/hoogle" , browser = "firefox"}
|
||||||
|
|
||||||
@extensionActions :: M.Map String (String -> X())
|
Restar xmonad. Press Ctrl + Your_Modkey + L and the first prompt should pop up.
|
||||||
extensionActions = M.fromList $ [
|
|
||||||
(\".hs\", \p -> spawn $ \"emacs \" ++ p)
|
|
||||||
, (\".pdf\", \p -> spawn $ \"acroread \" ++ p)
|
|
||||||
, (\".mkv\", \p -> spawn $ \"vlc \" ++ p)
|
|
||||||
, (\".*\", \p -> spawn $ \"emacs \" ++ p) --match with any files
|
|
||||||
, (\"/\", \p -> spawn $ \"nautilus \" ++ p) --match with directories
|
|
||||||
]@
|
|
||||||
|
|
||||||
To try it, restart xmonad. Press Ctrl + Your_Modkey + L and the first prompt should pop up.
|
|
||||||
|
|
||||||
If you used `defaultXPConfig`, you can change mode with xK_grave. If you are using your own `XPConfig`, define the value for `changeModeKey`.
|
If you used `defaultXPConfig`, you can change mode with xK_grave. If you are using your own `XPConfig`, define the value for `changeModeKey`.
|
||||||
-}
|
-}
|
||||||
|
|
||||||
data LocateFileMode = LMode ExtensionActions
|
data HoogleMode = HMode FilePath String --path to hoogle and browser
|
||||||
data LocateFileRegexMode = LRMode ExtensionActions
|
|
||||||
data HoogleMode = HMode FilePath String --path to hoogle e.g. "/home/me/.cabal/bin/hoogle"
|
|
||||||
data CalculatorMode = CalcMode
|
data CalculatorMode = CalcMode
|
||||||
|
|
||||||
data LauncherConfig = LauncherConfig {
|
data LauncherConfig = LauncherConfig {
|
||||||
browser :: String
|
browser :: String
|
||||||
, pathToHoogle :: String
|
, pathToHoogle :: String
|
||||||
, actionsByExtension :: ExtensionActions
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type ExtensionActions = M.Map String (String -> X())
|
type ExtensionActions = M.Map String (String -> X())
|
||||||
|
|
||||||
-- | Uses the program `locate` to list files
|
|
||||||
instance XPrompt LocateFileMode where
|
|
||||||
showXPrompt (LMode _) = "locate %s> "
|
|
||||||
completionFunction (LMode _) = \s -> if (s == "" || last s == ' ') then return [] else (completionFunctionWith "locate" ["--limit","5",s])
|
|
||||||
modeAction (LMode actions) _ fp = spawnWithActions actions fp
|
|
||||||
|
|
||||||
-- | Uses the program `locate --regex` to list files
|
|
||||||
instance XPrompt LocateFileRegexMode where
|
|
||||||
showXPrompt (LRMode _) = "locate --regexp %s> "
|
|
||||||
completionFunction (LRMode _) = \s -> if (s == "" || last s == ' ') then return [] else (completionFunctionWith "locate" ["--limit","5","--regexp",s])
|
|
||||||
modeAction (LRMode actions) _ fp = spawnWithActions actions fp
|
|
||||||
|
|
||||||
-- | Uses the command `calc` to compute arithmetic expressions
|
-- | Uses the command `calc` to compute arithmetic expressions
|
||||||
instance XPrompt CalculatorMode where
|
instance XPrompt CalculatorMode where
|
||||||
showXPrompt CalcMode = "calc %s> "
|
showXPrompt CalcMode = "calc %s> "
|
||||||
@@ -103,7 +71,7 @@ instance XPrompt CalculatorMode where
|
|||||||
instance XPrompt HoogleMode where
|
instance XPrompt HoogleMode where
|
||||||
showXPrompt _ = "hoogle %s> "
|
showXPrompt _ = "hoogle %s> "
|
||||||
commandToComplete _ = id
|
commandToComplete _ = id
|
||||||
completionFunction (HMode pathToHoogleBin' _) = \s -> completionFunctionWith pathToHoogleBin' ["--count","5",s]
|
completionFunction (HMode pathToHoogleBin' _) = \s -> completionFunctionWith pathToHoogleBin' ["--count","8",s]
|
||||||
-- This action calls hoogle again to find the URL corresponding to the autocompleted item
|
-- This action calls hoogle again to find the URL corresponding to the autocompleted item
|
||||||
modeAction (HMode pathToHoogleBin'' browser') query result = do
|
modeAction (HMode pathToHoogleBin'' browser') query result = do
|
||||||
completionsWithLink <- liftIO $ completionFunctionWith pathToHoogleBin'' ["--count","5","--link",query]
|
completionsWithLink <- liftIO $ completionFunctionWith pathToHoogleBin'' ["--count","5","--link",query]
|
||||||
@@ -133,15 +101,9 @@ launcherPrompt config modes = mkXPromptWithModes modes config
|
|||||||
defaultLauncherModes :: LauncherConfig -> [XPMode]
|
defaultLauncherModes :: LauncherConfig -> [XPMode]
|
||||||
defaultLauncherModes cnf = let
|
defaultLauncherModes cnf = let
|
||||||
ph = pathToHoogle cnf
|
ph = pathToHoogle cnf
|
||||||
actions = actionsByExtension cnf
|
|
||||||
in [ hoogleMode ph $ browser cnf
|
in [ hoogleMode ph $ browser cnf
|
||||||
, locateMode actions
|
|
||||||
, locateRegexMode actions
|
|
||||||
, calcMode]
|
, calcMode]
|
||||||
|
|
||||||
locateMode, locateRegexMode :: ExtensionActions -> XPMode
|
|
||||||
locateMode actions = XPT $ LMode actions
|
|
||||||
locateRegexMode actions = XPT $ LRMode actions
|
|
||||||
hoogleMode :: FilePath -> String -> XPMode
|
hoogleMode :: FilePath -> String -> XPMode
|
||||||
hoogleMode pathToHoogleBin browser' = XPT $ HMode pathToHoogleBin browser'
|
hoogleMode pathToHoogleBin browser' = XPT $ HMode pathToHoogleBin browser'
|
||||||
calcMode :: XPMode
|
calcMode :: XPMode
|
||||||
@@ -168,11 +130,15 @@ spawnWithActions actions fp = do
|
|||||||
spawnNoPatternMessage :: String -> String -> X ()
|
spawnNoPatternMessage :: String -> String -> X ()
|
||||||
spawnNoPatternMessage fileExt _ = spawn $ "xmessage No action specified for file extension " ++ fileExt ++ ", add a default action by matching the extension \".*\" in the action map sent to launcherPrompt"
|
spawnNoPatternMessage fileExt _ = spawn $ "xmessage No action specified for file extension " ++ fileExt ++ ", add a default action by matching the extension \".*\" in the action map sent to launcherPrompt"
|
||||||
|
|
||||||
{- $todo
|
{-
|
||||||
|
|
||||||
|
-- ideas for XMonad.Prompt running on mode XPMultipleModes
|
||||||
* Switch to mode by name of the prompt, 1. ':' at an empty(?) buffer, 2. autocomplete name in buffer should happen, 3. switch to mode with enter (cancel switch with C-g)
|
* Switch to mode by name of the prompt, 1. ':' at an empty(?) buffer, 2. autocomplete name in buffer should happen, 3. switch to mode with enter (cancel switch with C-g)
|
||||||
|
|
||||||
* Support for actions of type String -> X a
|
* Support for actions of type String -> X a
|
||||||
|
|
||||||
|
-- ideas for this module
|
||||||
|
|
||||||
* Hoogle mode: add a setting in the action to either go to documentation or to the source code (needs hoogle change?)
|
* Hoogle mode: add a setting in the action to either go to documentation or to the source code (needs hoogle change?)
|
||||||
|
|
||||||
* Hoogle mode: add setting to query hoogle at haskell.org instead (with &mode=json)
|
* Hoogle mode: add setting to query hoogle at haskell.org instead (with &mode=json)
|
||||||
|
Reference in New Issue
Block a user