From 450717ef44ff3ff06c0bc228acd1547e33b72d36 Mon Sep 17 00:00:00 2001 From: David Roundy Date: Tue, 14 Aug 2007 21:11:03 +0200 Subject: use XPrompt in WorkspaceDir. darcs-hash:20070814191103-72aca-dfa6265cb6f55918e7f66f856fb7e60ac22b42cd.gz --- DirectoryPrompt.hs | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ MetaModule.hs | 1 + WorkspaceDir.hs | 16 +++++++-------- 3 files changed, 68 insertions(+), 8 deletions(-) create mode 100644 DirectoryPrompt.hs diff --git a/DirectoryPrompt.hs b/DirectoryPrompt.hs new file mode 100644 index 0000000..954180c --- /dev/null +++ b/DirectoryPrompt.hs @@ -0,0 +1,59 @@ +----------------------------------------------------------------------------- +-- | +-- Module : XMonadContrib.DirectoryPrompt +-- Copyright : (C) 2007 Andrea Rossato, David Roundy +-- License : BSD3 +-- +-- Maintainer : droundy@darcs.net +-- Stability : unstable +-- Portability : unportable +-- +-- A directory prompt for XMonad +-- +----------------------------------------------------------------------------- + +module XMonadContrib.DirectoryPrompt ( + -- * Usage + -- $usage + directoryPrompt + ) where + +import XMonad +import XMonadContrib.XPrompt +import XMonadContrib.Dmenu ( runProcessWithInput ) + +-- $usage +-- +-- 1. In xmonad.cabal change: +-- +-- > build-depends: base>=2.0, X11>=1.2.1, X11-extras>=0.2, mtl>=1.0, unix>=1.0 +-- +-- to +-- +-- > build-depends: base>=2.0, X11>=1.2.1, X11-extras>=0.2, mtl>=1.0, unix>=1.0, readline >= 1.0 +-- +-- 2. In Config.hs add: +-- +-- > import XMonadContrib.XPrompt +-- > import XMonadContrib.ShellPrompt +-- +-- 3. In your keybindings add something like: +-- +-- > , ((modMask .|. controlMask, xK_x), shellPrompt defaultXPConfig) +-- + +data Dir = Dir String + +instance XPrompt Dir where + showXPrompt (Dir x) = x + +directoryPrompt :: XPConfig -> String -> (String -> X ()) -> X () +directoryPrompt c prom job = mkXPrompt (Dir prom) c getDirCompl job + +getDirCompl :: String -> IO [String] +getDirCompl s = (filter notboring . lines) `fmap` + runProcessWithInput "/bin/bash" [] ("compgen -A directory " ++ s ++ "\n") + +notboring ('.':'.':_) = True +notboring ('.':_) = False +notboring _ = True diff --git a/MetaModule.hs b/MetaModule.hs index 11ef9af..e782748 100644 --- a/MetaModule.hs +++ b/MetaModule.hs @@ -28,6 +28,7 @@ import XMonadContrib.Combo () import XMonadContrib.CopyWindow () import XMonadContrib.Decoration () import XMonadContrib.DeManage () +import XMonadContrib.DirectoryPrompt () import XMonadContrib.Dmenu () import XMonadContrib.DwmPromote () import XMonadContrib.DynamicLog () diff --git a/WorkspaceDir.hs b/WorkspaceDir.hs index 6877ea1..290a675 100644 --- a/WorkspaceDir.hs +++ b/WorkspaceDir.hs @@ -25,13 +25,15 @@ module XMonadContrib.WorkspaceDir ( changeDir ) where -import System.Directory ( setCurrentDirectory, getCurrentDirectory ) -import Data.List ( nub ) +import System.Directory ( setCurrentDirectory ) import XMonad import Operations ( sendMessage ) -import XMonadContrib.Dmenu ( dmenu, runProcessWithInput ) +import XMonadContrib.Dmenu ( runProcessWithInput ) +import XMonadContrib.XPrompt ( XPConfig ) +import XMonadContrib.DirectoryPrompt ( directoryPrompt ) import XMonadContrib.LayoutHelpers ( layoutModify ) +import XMonadContrib.XPrompt ( defaultXPConfig ) -- $usage -- You can use this module with the following in your Config.hs file: @@ -42,7 +44,7 @@ import XMonadContrib.LayoutHelpers ( layoutModify ) -- -- In keybindings: -- --- > , ((modMask .|. shiftMask, xK_x ), changeDir ["~","/tmp"]) +-- > , ((modMask .|. shiftMask, xK_x ), changeDir defaultXPConfig) data Chdir = Chdir String deriving ( Typeable ) @@ -58,7 +60,5 @@ scd :: String -> X () scd x = do x' <- io (runProcessWithInput "bash" [] ("echo -n " ++ x) `catch` \_ -> return x) catchIO $ setCurrentDirectory x' -changeDir :: [String] -> X () -changeDir dirs = do thisd <- io getCurrentDirectory - dir <- dmenu (nub (thisd:dirs)) - sendMessage (Chdir dir) +changeDir :: XPConfig -> X () +changeDir c = directoryPrompt c "Set working directory: " (sendMessage . Chdir) -- cgit v1.2.3