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

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

@@ -28,6 +28,7 @@ import XMonadContrib.Combo ()
import XMonadContrib.CopyWindow () import XMonadContrib.CopyWindow ()
import XMonadContrib.Decoration () import XMonadContrib.Decoration ()
import XMonadContrib.DeManage () import XMonadContrib.DeManage ()
import XMonadContrib.DirectoryPrompt ()
import XMonadContrib.Dmenu () import XMonadContrib.Dmenu ()
import XMonadContrib.DwmPromote () import XMonadContrib.DwmPromote ()
import XMonadContrib.DynamicLog () import XMonadContrib.DynamicLog ()

@@ -25,13 +25,15 @@ module XMonadContrib.WorkspaceDir (
changeDir changeDir
) where ) where
import System.Directory ( setCurrentDirectory, getCurrentDirectory ) import System.Directory ( setCurrentDirectory )
import Data.List ( nub )
import XMonad import XMonad
import Operations ( sendMessage ) 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.LayoutHelpers ( layoutModify )
import XMonadContrib.XPrompt ( defaultXPConfig )
-- $usage -- $usage
-- You can use this module with the following in your Config.hs file: -- You can use this module with the following in your Config.hs file:
@@ -42,7 +44,7 @@ import XMonadContrib.LayoutHelpers ( layoutModify )
-- --
-- In keybindings: -- In keybindings:
-- --
-- > , ((modMask .|. shiftMask, xK_x ), changeDir ["~","/tmp"]) -- > , ((modMask .|. shiftMask, xK_x ), changeDir defaultXPConfig)
data Chdir = Chdir String deriving ( Typeable ) 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) scd x = do x' <- io (runProcessWithInput "bash" [] ("echo -n " ++ x) `catch` \_ -> return x)
catchIO $ setCurrentDirectory x' catchIO $ setCurrentDirectory x'
changeDir :: [String] -> X () changeDir :: XPConfig -> X ()
changeDir dirs = do thisd <- io getCurrentDirectory changeDir c = directoryPrompt c "Set working directory: " (sendMessage . Chdir)
dir <- dmenu (nub (thisd:dirs))
sendMessage (Chdir dir)