swarm-0.5.0.0: 2D resource gathering game with programmable robots
LicenseBSD-3-Clause
Safe HaskellSafe-Inferred
LanguageHaskell2010

Swarm.TUI.Model.Repl

Description

 
Synopsis

REPL

data REPLHistItem Source #

An item in the REPL history.

Constructors

REPLEntry Text

Something entered by the user.

REPLOutput Text

A response printed by the system.

REPLError Text

An error printed by the system.

replItemText :: REPLHistItem -> Text Source #

Get the text of REPL input/output.

isREPLEntry :: REPLHistItem -> Bool Source #

Useful helper function to filter out REPL output.

getREPLEntry :: REPLHistItem -> Maybe Text Source #

Useful helper function to only get user input text.

data REPLHistory Source #

History of the REPL with indices (0 is first entry) to the current line and to the first entry since loading saved history. We also (ab)use the length of the REPL as the index of current input line, since that number is one past the index of last entry.

Instances

Instances details
Show REPLHistory Source # 
Instance details

Defined in Swarm.TUI.Model.Repl

replIndex :: Lens' REPLHistory Int Source #

The current index in the REPL history (if the user is going back through the history using up/down keys).

replLength :: REPLHistory -> Int Source #

Current number lines of the REPL history - (ab)used as index of input buffer.

replHasExecutedManualInput :: Lens' REPLHistory Bool Source #

Keep track of whether the user has explicitly executed commands at the REPL prompt, thus making them ineligible for code size scoring.

Note: Instead of adding a dedicated field to the REPLHistory record, an early attempt entailed checking for:

_replIndex > _replStart

However, executing an initial script causes a REPLOutput to be appended to the REPL history, which increments the replIndex, and thus makes the Index greater than the Start even though the player has not input commands directly into the REPL.

Therefore, a dedicated boolean is introduced into REPLHistory which simply latches True when the user has input a command.

An alternative is described in issue #974.

replSeq :: Lens' REPLHistory (Seq REPLHistItem) Source #

Sequence of REPL inputs and outputs, oldest entry is leftmost.

newREPLHistory :: [REPLHistItem] -> REPLHistory Source #

Create new REPL history (i.e. from loaded history file lines).

addREPLItem :: REPLHistItem -> REPLHistory -> REPLHistory Source #

Add new REPL input - the index must have been pointing one past the last element already, so we increment it to keep it that way.

restartREPLHistory :: REPLHistory -> REPLHistory Source #

Point the start of REPL history after current last line. See replStart.

getLatestREPLHistoryItems :: Int -> REPLHistory -> [REPLHistItem] Source #

Get the latest N items in history, starting with the oldest one.

This is used to show previous REPL lines in UI, so we need the items sorted in the order they were entered and will be drawn top to bottom.

getSessionREPLHistoryItems :: REPLHistory -> Seq REPLHistItem Source #

Get only the items from the REPL history that were entered during the current session.

data TimeDir Source #

Constructors

Newer 
Older 

Instances

Instances details
Show TimeDir Source # 
Instance details

Defined in Swarm.TUI.Model.Repl

Eq TimeDir Source # 
Instance details

Defined in Swarm.TUI.Model.Repl

Methods

(==) :: TimeDir -> TimeDir -> Bool #

(/=) :: TimeDir -> TimeDir -> Bool #

Ord TimeDir Source # 
Instance details

Defined in Swarm.TUI.Model.Repl

Prompt utils

data REPLPrompt Source #

This data type tells us how to interpret the text typed by the player at the prompt (which is stored in Editor).

Constructors

CmdPrompt [Text]

Interpret the prompt text as a regular command. The list is for potential completions, which we can cycle through by hitting Tab repeatedly

SearchPrompt REPLHistory

Interpret the prompt text as "search this text in history"

removeEntry :: Text -> REPLHistory -> REPLHistory Source #

Given some text, removes the REPLEntry within REPLHistory which is equal to that. This is used when the user enters in search mode and want to traverse the history. If a command has been used many times, the history will be populated with it causing the effect that search command always finds the same command.

REPL Panel Model

data ReplControlMode Source #

What is being done with user input to the REPL panel?

Constructors

Typing

The user is typing at the REPL.

Piloting

The user is driving the base using piloting mode.

Handling

A custom user key handler is processing user input.

replPromptType :: Lens' REPLState REPLPrompt Source #

The way we interpret text typed by the player in the REPL prompt.

replPromptEditor :: Lens' REPLState (Editor Text Name) Source #

The prompt where the user can type input at the REPL.

replPromptText :: Lens' REPLState Text Source #

Convenience lens to get text from editor and replace it with new one that has the provided text.

replValid :: Lens' REPLState Bool Source #

Whether the prompt text is a valid Term.

replLast :: Lens' REPLState Text Source #

The last thing the user has typed which isn't part of the history. This is used to restore the repl form after the user visited the history.

replType :: Lens' REPLState (Maybe Polytype) Source #

The type of the current REPL input which should be displayed to the user (if any).

replControlMode :: Lens' REPLState ReplControlMode Source #

The current REPL control mode, i.e. how user input to the REPL panel is being handled.

replHistory :: Lens' REPLState REPLHistory Source #

History of things the user has typed at the REPL, interleaved with outputs the system has generated.

Initialization

lastEntry :: Text -> REPLHistory -> Maybe Text Source #

Get the last REPLEntry in REPLHistory matching the given text