{- TODO - Add support for regular command line syntax config and/or env variable -} module DMenu ( -- * Overview -- $overview -- * Types DMenuT, MonadDMenu, ProcessError, -- * Running @dmenu@ run, -- ** Selecting a single item selectM, select, selectWithM, selectWith, -- ** Selecting multiple items filterM, filter, filterWithM, filterWith, -- * @dmenu@ Command Line Options Options(..), -- ** Lenses binaryPath, displayAtBottom, grabKeyboardBeforeStdin, caseInsensitive, spawnOnMonitor, numLines, prompt, font, normalBGColor, normalFGColor, selectedBGColor, selectedFGColor, printVersionAndExit, -- * @dmenu2@-specific Command Line Options Options2(..), -- ** Lenses displayNoItemsIfEmpty, filterMode, fuzzyMatching, tokenMatching, maskInputWithStar, ignoreStdin, spawnOnScreen, windowName, windowClass, windowOpacity, windowDimOpacity, windowDimColor, heightInPixels, underlineHeightInPixels, windowOffsetX, windowOffsetY, width, underlineColor, historyFile, -- * Color Color(..), -- * Reexports from @lens@ (.=), -- * Configuration File -- $configFile ) where import Control.Lens import DMenu.Color import DMenu.Options import DMenu.Run import Prelude hiding (filter) {- $overview This module provides complete bindings to the and command-line tools. <> The @dmenu@ command line tool 1. takes command line 'Options' and reads a list of strings from @stdin@, 2. presents the list in a special overlay window, in which the user can select from the list via fuzzy matching, and 3. prints the selected string to @stdout@ or fails with exit code @1@ if the user hit the @ESC@ key. Typical uses of @dmenu@ are for example 1. as a program launcher by piping the program names from @PATH@ into @dmenu@ and executing the selected program. 2. as an interface for killing programs by piping process information from @ps aux@ into @dmenu@, and running @kill -9@ on the selected process id. 3. as an interface for mounting devices by piping the device files from @\/dev\/@ into @dmenu@, and running @pmount@ on the selected device (shown in the image above). @dmenu2@ is a fork of @dmenu@, which provides additional options, e.g. selecting multiple items at once. Ontop of the functionality of @dmenu@ and @dmenu2@, this library supports a configuration file for specifying default command line options for @dmenu@. See the last section for more on the configuration file. The simplest way to run @dmenu@ is with the 'select' function. Note for @stack@ users: When running programs using this library via @stack exec@, the program may fail to find @dmenu@ in the @PATH@. This problem can be solved by running the program directly without @stack@, or by temporarily using an absolute path for @dmenu@ in the '_binaryPath' option. -} {- $configFile The default @Options@ used by 'run', 'select', etc. can be specified in the @~/.haskell-dmenu@ file. The following shows an example @~/.haskell-dmenu@ file: > numLines 15 > font FiraMono:size=11 > caseInsensitive True > normalBGColor RGBColorF 0.02 0.02 0.02 The configuration file contains one line per option. Each line consists of an option name and a value for the option. The option names are identical to the corresponding lens names. The values are read with @Prelude.read@ except for @Strings@ which don't need double quotes. -}