on master help sign in
Make autocomplete a bit nicer
07c7666Evan Czaplicki
ui/terminal/src/Terminal/Args.hs+12−4
@@ -16,6 +16,7 @@ module Terminal.Args
16import Control.Monad (filterM)
16import Control.Monad (filterM)
17import qualified Data.Char as Char
17import qualified Data.Char as Char
18import qualified Data.List as List
18import qualified Data.List as List
19+import qualified Data.Maybe as Maybe
19import qualified System.Directory as Dir
20import qualified System.Directory as Dir
20import qualified System.Environment as Env
21import qualified System.Environment as Env
21import qualified System.Exit as Exit
22import qualified System.Exit as Exit
@@ -295,16 +296,23 @@ suggestFiles extensions string =
295 FP.splitFileName string
296 FP.splitFileName string
296 in
297 in
297 do content <- Dir.getDirectoryContents dir
298 do content <- Dir.getDirectoryContents dir
299+ Maybe.catMaybes
298− filterM (isPossibleSuggestion extensions start dir) content
300+ <$> traverse (isPossibleSuggestion extensions start dir) content
299
301
300
302
301−isPossibleSuggestion :: [String] -> String -> FilePath -> FilePath -> IO Bool
303+isPossibleSuggestion :: [String] -> String -> FilePath -> FilePath -> IO (Maybe FilePath)
302isPossibleSuggestion extensions start dir path =
304isPossibleSuggestion extensions start dir path =
303 if List.isPrefixOf start path then
305 if List.isPrefixOf start path then
304 do isDir <- Dir.doesDirectoryExist (dir </> path)
306 do isDir <- Dir.doesDirectoryExist (dir </> path)
307+ return $
308+ if isDir then
309+ Just (path ++ "/")
305− return (isDir || isOkayExtension path extensions)
310+ else if isOkayExtension path extensions then
311+ Just path
312+ else
313+ Nothing
306 else
314 else
307− return False
315+ return Nothing
308
316
309
317
310isOkayExtension :: FilePath -> [String] -> Bool
318isOkayExtension :: FilePath -> [String] -> Bool
ui/terminal/src/Terminal/Args/Chomp.hs+4−4
@@ -438,9 +438,9 @@ suggestFlag unknownFlags flags targetIndex =
438 [] ->
438 [] ->
439 Nothing
439 Nothing
440
440
441− Chunk index _ : otherUnknownFlags ->
441+ Chunk index string : otherUnknownFlags ->
442 if index == targetIndex then
442 if index == targetIndex then
443− Just (return (map ("--" ++) (getFlagNames flags [])))
443+ Just (return (filter (List.isPrefixOf string) (getFlagNames flags [])))
444 else
444 else
445 suggestFlag otherUnknownFlags flags targetIndex
445 suggestFlag otherUnknownFlags flags targetIndex
446
446
@@ -464,10 +464,10 @@ getFlagName :: Flag a -> String
464getFlagName flag =
464getFlagName flag =
465 case flag of
465 case flag of
466 Flag name _ _ ->
466 Flag name _ _ ->
467− name
467+ "--" ++ name ++ "="
468
468
469 OnOff name _ ->
469 OnOff name _ ->
470− name
470+ "--" ++ name
471
471
472
472
473
473