1{- git-annex usage messages 2 - 3 - Copyright 2010-2015 Joey Hess <id@joeyh.name> 4 - 5 - Licensed under the GNU AGPL version 3 or higher. 6 -} 7 8module CmdLine.Usage where 9 10import Annex.Common 11import Types.Command 12 13usageMessage :: String -> String 14usageMessage s = "Usage: " ++ s 15 16usage :: String -> [Command] -> String 17usage header cmds = unlines $ usageMessage header : commandList cmds 18 19{- Commands listed by section, with brief usage and description. -} 20commandList :: [Command] -> [String] 21commandList cmds = concatMap go [minBound..] 22 where 23 go section 24 | null cs = [] 25 | otherwise = 26 [ "" 27 , descSection section ++ ":" 28 , "" 29 ] ++ map cmdline cs 30 where 31 cs = filter (\c -> cmdsection c == section) scmds 32 cmdline c = concat 33 [ cmdname c 34 , namepad (cmdname c) 35 , cmdparamdesc c 36 , descpad (cmdparamdesc c) 37 , cmddesc c 38 ] 39 pad n s = replicate (n - length s) ' ' 40 namepad = pad $ longest cmdname + 1 41 descpad = pad $ longest cmdparamdesc + 2 42 longest f = foldl max 0 $ map (length . f) cmds 43 scmds = sort cmds 44 45 46{- Descriptions of params used in usage messages. -} 47paramPaths :: String 48paramPaths = paramRepeating paramPath -- most often used 49paramPath :: String 50paramPath = "PATH" 51paramKey :: String 52paramKey = "KEY" 53paramDesc :: String 54paramDesc = "DESC" 55paramUrl :: String 56paramUrl = "URL" 57paramNumber :: String 58paramNumber = "NUMBER" 59paramNumRange :: String 60paramNumRange = "NUM|RANGE" 61paramRemote :: String 62paramRemote = "REMOTE" 63paramField :: String 64paramField = "FIELD" 65paramGlob :: String 66paramGlob = "GLOB" 67paramName :: String 68paramName = "NAME" 69paramValue :: String 70paramValue = "VALUE" 71paramUUID :: String 72paramUUID = "UUID" 73paramType :: String 74paramType = "TYPE" 75paramDate :: String 76paramDate = "DATE" 77paramTime :: String 78paramTime = "TIME" 79paramFormat :: String 80paramFormat = "FORMAT" 81paramFile :: String 82paramFile = "FILE" 83paramRef :: String 84paramRef = "REF" 85paramRefSpec :: String 86paramRefSpec = "REFSPEC" 87paramGroup :: String 88paramGroup = "GROUP" 89paramExpression :: String 90paramExpression = "EXPR" 91paramSize :: String 92paramSize = "SIZE" 93paramAddress :: String 94paramAddress = "ADDRESS" 95paramItem :: String 96paramItem = "ITEM" 97paramTreeish :: String 98paramTreeish = "TREEISH" 99paramParamValue :: String 100paramParamValue = "PARAM=VALUE" 101paramNothing :: String 102paramNothing = "" 103paramRepeating :: String -> String 104paramRepeating s = s ++ " ..." 105paramOptional :: String -> String 106paramOptional s = s 107paramPair :: String -> String -> String 108paramPair a b = a ++ " " ++ b 109paramOr :: String -> String -> String 110paramOr a b = a ++ " | " ++ b 111