diff --git a/CHANGELOG.md b/CHANGELOG.md index c945100..1de7b51 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Changed +- Prompt in collection context now includes the collection id [#15](https://github.com/jisantuc/stac-repl/pull/15) (@jisantuc) ## [0.1.1] - 2021-03-22 ### Fixed diff --git a/packages.dhall b/packages.dhall index 80c5b7b..a2c1847 100644 --- a/packages.dhall +++ b/packages.dhall @@ -105,7 +105,7 @@ in upstream ------------------------------- -} let upstream = - https://github.com/purescript/package-sets/releases/download/psc-0.14.0-20210318/packages.dhall sha256:98bbacd65191cef354ecbafa1610be13e183ee130491ab9c0ef6e3d606f781b5 + https://github.com/purescript/package-sets/releases/download/psc-0.14.0-20210409/packages.dhall sha256:e81c2f2ce790c0e0d79869d22f7a37d16caeb5bd81cfda71d46c58f6199fd33f in upstream with stac = diff --git a/spago.dhall b/spago.dhall index f2892d0..3098376 100644 --- a/spago.dhall +++ b/spago.dhall @@ -2,18 +2,31 @@ Welcome to a Spago project! You can edit this file as you like. -} -{ name = "my-project" +{ name = "stac-repl" , dependencies = [ "aff-promise" + , "aff" + , "affjax" , "ansi" + , "arrays" , "console" + , "control" , "effect" - , "monad-control" - , "node-process" + , "either" + , "foldable-traversable" + , "foreign-object" + , "lists" + , "maybe" , "node-readline" + , "ordered-collections" , "parsing" + , "prelude" , "psci-support" + , "refs" , "stac" + , "strings" + , "tuples" + , "unicode" ] , packages = ./packages.dhall , sources = [ "src/**/*.purs", "test/**/*.purs" ] diff --git a/src/Repl.purs b/src/Repl.purs index 4525998..5a37da7 100644 --- a/src/Repl.purs +++ b/src/Repl.purs @@ -31,6 +31,15 @@ import Types (Cmd(..), Context(..)) greenPrompt :: String -> String greenPrompt = withGraphics (foreground Green) +rootPrompt :: String +rootPrompt = greenPrompt $ "stac > " + +urlPrompt :: String -> String +urlPrompt s = greenPrompt $ "stac " <> s <> " > " + +collectionPrompt :: String -> String -> String +collectionPrompt collectionId s = greenPrompt $ "stac " <> s <> " " <> collectionId <> " > " + updateKnownCollections :: forall m. MonadEffect m => @@ -112,6 +121,9 @@ execute interface ctxRef cmd = case cmd of } ) ctxRef + let + newPrompt = collectionPrompt (toString s) url + setPrompt newPrompt interface RootContext { rootUrl: Nothing } -> log $ "Can't choose a collection without a root url" CollectionContext { rootUrl, knownCollections } -> do log $ "Set context to collection " <> toString s @@ -126,6 +138,9 @@ execute interface ctxRef cmd = case cmd of } ) ctxRef + let + newPrompt = collectionPrompt (toString s) rootUrl + setPrompt newPrompt interface prompt interface ViewCollection s -> do ctx <- read ctxRef @@ -142,17 +157,20 @@ execute interface ctxRef cmd = case cmd of <> printError err liftEffect $ prompt interface UnsetCollection -> do - modify_ - ( case _ of - RootContext rec -> RootContext rec - CollectionContext { rootUrl, knownCollections } -> - RootContext - { rootUrl: Just rootUrl, knownCollections - } - ) - ctxRef - log "Returning to root context" - prompt interface + ctx <- read ctxRef + validFor toRootUrl ctx \root -> do + modify_ + ( case _ of + RootContext rec -> RootContext rec + CollectionContext { rootUrl, knownCollections } -> + RootContext + { rootUrl: Just rootUrl, knownCollections + } + ) + ctxRef + log "Returning to root context" + setPrompt (urlPrompt root) interface + prompt interface SetRootUrl s -> do modify_ ( case _ of @@ -161,7 +179,7 @@ execute interface ctxRef cmd = case cmd of ) ctxRef let - newPrompt = greenPrompt $ "stac " <> s <> " > " + newPrompt = urlPrompt s setPrompt newPrompt interface prompt interface LocateCollection -> do @@ -287,6 +305,6 @@ replProgram :: Effect Interface replProgram = do ctxRef <- new $ RootContext { rootUrl: Nothing, knownCollections: mempty } interface <- createConsoleInterface $ getCompletions ctxRef - setPrompt (greenPrompt "stac > ") interface + setPrompt rootPrompt interface setLineHandler (lineHandler ctxRef interface) interface pure $ interface