Skip to content

Latest commit

 

History

History
79 lines (54 loc) · 6.58 KB

File metadata and controls

79 lines (54 loc) · 6.58 KB
description icon
May I read what you've written, please?
book-open

Input Reader

This functionality is an important part of any interactive console application, because it gives users a chance to input what they want to write to the console.

In case you want to listen to mouse events, you can consult the below page:

{% content-ref url="pointer-events.md" %} pointer-events.md {% endcontent-ref %}

In case you want to use something other than the reader, you can consult the other input tools defined in the below page:

{% content-ref url="other-input/" %} other-input {% endcontent-ref %}

You can easily use this feature in any interactive console application that uses Terminaux. Just use the Terminaux.Reader.TermReader class that contains the Read() functions and their overloaded versions.

{% hint style="info" %} The reader not only provides the static text version for input prompts, but also the dynamic text version. Just create a simple function delegate that generates a string as the first argument, like this:

string input = TermReader.Read(() => $"{DateTime.Now} [{TermReaderState.CurrentState.CurrentTextPos}]\n> ", "Hello World!", false, false, false);

{% endhint %}

{% hint style="info" %} Please note that they are interruptible by default. If you want the input to be non-interruptible, you can set the interruptible argument to false. {% endhint %}

Each one of these functions creates a reader state, TermReaderState, that contains essential information about the current reader state, including, but not limited to:

  • Current text
  • Input prompt text
  • Current text position
  • Kill buffer
  • Reader settings

{% hint style="info" %} If you're making your own mod in Nitrocid KS, it's best to use its own Input class instead of Terminaux's TermReader, as the class there actually deals with the screensaver in most circumstances. {% endhint %}

Any key will append the selected characters to the current text input, and RETURN will accept the input. The below keybindings are available:

KeybindingAction
ENTERAccepts input
Ctrl+CCancels reading (if TreatCtrlCAsInput is enabled)
Ctrl+A / HOMEBeginning of line
Ctrl+E / ENDEnd of line
Ctrl+B / Backward one character
Ctrl+F / Forward one character
BACKSPACERemove one character from the left
UP ARROWGet the older input
DOWN ARROWGet the newer input
DELETERemove one character in current position
ALT+BOne word backward
ALT+FOne word forward
TABNext auto-completion entry (if there is one)
Insert four spaces (if no autocompletions)
SHIFT+TABPrevious auto-completion entry
CTRL+UCut to the start of the line
CTRL+KCut to the end of the line
CTRL+WCut to the end of the previous word
ALT+DCut to the end of the next word
CTRL+YYank the cut content
Alt+LMake word lowercase
Alt+UMake word UPPERCASE
Ctrl+Alt+LMake input lowercase
Ctrl+Alt+UMake input UPPERCASE
Alt+CMake character uppercase and move to the end of word
Alt+VMake character lowercase and move to the end of word
Alt+SShows all suggestions in the style akin to the Bourne Again SHell (bash)
Alt+RRefreshes the prompt, the text input, and the current cursor position.
InsertText append mode (Insert or append)
CTRL+LClears the screen and refreshes the prompt.
ALT+\Cut the whitespaces before and after the character.
CTRL+TSubstitutes two characters
ALT+TSubstitutes two words
ALT+SHIFT+#Makes your current input text a comment (visual only, but ignores your text on submit)
ALT+TAB / CTRL+IForces the tab character to be written. Writes as spaces.
ALT+SHIFT+CTemporarily conceals or reveals the whole input in normal prompts.

{% hint style="warning" %} Warning: Some of the keys conflict with the terminal emulator and/or the operating system keybindings. {% endhint %}

For more information about custom key bindings, go to the below page.

{% content-ref url="custom-bindings.md" %} custom-bindings.md {% endcontent-ref %}

You can access the global reader settings by referencing the GlobalReaderSettings found in the TermReader class.

History tools

You can now set the history entry list with your array of history entries or clear the history list using the following functions:

  • SetHistory(List<string> History)
    • Sets the history to the chosen history list
  • ClearHistory()
    • Clears all history entries

State tools

You can also check to see if the console reader facility is busy getting input or not. The property, Busy, indicates this by returning true if there is input to be entered by the user.

{% hint style="info" %} If you want to wait for user input to finish, you can call the WaitForInput() function in the TermReaderTools class. {% endhint %}