use XPrompt in WorkspaceDir.

This commit is contained in:
David Roundy 2007-08-14 19:11:03 +00:00
parent 709c2b8573
commit 002b15cb1f
3 changed files with 68 additions and 8 deletions

59
DirectoryPrompt.hs Normal file
View File

@ -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

View File

@ -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 ()

View File

@ -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)