mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-07-28 02:31:51 -07:00
use XPrompt in WorkspaceDir.
This commit is contained in:
59
DirectoryPrompt.hs
Normal file
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)
|
|
||||||
|
Reference in New Issue
Block a user