prompt

package module
v0.0.0-...-6187f5f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 16, 2024 License: MIT Imports: 19 Imported by: 0

README

go-prompt

Go Report Card Software License GoDoc tests

This is a maintained fork of elk-language/go-prompt, which itself is a maintained fork of c-bata/go-prompt. It's a great library but it's been abandoned for quite a while. This project aims to continue its development.

I recommend using elk-language/go-prompt, as I am not prepared to commit to v1 API compatibility just yet, though I intend to avoid making breaking changes if I can.

The library has been rewritten in many aspects, fixing existing bugs and adding new essential functionality.

Most notable changes include:

  • Support for custom syntax highlighting with a lexer
  • Multiline editing
  • A scrolling buffer is used for displaying the current content which makes it possible to edit text of arbitrary length (only the visible part of the text is rendered)
  • Support for automatic indentation when pressing Enter and the input is incomplete or for executing the input when it is complete. This is determined by a custom callback function.

I highly encourage you to see the changelog which fully documents the changes that have been made.


A library for building powerful interactive prompts inspired by python-prompt-toolkit, making it easier to build cross-platform command line tools using Go.

package main

import (
	"fmt"
	"github.com/joeycumines/go-prompt"
	pstrings "github.com/joeycumines/go-prompt/strings"
)

func completer(d prompt.Document) ([]prompt.Suggest, pstrings.RuneNumber, pstrings.RuneNumber) {
	endIndex := d.CurrentRuneIndex()
	w := d.GetWordBeforeCursor()
	startIndex := endIndex - pstrings.RuneCount(w)

	s := []prompt.Suggest{
		{Text: "users", Description: "Store the username and age"},
		{Text: "articles", Description: "Store the article text posted by user"},
		{Text: "comments", Description: "Store the text commented to articles"},
	}
	return prompt.FilterHasPrefix(s, w, true), startIndex, endIndex
}

func main() {
	fmt.Println("Please select table.")
	t := prompt.Input(
		prompt.WithPrefix("> "),
		prompt.WithCompleter(completer),
	)
	fmt.Println("You selected " + t)
}

Features

Automatic indentation with a custom callback

automatic indentation

Multiline editing with scrolling

multiline editing

Custom syntax highlighting

syntax highlighting

Powerful auto-completion

autocompletion

(This is a GIF animation of kube-prompt.)

Flexible options

go-prompt provides many options. Please check option section of GoDoc for more details.

options

Keyboard Shortcuts

Emacs-like keyboard shortcuts are available by default (these also are the default shortcuts in Bash shell). You can customize and expand these shortcuts.

keyboard shortcuts

Key Binding Description
Ctrl + A Go to the beginning of the line (Home)
Ctrl + E Go to the end of the line (End)
Ctrl + P Previous command (Up arrow)
Ctrl + N Next command (Down arrow)
Ctrl + F Forward one character
Ctrl + B Backward one character
Ctrl + D Delete character under the cursor
Ctrl + H Delete character before the cursor (Backspace)
Ctrl + W Cut the word before the cursor to the clipboard
Ctrl + K Cut the line after the cursor to the clipboard
Ctrl + U Cut the line before the cursor to the clipboard
Ctrl + L Clear the screen
History

You can use Up arrow and Down arrow to walk through the history of commands executed.

History

Multiple platform support

We have confirmed go-prompt works fine in the following terminals:

  • iTerm2 (macOS)
  • Terminal.app (macOS)
  • Command Prompt (Windows)
  • gnome-terminal (Ubuntu)

License

This software is licensed under the MIT license, see LICENSE for more information.

Original Author

Masashi Shibata

Documentation

Index

Examples

Constants

View Source
const (
	DefColCount = 80 // Default column count of the terminal
	DefRowCount = 25 // Default row count of the terminal
)
View Source
const DefaultIndentSize = 2
View Source
const IndentUnit = ' '
View Source
const IndentUnitString = string(IndentUnit)

Variables

View Source
var ASCIISequences = []*ASCIICode{}/* 117 elements not displayed */

ASCIISequences holds mappings of the key and byte array.

View Source
var (
	// NewStandardOutputWriter returns Writer object to write to stdout.
	// This generates VT100 escape sequences because almost terminal emulators
	// in POSIX OS built on top of a VT100 specification.
	// Deprecated: Please use NewStdoutWriter
	NewStandardOutputWriter = NewStdoutWriter
)

Functions

func DefaultExecuteOnEnterCallback

func DefaultExecuteOnEnterCallback(p *Prompt, indentSize int) (int, bool)

func DefaultPrefixCallback

func DefaultPrefixCallback() string

func DeleteBeforeChar

func DeleteBeforeChar(p *Prompt) bool

DeleteBeforeChar Go to Backspace

func DeleteChar

func DeleteChar(p *Prompt) bool

DeleteChar Delete character under the cursor

func DeleteWordBeforeCursor

func DeleteWordBeforeCursor(p *Prompt) bool

func GoLeftChar

func GoLeftChar(p *Prompt) bool

GoLeftChar Backward one character

func GoLineBeginning

func GoLineBeginning(p *Prompt) bool

GoLineBeginning Go to the beginning of the line

func GoLineEnd

func GoLineEnd(p *Prompt) bool

GoLineEnd Go to the End of the line

func GoRightChar

func GoRightChar(p *Prompt) bool

GoRightChar Forward one character

func Input

func Input(opts ...Option) string

Input get the input data from the user and return it.

func NoopExecutor

func NoopExecutor(in string)

Types

type ASCIICode

type ASCIICode struct {
	Key       Key
	ASCIICode []byte
}

ASCIICode is the type contains Key and it's ascii byte array.

type ASCIICodeBind

type ASCIICodeBind struct {
	ASCIICode []byte
	Fn        KeyBindFunc
}

ASCIICodeBind represents which []byte should do what operation

type Buffer

type Buffer struct {
	// contains filtered or unexported fields
}

Buffer emulates the console buffer.

func NewBuffer

func NewBuffer() (b *Buffer)

NewBuffer is constructor of Buffer struct.

func (*Buffer) CursorDown

func (b *Buffer) CursorDown(count int, columns istrings.Width, rows int) bool

CursorDown move cursor to the next line. (for multi-line edit). Returns true when the view should be rerendered.

func (*Buffer) CursorLeft

func (b *Buffer) CursorLeft(count istrings.GraphemeNumber, columns istrings.Width, rows int) bool

Move to the left on the current line by the given amount of graphemes. Returns true when the view should be rerendered.

func (*Buffer) CursorLeftRunes

func (b *Buffer) CursorLeftRunes(count istrings.RuneNumber, columns istrings.Width, rows int) bool

Move to the left on the current line by the given amount of runes. Returns true when the view should be rerendered.

func (*Buffer) CursorRight

func (b *Buffer) CursorRight(count istrings.GraphemeNumber, columns istrings.Width, rows int) bool

Move to the right on the current line by the given amount of graphemes. Returns true when the view should be rerendered.

func (*Buffer) CursorRightRunes

func (b *Buffer) CursorRightRunes(count istrings.RuneNumber, columns istrings.Width, rows int) bool

Move to the right on the current line by the given amount of runes. Returns true when the view should be rerendered.

func (*Buffer) CursorUp

func (b *Buffer) CursorUp(count int, columns istrings.Width, rows int) bool

CursorUp move cursor to the previous line. (for multi-line edit). Returns true when the view should be rerendered.

func (*Buffer) Delete

func (b *Buffer) Delete(count istrings.GraphemeNumber, col istrings.Width, row int) string

Deletes the specified number of graphemes and returns the deleted text.

func (*Buffer) DeleteBeforeCursor

func (b *Buffer) DeleteBeforeCursor(count istrings.GraphemeNumber, columns istrings.Width, rows int) string

Deletes the specified number of graphemes before the cursor and returns the deleted text.

func (*Buffer) DeleteBeforeCursorRunes

func (b *Buffer) DeleteBeforeCursorRunes(count istrings.RuneNumber, columns istrings.Width, rows int) (deleted string)

Deletes the specified number of runes before the cursor and returns the deleted text.

func (*Buffer) DeleteRunes

func (b *Buffer) DeleteRunes(count istrings.RuneNumber, col istrings.Width, row int) string

Deletes the specified number of runes and returns the deleted text.

func (*Buffer) DisplayCursorPosition

func (b *Buffer) DisplayCursorPosition(columns istrings.Width) Position

DisplayCursorPosition returns the cursor position on rendered text on terminal emulators. So if Document is "日本(cursor)語", DisplayedCursorPosition returns 4 because '日' and '本' are double width characters.

func (*Buffer) Document

func (b *Buffer) Document() (d *Document)

Document method to return document instance from the current text and cursor position.

func (*Buffer) InsertText

func (b *Buffer) InsertText(text string, overwrite bool)

Insert string into the buffer without moving the cursor.

func (*Buffer) InsertTextMoveCursor

func (b *Buffer) InsertTextMoveCursor(text string, columns istrings.Width, rows int, overwrite bool)

Insert string into the buffer and move the cursor.

func (*Buffer) JoinNextLine

func (b *Buffer) JoinNextLine(separator string, col istrings.Width, row int)

JoinNextLine joins the next line to the current one by deleting the line ending after the current line.

func (*Buffer) NewLine

func (b *Buffer) NewLine(columns istrings.Width, rows int, copyMargin bool)

NewLine means CR.

func (*Buffer) SwapCharactersBeforeCursor

func (b *Buffer) SwapCharactersBeforeCursor(col istrings.Width, row int)

SwapCharactersBeforeCursor swaps the last two characters before the cursor.

func (*Buffer) Text

func (b *Buffer) Text() string

Text returns string of the current line.

type Color

type Color int

Color represents color on terminal.

const (
	// DefaultColor represents a default color.
	DefaultColor Color = iota

	// Black represents a black.
	Black
	// DarkRed represents a dark red.
	DarkRed
	// DarkGreen represents a dark green.
	DarkGreen
	// Brown represents a brown.
	Brown
	// DarkBlue represents a dark blue.
	DarkBlue
	// Purple represents a purple.
	Purple
	// Cyan represents a cyan.
	Cyan
	// LightGray represents a light gray.
	LightGray

	// DarkGray represents a dark gray.
	DarkGray
	// Red represents a red.
	Red
	// Green represents a green.
	Green
	// Yellow represents a yellow.
	Yellow
	// Blue represents a blue.
	Blue
	// Fuchsia represents a fuchsia.
	Fuchsia
	// Turquoise represents a turquoise.
	Turquoise
	// White represents a white.
	White
)

type Completer

type Completer func(Document) (suggestions []Suggest, startChar, endChar istrings.RuneNumber)

Completer is a function that returns a slice of suggestions for the given Document.

startChar and endChar represent the indices of the first and last rune of the text that the suggestions were generated for and that should be replaced by the selected suggestion.

type CompletionManager

type CompletionManager struct {
	// contains filtered or unexported fields
}

CompletionManager manages which suggestion is now selected.

func NewCompletionManager

func NewCompletionManager(max uint16, opts ...CompletionManagerOption) *CompletionManager

NewCompletionManager returns an initialized CompletionManager object.

func (*CompletionManager) Completing

func (c *CompletionManager) Completing() bool

Completing returns true when the CompletionManager selects something.

func (*CompletionManager) GetSelectedSuggestion

func (c *CompletionManager) GetSelectedSuggestion() (s Suggest, ok bool)

GetSelectedSuggestion returns the selected item.

func (*CompletionManager) GetSuggestions

func (c *CompletionManager) GetSuggestions() []Suggest

GetSuggestions returns the list of suggestion.

func (*CompletionManager) Next

func (c *CompletionManager) Next() int

Next to select the next suggestion item.

func (*CompletionManager) Previous

func (c *CompletionManager) Previous()

Select the previous suggestion item.

func (*CompletionManager) Reset

func (c *CompletionManager) Reset()

Unselect the currently selected suggestion.

func (*CompletionManager) Update

func (c *CompletionManager) Update(in Document)

Update the suggestions.

type CompletionManagerOption

type CompletionManagerOption func(*CompletionManager)

Constructor option for CompletionManager.

func CompletionManagerWithCompleter

func CompletionManagerWithCompleter(completer Completer) CompletionManagerOption

Set a custom completer.

type DisplayAttribute

type DisplayAttribute int

DisplayAttribute represents display attributes like Blinking, Bold, Italic and so on.

const (
	// DisplayReset reset all display attributes.
	DisplayReset DisplayAttribute = iota
	// DisplayBold set bold or increases intensity.
	DisplayBold
	// DisplayLowIntensity decreases intensity. Not widely supported.
	DisplayLowIntensity
	// DisplayItalic set italic. Not widely supported.
	DisplayItalic
	// DisplayUnderline set underline
	DisplayUnderline
	// DisplayBlink set blink (less than 150 per minute).
	DisplayBlink
	// DisplayRapidBlink set blink (more than 150 per minute). Not widely supported.
	DisplayRapidBlink
	// DisplayReverse swap foreground and background colors.
	DisplayReverse
	// DisplayInvisible set invisible.  Not widely supported.
	DisplayInvisible
	// DisplayCrossedOut set characters legible, but marked for deletion. Not widely supported.
	DisplayCrossedOut
	// DisplayDefaultFont set primary(default) font
	DisplayDefaultFont
)

type Document

type Document struct {
	Text string
	// contains filtered or unexported fields
}

Document has text displayed in terminal and cursor position.

func NewDocument

func NewDocument() *Document

NewDocument return the new empty document.

func (*Document) CurrentLine

func (d *Document) CurrentLine() string

CurrentLine return the text on the line where the cursor is. (when the input consists of just one line, it equals `text`.

Example
d := &Document{
	Text: `Hello! my name is c-bata.
This is a example of Document component.
This component has texts displayed in terminal and cursor position.
`,
	cursorPosition: istrings.RuneCountInString(`Hello! my name is c-bata.
This is a exam`),
}
fmt.Println(d.CurrentLine())
Output:

This is a example of Document component.

func (*Document) CurrentLineAfterCursor

func (d *Document) CurrentLineAfterCursor() string

CurrentLineAfterCursor returns the text from the cursor until the end of the line.

Example
d := &Document{
	Text: `Hello! my name is c-bata.
This is a example of Document component.
This component has texts displayed in terminal and cursor position.
`,
	cursorPosition: istrings.RuneCountInString(`Hello! my name is c-bata.
This is a exam`),
}
fmt.Println(d.CurrentLineAfterCursor())
Output:

ple of Document component.

func (*Document) CurrentLineBeforeCursor

func (d *Document) CurrentLineBeforeCursor() string

CurrentLineBeforeCursor returns the text from the start of the line until the cursor.

Example
d := &Document{
	Text: `Hello! my name is c-bata.
This is a example of Document component.
This component has texts displayed in terminal and cursor position.
`,
	cursorPosition: istrings.RuneCountInString(`Hello! my name is c-bata.
This is a exam`),
}
fmt.Println(d.CurrentLineBeforeCursor())
Output:

This is a exam

func (*Document) CurrentLineIndentLevel

func (d *Document) CurrentLineIndentLevel(indentSize int) int

Returns the indentation level of the current line the cursor is on.

func (*Document) CurrentLineIndentSpaces

func (d *Document) CurrentLineIndentSpaces() int

Returns the amount of spaces that the current line the cursor is on is indented with.

func (*Document) CurrentRuneIndex

func (d *Document) CurrentRuneIndex() istrings.RuneNumber

Returns the index of the rune that's under the cursor.

func (*Document) CursorPositionCol

func (d *Document) CursorPositionCol() (col istrings.Width)

CursorPositionCol returns the current column. (0-based.)

Example
d := &Document{
	Text: `Hello! my name is c-bata.
This is a example of Document component.
This component has texts displayed in terminal and cursor position.
`,
	cursorPosition: istrings.RuneCountInString(`Hello! my name is c-bata.
This is a exam`),
}
fmt.Println("CursorPositionCol", d.CursorPositionCol())
Output:

CursorPositionCol 14

func (*Document) CursorPositionRow

func (d *Document) CursorPositionRow() (row istrings.RuneNumber)

CursorPositionRow returns the current row. (0-based.)

Example
d := &Document{
	Text: `Hello! my name is c-bata.
This is a example of Document component.
This component has texts displayed in terminal and cursor position.
`,
	cursorPosition: istrings.RuneCountInString(`Hello! my name is c-bata.
This is a exam`),
}
fmt.Println("CursorPositionRow", d.CursorPositionRow())
Output:

CursorPositionRow 1

func (*Document) DisplayCursorPosition

func (d *Document) DisplayCursorPosition(columns istrings.Width) Position

DisplayCursorPosition returns the cursor position on rendered text on terminal emulators. So if Document is "日本(cursor)語", DisplayedCursorPosition returns 4 because '日' and '本' are double width characters.

Example
d := &Document{
	Text:           `Hello! my name is c-bata.`,
	cursorPosition: istrings.RuneCountInString(`Hello`),
}
fmt.Println("DisplayCursorPosition", d.DisplayCursorPosition(50))
Output:

DisplayCursorPosition {5 0}
Example (WithJapanese)
d := &Document{
	Text:           `こんにちは、芝田 将です。`,
	cursorPosition: 3,
}
fmt.Println("DisplayCursorPosition", d.DisplayCursorPosition(30))
Output:

DisplayCursorPosition {6 0}

func (*Document) FindEndOfCurrentWord

func (d *Document) FindEndOfCurrentWord() istrings.ByteNumber

FindEndOfCurrentWord returns a byte index relative to the cursor position. pointing to the end of the current word. Return 0 if nothing was found.

func (*Document) FindEndOfCurrentWordUntilSeparator

func (d *Document) FindEndOfCurrentWordUntilSeparator(sep string) istrings.ByteNumber

FindEndOfCurrentWordUntilSeparator is almost the same as FindEndOfCurrentWord. But this can specify Separator. Return 0 if nothing was found.

func (*Document) FindEndOfCurrentWordUntilSeparatorIgnoreNextToCursor

func (d *Document) FindEndOfCurrentWordUntilSeparatorIgnoreNextToCursor(sep string) istrings.ByteNumber

FindEndOfCurrentWordUntilSeparatorIgnoreNextToCursor is almost the same as FindEndOfCurrentWordWithSpace. But this can specify Separator. Return 0 if nothing was found.

func (*Document) FindEndOfCurrentWordWithSpace

func (d *Document) FindEndOfCurrentWordWithSpace() istrings.ByteNumber

FindEndOfCurrentWordWithSpace is almost the same as FindEndOfCurrentWord. The only difference is to ignore contiguous spaces.

func (*Document) FindRuneNumberUntilEndOfCurrentWord

func (d *Document) FindRuneNumberUntilEndOfCurrentWord() istrings.RuneNumber

Returns the number of runes of the text after the cursor until the end of the current word.

func (*Document) FindRuneNumberUntilStartOfPreviousWord

func (d *Document) FindRuneNumberUntilStartOfPreviousWord() istrings.RuneNumber

Returns the rune count of the text before the cursor until the start of the previous word.

func (*Document) FindStartOfFirstWordOfLine

func (d *Document) FindStartOfFirstWordOfLine() istrings.RuneNumber

GetStartOfLinePosition returns relative position for the start of this line.

func (*Document) FindStartOfPreviousWord

func (d *Document) FindStartOfPreviousWord() istrings.ByteNumber

FindStartOfPreviousWord returns an index relative to the cursor position pointing to the start of the previous word. Return 0 if nothing was found.

func (*Document) FindStartOfPreviousWordUntilSeparator

func (d *Document) FindStartOfPreviousWordUntilSeparator(sep string) istrings.ByteNumber

FindStartOfPreviousWordUntilSeparator is almost the same as FindStartOfPreviousWord. But this can specify Separator. Return 0 if nothing was found.

func (*Document) FindStartOfPreviousWordUntilSeparatorIgnoreNextToCursor

func (d *Document) FindStartOfPreviousWordUntilSeparatorIgnoreNextToCursor(sep string) istrings.ByteNumber

FindStartOfPreviousWordUntilSeparatorIgnoreNextToCursor is almost the same as FindStartOfPreviousWordWithSpace. But this can specify Separator. Return 0 if nothing was found.

func (*Document) FindStartOfPreviousWordWithSpace

func (d *Document) FindStartOfPreviousWordWithSpace() istrings.ByteNumber

FindStartOfPreviousWordWithSpace is almost the same as FindStartOfPreviousWord. The only difference is to ignore contiguous spaces.

func (*Document) GetCharRelativeToCursor

func (d *Document) GetCharRelativeToCursor(offset istrings.RuneNumber) (r rune)

GetCharRelativeToCursor return character relative to cursor position, or empty string

func (*Document) GetCursorDownPosition

func (d *Document) GetCursorDownPosition(count int, preferredColumn istrings.Width) istrings.RuneNumber

GetCursorDownPosition return the relative cursor position (character index) where we would be if the user pressed the arrow-down button.

func (*Document) GetCursorLeftPosition

func (d *Document) GetCursorLeftPosition(count istrings.GraphemeNumber) istrings.RuneNumber

Returns the amount of runes that the cursors should be moved by. The `count` argument tells this function by how many graphemes (visible characters) the cursor should be moved (to the left).

func (*Document) GetCursorLeftPositionRunes

func (d *Document) GetCursorLeftPositionRunes(count istrings.RuneNumber) istrings.RuneNumber

Returns the amount of runes that the cursors should be moved by. The `count` argument tells this function by how many runes the cursor should be moved (to the left).

func (*Document) GetCursorPosition

func (d *Document) GetCursorPosition(columns istrings.Width) Position

Get the current cursor position.

func (*Document) GetCursorRightPosition

func (d *Document) GetCursorRightPosition(count istrings.GraphemeNumber) istrings.RuneNumber

Returns the amount of runes that the cursors should be moved by. The `count` argument tells this function by how many graphemes (visible characters) the cursor should be moved (to the right).

func (*Document) GetCursorRightPositionRunes

func (d *Document) GetCursorRightPositionRunes(count istrings.RuneNumber) istrings.RuneNumber

Returns the amount of runes that the cursors should be moved by. The `count` argument tells this function by how many runes the cursor should be moved (to the right).

func (*Document) GetCursorUpPosition

func (d *Document) GetCursorUpPosition(count int, preferredColumn istrings.Width) istrings.RuneNumber

GetCursorUpPosition return the relative cursor position (character index) where we would be if the user pressed the arrow-up button.

func (*Document) GetEndOfLinePosition

func (d *Document) GetEndOfLinePosition() istrings.RuneNumber

GetEndOfLinePosition returns relative position for the end of this line.

func (*Document) GetEndOfTextPosition

func (d *Document) GetEndOfTextPosition(columns istrings.Width) Position

Get the position of the end of the current text.

func (*Document) GetStartOfLinePosition

func (d *Document) GetStartOfLinePosition() istrings.RuneNumber

GetStartOfLinePosition returns relative position for the start of this line.

func (*Document) GetWordAfterCursor

func (d *Document) GetWordAfterCursor() string

GetWordAfterCursor returns the word after the cursor. If we have whitespace after the cursor this returns an empty string.

Example
d := &Document{
	Text: `Hello! my name is c-bata.
This is a example of Document component.
`,
	cursorPosition: istrings.RuneCountInString(`Hello! my name is c-bata.
This is a exam`),
}
fmt.Println(d.GetWordAfterCursor())
Output:

ple

func (*Document) GetWordAfterCursorUntilSeparator

func (d *Document) GetWordAfterCursorUntilSeparator(sep string) string

GetWordAfterCursorUntilSeparator returns the text after the cursor until next separator.

Example
d := &Document{
	Text:           `hello,i am c-bata,thank you for using go-prompt`,
	cursorPosition: istrings.RuneCountInString(`hello,i a`),
}
fmt.Println(d.GetWordAfterCursorUntilSeparator(","))
Output:

m c-bata

func (*Document) GetWordAfterCursorUntilSeparatorIgnoreNextToCursor

func (d *Document) GetWordAfterCursorUntilSeparatorIgnoreNextToCursor(sep string) string

GetWordAfterCursorUntilSeparatorIgnoreNextToCursor returns the word after the cursor. Unlike GetWordAfterCursor, it returns string containing space

Example
d := &Document{
	Text:           `hello,i am c-bata,thank you for using go-prompt`,
	cursorPosition: istrings.RuneCountInString(`hello`),
}
fmt.Println(d.GetWordAfterCursorUntilSeparatorIgnoreNextToCursor(","))
Output:

,i am c-bata

func (*Document) GetWordAfterCursorWithSpace

func (d *Document) GetWordAfterCursorWithSpace() string

GetWordAfterCursorWithSpace returns the word after the cursor. Unlike GetWordAfterCursor, it returns string containing space

Example
d := &Document{
	Text: `Hello! my name is c-bata.
This is a example of Document component.
`,
	cursorPosition: istrings.RuneCountInString(`Hello! my name is c-bata.
This is a`),
}
fmt.Println(d.GetWordAfterCursorWithSpace())
Output:

 example

func (*Document) GetWordBeforeCursor

func (d *Document) GetWordBeforeCursor() string

GetWordBeforeCursor returns the word before the cursor. If we have whitespace before the cursor this returns an empty string.

Example
d := &Document{
	Text: `Hello! my name is c-bata.
This is a example of Document component.
`,
	cursorPosition: istrings.RuneCountInString(`Hello! my name is c-bata.
This is a exam`),
}
fmt.Println(d.GetWordBeforeCursor())
Output:

exam

func (*Document) GetWordBeforeCursorUntilSeparator

func (d *Document) GetWordBeforeCursorUntilSeparator(sep string) string

GetWordBeforeCursorUntilSeparator returns the text before the cursor until next separator.

Example
d := &Document{
	Text:           `hello,i am c-bata`,
	cursorPosition: istrings.RuneCountInString(`hello,i am c`),
}
fmt.Println(d.GetWordBeforeCursorUntilSeparator(","))
Output:

i am c

func (*Document) GetWordBeforeCursorUntilSeparatorIgnoreNextToCursor

func (d *Document) GetWordBeforeCursorUntilSeparatorIgnoreNextToCursor(sep string) string

GetWordBeforeCursorUntilSeparatorIgnoreNextToCursor returns the word before the cursor. Unlike GetWordBeforeCursor, it returns string containing space

Example
d := &Document{
	Text:           `hello,i am c-bata,thank you for using go-prompt`,
	cursorPosition: istrings.RuneCountInString(`hello,i am c-bata,`),
}
fmt.Println(d.GetWordBeforeCursorUntilSeparatorIgnoreNextToCursor(","))
Output:

i am c-bata,

func (*Document) GetWordBeforeCursorWithSpace

func (d *Document) GetWordBeforeCursorWithSpace() string

GetWordBeforeCursorWithSpace returns the word before the cursor. Unlike GetWordBeforeCursor, it returns string containing space

Example
d := &Document{
	Text: `Hello! my name is c-bata.
This is a example of Document component.
`,
	cursorPosition: istrings.RuneCountInString(`Hello! my name is c-bata.
This is a example `),
}
fmt.Println(d.GetWordBeforeCursorWithSpace())
Output:

example

func (*Document) IndentLevel

func (d *Document) IndentLevel(input string, indentSize int) int

Returns the indentation level of the last line of the given text.

func (*Document) IndentSpaces

func (d *Document) IndentSpaces(input string) int

Returns the amount of spaces that the last line of input of the given text is indented with.

func (*Document) LastKeyStroke

func (d *Document) LastKeyStroke() Key

LastKeyStroke return the last key pressed in this document.

func (*Document) LastLineIndentLevel

func (d *Document) LastLineIndentLevel(indentSize int) int

Returns the indentation level of the last line of input.

func (*Document) LastLineIndentSpaces

func (d *Document) LastLineIndentSpaces() int

Returns the amount of spaces that the last line of input is indented with.

func (*Document) LineCount

func (d *Document) LineCount() int

LineCount return the number of lines in this document. If the document ends with a trailing \n, that counts as the beginning of a new line.

func (*Document) Lines

func (d *Document) Lines() []string

Lines returns the array of all the lines.

func (*Document) OnLastLine

func (d *Document) OnLastLine() bool

OnLastLine returns true when we are at the last line.

func (*Document) PreviousLine

func (d *Document) PreviousLine() (s string, ok bool)

Return the text of the previous line (relative to the cursor). If the cursor is on the first line then false is returned in the second value to signify that there is no previous line.

func (*Document) PreviousLineIndentLevel

func (d *Document) PreviousLineIndentLevel(indentSize int) int

Returns the indentation level of the previous line (relative to the cursor).

func (*Document) PreviousLineIndentSpaces

func (d *Document) PreviousLineIndentSpaces() int

Returns the amount of spaces that the previous line (relative to the cursor) is indented with.

func (*Document) TextAfterCursor

func (d *Document) TextAfterCursor() string

TextAfterCursor returns the text after the cursor.

Example
d := &Document{
	Text: `Hello! my name is c-bata.
This is a example of Document component.
This component has texts displayed in terminal and cursor position.
`,
	cursorPosition: istrings.RuneCountInString(`Hello! my name is c-bata.
This is a exam`),
}
fmt.Println(d.TextAfterCursor())
Output:

ple of Document component.
This component has texts displayed in terminal and cursor position.

func (*Document) TextBeforeCursor

func (d *Document) TextBeforeCursor() string

TextBeforeCursor returns the text before the cursor.

Example
d := &Document{
	Text: `Hello! my name is c-bata.
This is a example of Document component.
This component has texts displayed in terminal and cursor position.
`,
	cursorPosition: istrings.RuneCountInString(`Hello! my name is c-bata.
This is a exam`),
}
fmt.Println(d.TextBeforeCursor())
Output:

Hello! my name is c-bata.
This is a exam

func (*Document) TextEndPositionRow

func (d *Document) TextEndPositionRow() (row istrings.RuneNumber)

TextEndPositionRow returns the row of the end of the current text. (0-based.)

func (*Document) TranslateIndexToPosition

func (d *Document) TranslateIndexToPosition(index istrings.RuneNumber) (int, int)

TranslateIndexToPosition given an index for the text, return the corresponding (row, col) tuple. (0-based. Returns (0, 0) for index=0.)

func (*Document) TranslateRowColToIndex

func (d *Document) TranslateRowColToIndex(row int, column istrings.Width) (index istrings.RuneNumber)

TranslateRowColToIndex given a (row, col), return the corresponding index. (Row and col params are 0-based.)

type EagerLexer

type EagerLexer struct {
	// contains filtered or unexported fields
}

EagerLexer is a wrapper around LexerFunc that transforms an eager lexer which produces an array with all tokens at once into a streaming lexer compatible with go-prompt.

func NewEagerLexer

func NewEagerLexer(fn LexerFunc) *EagerLexer

Create a new EagerLexer.

func (*EagerLexer) Init

func (l *EagerLexer) Init(input string)

Initialise the lexer with the given input.

func (*EagerLexer) Next

func (l *EagerLexer) Next() (Token, bool)

Return the next token and true if the operation was successful.

type ExecuteOnEnterCallback

type ExecuteOnEnterCallback func(prompt *Prompt, indentSize int) (indent int, execute bool)

ExecuteOnEnterCallback is a function that receives user input after Enter has been pressed and determines whether the input should be executed. If this function returns true, the Executor callback will be called otherwise a newline will be added to the buffer containing user input and optionally indentation made up of `indentSize * indent` spaces.

type Executor

type Executor func(string)

Executor is called when the user inputs a line of text.

type ExitChecker

type ExitChecker func(in string, breakline bool) bool

ExitChecker is called after user input to check if prompt must stop and exit go-prompt Run loop. User input means: selecting/typing an entry, then, if said entry content matches the ExitChecker function criteria: - immediate exit (if breakline is false) without executor called - exit after typing <return> (meaning breakline is true), and the executor is called first, before exit. Exit means exit go-prompt (not the overall Go program)

type Filter

type Filter func([]Suggest, string, bool) []Suggest

Filter is the type to filter the prompt.Suggestion array.

type History

type History struct {
	// contains filtered or unexported fields
}

History stores the texts that are entered.

func NewHistory

func NewHistory() *History

NewHistory returns new history object.

func (*History) Add

func (h *History) Add(input string)

Add to add text in history.

func (*History) Clear

func (h *History) Clear()

Clear to clear the history.

func (*History) Newer

func (h *History) Newer(buf *Buffer, columns istrings.Width, rows int) (new *Buffer, changed bool)

Newer saves a buffer of current line and get a buffer of next line by up-arrow. The changes of line buffers are stored until new history is created.

func (*History) Older

func (h *History) Older(buf *Buffer, columns istrings.Width, rows int) (new *Buffer, changed bool)

Older saves a buffer of current line and get a buffer of previous line by up-arrow. The changes of line buffers are stored until new history is created.

type Key

type Key int

Key is the type express the key inserted from user.

const (
	Escape Key = iota

	ControlA
	ControlB
	ControlC
	ControlD
	ControlE
	ControlF
	ControlG
	ControlH
	ControlI
	ControlJ
	ControlK
	ControlL
	ControlM
	ControlN
	ControlO
	ControlP
	ControlQ
	ControlR
	ControlS
	ControlT
	ControlU
	ControlV
	ControlW
	ControlX
	ControlY
	ControlZ

	ControlSpace
	ControlBackslash
	ControlSquareClose
	ControlCircumflex
	ControlUnderscore
	ControlLeft
	ControlRight
	ControlUp
	ControlDown

	Up
	Down
	Right
	AltRight
	Left
	AltLeft

	ShiftLeft
	ShiftUp
	ShiftDown
	ShiftRight

	Home
	End
	Delete
	ShiftDelete
	ControlDelete
	PageUp
	PageDown
	BackTab
	Insert
	Backspace
	AltBackspace

	// Aliases.
	Tab
	Enter

	F1
	F2
	F3
	F4
	F5
	F6
	F7
	F8
	F9
	F10
	F11
	F12
	F13
	F14
	F15
	F16
	F17
	F18
	F19
	F20
	F21
	F22
	F23
	F24

	// Matches any key.
	Any

	// Special
	CPRResponse
	Vt100MouseEvent
	WindowsMouseEvent
	BracketedPaste

	// Key which is ignored. (The key binding for this key should not do anything.)
	Ignore

	// Key is not defined
	NotDefined
)

func GetKey

func GetKey(b []byte) Key

GetKey returns Key correspond to input byte codes.

func (Key) String

func (i Key) String() string

type KeyBind

type KeyBind struct {
	Key Key
	Fn  KeyBindFunc
}

KeyBind represents which key should do what operation.

type KeyBindFunc

type KeyBindFunc func(p *Prompt) (rerender bool)

KeyBindFunc receives buffer and processed it.

type KeyBindMode

type KeyBindMode uint8

KeyBindMode to switch a key binding flexibly.

const (
	// CommonKeyBind is a mode without any keyboard shortcut
	CommonKeyBind KeyBindMode = iota
	// EmacsKeyBind is a mode to use emacs-like keyboard shortcut
	EmacsKeyBind
)

type Lexer

type Lexer interface {
	Init(string) // Reset the lexer's state and initialise it with the given input.
	// Next returns the next Token and a bool flag
	// which is false when the end of input has been reached.
	Next() (Token, bool)
}

Lexer is a streaming lexer that takes in a piece of text and streams tokens with the Next() method

type LexerFunc

type LexerFunc func(string) []Token

LexerFunc is a function implementing a simple lexer that receives a string and returns a complete slice of Tokens.

type Option

type Option func(prompt *Prompt) error

Option is the type to replace default parameters. prompt.New accepts any number of options (this is functional option pattern).

func WithASCIICodeBind

func WithASCIICodeBind(b ...ASCIICodeBind) Option

WithASCIICodeBind to set a custom key bind.

func WithBreakLineCallback

func WithBreakLineCallback(fn func(*Document)) Option

WithBreakLineCallback to run a callback at every break line

func WithCompleter

func WithCompleter(c Completer) Option

WithCompleter is an option that sets a custom Completer object.

func WithCompletionOnDown

func WithCompletionOnDown() Option

WithCompletionOnDown allows for Down arrow key to trigger completion.

func WithCompletionWordSeparator

func WithCompletionWordSeparator(sep string) Option

WithCompletionWordSeparator can be used to set word separators. Enable only ' ' if empty.

func WithDescriptionBGColor

func WithDescriptionBGColor(x Color) Option

WithDescriptionBGColor to change a background color of description text in drop down suggestions.

func WithDescriptionTextColor

func WithDescriptionTextColor(x Color) Option

WithDescriptionTextColor to change a background color of description text in drop down suggestions.

func WithExecuteOnEnterCallback

func WithExecuteOnEnterCallback(fn ExecuteOnEnterCallback) Option

WithExecuteOnEnterCallback can be used to set a custom callback function that determines whether an Enter key should trigger the Executor or add a newline to the user input buffer.

func WithExitChecker

func WithExitChecker(fn ExitChecker) Option

WithExitChecker set an exit function which checks if go-prompt exits its Run loop

func WithHistory

func WithHistory(x []string) Option

WithHistory to set history expressed by string array.

func WithIndentSize

func WithIndentSize(i int) Option

WithIndentSize is an option that sets the amount of spaces that constitute a single indentation level.

func WithInitialText

func WithInitialText(text string) Option

WithInitialText can be used to set the initial buffer text.

func WithInputBGColor

func WithInputBGColor(x Color) Option

WithInputBGColor to change a color of background which is input by user

func WithInputTextColor

func WithInputTextColor(x Color) Option

WithInputTextColor to change a color of text which is input by user

func WithKeyBind

func WithKeyBind(b ...KeyBind) Option

WithKeyBind to set a custom key bind.

func WithKeyBindMode

func WithKeyBindMode(m KeyBindMode) Option

WithKeyBindMode set a key bind mode.

func WithLexer

func WithLexer(lex Lexer) Option

WithLexer set lexer function and enable it.

func WithMaxSuggestion

func WithMaxSuggestion(x uint16) Option

WithMaxSuggestion specify the max number of displayed suggestions.

func WithPrefix

func WithPrefix(prefix string) Option

WithPrefix can be used to set a prefix string for the prompt.

func WithPrefixBackgroundColor

func WithPrefixBackgroundColor(x Color) Option

WithPrefixBackgroundColor to change a background color of prefix string

func WithPrefixCallback

func WithPrefixCallback(f PrefixCallback) Option

WithPrefixCallback can be used to change the prefix dynamically by a callback function.

func WithPrefixTextColor

func WithPrefixTextColor(x Color) Option

WithPrefixTextColor change a text color of prefix string

func WithReader

func WithReader(r Reader) Option

WithReader can be used to set a custom Reader object.

func WithScrollbarBGColor

func WithScrollbarBGColor(x Color) Option

WithScrollbarBGColor to change a background color of scrollbar.

func WithScrollbarThumbColor

func WithScrollbarThumbColor(x Color) Option

WithScrollbarThumbColor to change a thumb color on scrollbar.

func WithSelectedDescriptionBGColor

func WithSelectedDescriptionBGColor(x Color) Option

WithSelectedDescriptionBGColor to change a background color of description which is selected inside suggestions drop down box.

func WithSelectedDescriptionTextColor

func WithSelectedDescriptionTextColor(x Color) Option

WithSelectedDescriptionTextColor to change a text color of description which is selected inside suggestions drop down box.

func WithSelectedSuggestionBGColor

func WithSelectedSuggestionBGColor(x Color) Option

WithSelectedSuggestionBGColor to change a background color for completed text which is selected inside suggestions drop down box.

func WithSelectedSuggestionTextColor

func WithSelectedSuggestionTextColor(x Color) Option

WithSelectedSuggestionTextColor to change a text color for completed text which is selected inside suggestions drop down box.

func WithShowCompletionAtStart

func WithShowCompletionAtStart() Option

WithShowCompletionAtStart to set completion window is open at start.

func WithSuggestionBGColor

func WithSuggestionBGColor(x Color) Option

WithSuggestionBGColor change a background color in drop down suggestions.

func WithSuggestionTextColor

func WithSuggestionTextColor(x Color) Option

WithSuggestionTextColor to change a text color in drop down suggestions.

func WithTitle

func WithTitle(t string) Option

WithTitle can be used to set the title displayed at the header bar of the terminal.

func WithWriter

func WithWriter(w Writer) Option

WithWriter can be used to set a custom Writer object.

type Position

type Position struct {
	X istrings.Width
	Y int
}

Position stores the coordinates of a p.

(0, 0) represents the top-left corner of the prompt, while (n, n) the bottom-right corner.

func (Position) Add

func (p Position) Add(other Position) Position

Add two positions and return a new position.

func (Position) Join

func (p Position) Join(other Position) Position

Join two positions and return a new position.

func (Position) Subtract

func (p Position) Subtract(other Position) Position

Subtract two positions and return a new position.

type PosixReader

type PosixReader struct {
	// contains filtered or unexported fields
}

PosixReader is a Reader implementation for the POSIX environment.

func NewStdinReader

func NewStdinReader() *PosixReader

NewStdinReader returns Reader object to read from stdin.

func (*PosixReader) Close

func (t *PosixReader) Close() error

Close should be called after stopping input

func (*PosixReader) GetWinSize

func (t *PosixReader) GetWinSize() *WinSize

GetWinSize returns WinSize object to represent width and height of terminal.

func (*PosixReader) Open

func (t *PosixReader) Open() error

Open should be called before starting input

func (*PosixReader) Read

func (t *PosixReader) Read(buff []byte) (int, error)

Read returns byte array.

type PosixWriter

type PosixWriter struct {
	VT100Writer
	// contains filtered or unexported fields
}

PosixWriter is a Writer implementation for POSIX environment. To control terminal emulator, this outputs VT100 escape sequences.

func (*PosixWriter) Flush

func (w *PosixWriter) Flush() error

Flush to flush buffer

type PrefixCallback

type PrefixCallback func() (prefix string)

Callback function that returns a prompt prefix.

type Prompt

type Prompt struct {
	ASCIICodeBindings []ASCIICodeBind
	// contains filtered or unexported fields
}

Prompt is a core struct of go-prompt.

func New

func New(executor Executor, opts ...Option) *Prompt

New returns a Prompt with powerful auto-completion.

func (*Prompt) Buffer

func (p *Prompt) Buffer() *Buffer

Returns the buffer struct.

func (*Prompt) Close

func (p *Prompt) Close()

func (*Prompt) CursorDown

func (p *Prompt) CursorDown(count int) bool

Move the cursor down. Returns true when the view should be rerendered.

func (*Prompt) CursorLeft

func (p *Prompt) CursorLeft(count istrings.GraphemeNumber) bool

Move to the left on the current line by the given amount of graphemes (visible characters). Returns true when the view should be rerendered.

func (*Prompt) CursorLeftRunes

func (p *Prompt) CursorLeftRunes(count istrings.RuneNumber) bool

Move to the left on the current line by the given amount of runes. Returns true when the view should be rerendered.

func (*Prompt) CursorRight

func (p *Prompt) CursorRight(count istrings.GraphemeNumber) bool

Move the cursor to the right on the current line by the given amount of graphemes (visible characters). Returns true when the view should be rerendered.

func (*Prompt) CursorRightRunes

func (p *Prompt) CursorRightRunes(count istrings.RuneNumber) bool

Move the cursor to the right on the current line by the given amount of runes. Returns true when the view should be rerendered.

func (*Prompt) CursorUp

func (p *Prompt) CursorUp(count int) bool

Move the cursor up. Returns true when the view should be rerendered.

func (*Prompt) Delete

func (p *Prompt) Delete(count istrings.GraphemeNumber) string

Deletes the specified number of graphemes and returns the deleted text.

func (*Prompt) DeleteBeforeCursor

func (p *Prompt) DeleteBeforeCursor(count istrings.GraphemeNumber) string

Deletes the specified number of graphemes before the cursor and returns the deleted text.

func (*Prompt) DeleteBeforeCursorRunes

func (p *Prompt) DeleteBeforeCursorRunes(count istrings.RuneNumber) string

Deletes the specified number of runes before the cursor and returns the deleted text.

func (*Prompt) DeleteRunes

func (p *Prompt) DeleteRunes(count istrings.RuneNumber) string

Deletes the specified number of runes and returns the deleted text.

func (*Prompt) IndentSize

func (p *Prompt) IndentSize() int

Returns the configured indent size.

func (*Prompt) Input

func (p *Prompt) Input() string

Input starts the prompt, lets the user input a single line and returns this line as a string.

func (*Prompt) InsertText

func (p *Prompt) InsertText(text string, overwrite bool)

Insert string into the buffer without moving the cursor.

func (*Prompt) InsertTextMoveCursor

func (p *Prompt) InsertTextMoveCursor(text string, overwrite bool)

Insert string into the buffer and move the cursor.

func (*Prompt) Run

func (p *Prompt) Run()

Run starts the prompt.

func (*Prompt) TerminalColumns

func (p *Prompt) TerminalColumns() istrings.Width

Returns the current amount of columns that the terminal can display.

func (*Prompt) TerminalRows

func (p *Prompt) TerminalRows() int

Returns the current amount of rows that the terminal can display.

func (*Prompt) UserInputColumns

func (p *Prompt) UserInputColumns() istrings.Width

Get the number of columns that are available for user input.

type Reader

type Reader interface {
	// Open should be called before starting reading
	Open() error
	// GetWinSize returns WinSize object to represent width and height of terminal.
	GetWinSize() *WinSize
	io.ReadCloser
}

Reader is an interface to abstract input layer.

type Renderer

type Renderer struct {
	// contains filtered or unexported fields
}

Takes care of the rendering process

func NewRenderer

func NewRenderer() *Renderer

Build a new Renderer.

func (*Renderer) BreakLine

func (r *Renderer) BreakLine(buffer *Buffer, lexer Lexer)

BreakLine to break line.

func (*Renderer) Close

func (r *Renderer) Close()

Close to clear title and erase.

func (*Renderer) Render

func (r *Renderer) Render(buffer *Buffer, completion *CompletionManager, lexer Lexer)

Render renders to the console.

func (*Renderer) Setup

func (r *Renderer) Setup()

Setup to initialize console output.

func (*Renderer) UpdateWinSize

func (r *Renderer) UpdateWinSize(ws *WinSize)

UpdateWinSize called when window size is changed.

func (*Renderer) UserInputColumns

func (r *Renderer) UserInputColumns() istrings.Width

Get the number of columns that are available for user input.

type SimpleToken

type SimpleToken struct {
	// contains filtered or unexported fields
}

SimpleToken as the default implementation of Token.

func NewSimpleToken

func NewSimpleToken(firstIndex, lastIndex istrings.ByteNumber, opts ...SimpleTokenOption) *SimpleToken

Create a new SimpleToken.

func (*SimpleToken) BackgroundColor

func (t *SimpleToken) BackgroundColor() Color

Retrieve the background color of this token.

func (*SimpleToken) Color

func (t *SimpleToken) Color() Color

Retrieve the text color of this token.

func (*SimpleToken) DisplayAttributes

func (t *SimpleToken) DisplayAttributes() []DisplayAttribute

Retrieve the display attributes of this token eg. bold, underline.

func (*SimpleToken) FirstByteIndex

func (t *SimpleToken) FirstByteIndex() istrings.ByteNumber

The index of the first byte of the lexeme.

func (*SimpleToken) LastByteIndex

func (t *SimpleToken) LastByteIndex() istrings.ByteNumber

The index of the last byte of the lexeme.

type SimpleTokenOption

type SimpleTokenOption func(*SimpleToken)

func SimpleTokenWithBackgroundColor

func SimpleTokenWithBackgroundColor(c Color) SimpleTokenOption

func SimpleTokenWithColor

func SimpleTokenWithColor(c Color) SimpleTokenOption

func SimpleTokenWithDisplayAttributes

func SimpleTokenWithDisplayAttributes(attrs ...DisplayAttribute) SimpleTokenOption

type Suggest

type Suggest struct {
	Text        string
	Description string
}

Suggest represents a single suggestion in the auto-complete box.

func FilterContains

func FilterContains(completions []Suggest, sub string, ignoreCase bool) []Suggest

FilterContains checks whether the completion.Text contains sub.

func FilterFuzzy

func FilterFuzzy(completions []Suggest, sub string, ignoreCase bool) []Suggest

FilterFuzzy checks whether the completion.Text fuzzy matches sub. Fuzzy searching for "dog" is equivalent to "*d*o*g*". This search term would match, for example:

"Good food is gone"
    ^  ^      ^

func FilterHasPrefix

func FilterHasPrefix(completions []Suggest, sub string, ignoreCase bool) []Suggest

FilterHasPrefix checks whether the string completions.Text begins with sub.

func FilterHasSuffix

func FilterHasSuffix(completions []Suggest, sub string, ignoreCase bool) []Suggest

FilterHasSuffix checks whether the completion.Text ends with sub.

func NoopCompleter

func NoopCompleter(_ Document) ([]Suggest, istrings.RuneNumber, istrings.RuneNumber)

NoopCompleter implements a Completer function that always returns no suggestions.

type Token

type Token interface {
	Color() Color // Color of the token's text
	BackgroundColor() Color
	DisplayAttributes() []DisplayAttribute
	FirstByteIndex() istrings.ByteNumber // Index of the last byte of this token
	LastByteIndex() istrings.ByteNumber  // Index of the last byte of this token
}

Token is a single unit of text returned by a Lexer.

type UserInput

type UserInput struct {
	// contains filtered or unexported fields
}

UserInput is the struct that contains the user input context.

type VT100Writer

type VT100Writer struct {
	// contains filtered or unexported fields
}

VT100Writer generates VT100 escape sequences.

func (*VT100Writer) AskForCPR

func (w *VT100Writer) AskForCPR()

AskForCPR asks for a cursor position report (CPR).

func (*VT100Writer) ClearTitle

func (w *VT100Writer) ClearTitle()

ClearTitle clears a title of terminal window.

func (*VT100Writer) CursorBackward

func (w *VT100Writer) CursorBackward(n int)

CursorBackward moves the cursor backward by 'n' columns; the default count is 1.

func (*VT100Writer) CursorDown

func (w *VT100Writer) CursorDown(n int)

CursorDown moves the cursor down by 'n' rows; the default count is 1.

func (*VT100Writer) CursorForward

func (w *VT100Writer) CursorForward(n int)

CursorForward moves the cursor forward by 'n' columns; the default count is 1.

func (*VT100Writer) CursorGoTo

func (w *VT100Writer) CursorGoTo(row, col int)

CursorGoTo sets the cursor position where subsequent text will begin.

func (*VT100Writer) CursorUp

func (w *VT100Writer) CursorUp(n int)

CursorUp moves the cursor up by 'n' rows; the default count is 1.

func (*VT100Writer) EraseDown

func (w *VT100Writer) EraseDown()

EraseDown erases the screen from the current line down to the bottom of the screen.

func (*VT100Writer) EraseEndOfLine

func (w *VT100Writer) EraseEndOfLine()

EraseEndOfLine erases from the current cursor position to the end of the current line.

func (*VT100Writer) EraseLine

func (w *VT100Writer) EraseLine()

EraseLine erases the entire current line.

func (*VT100Writer) EraseScreen

func (w *VT100Writer) EraseScreen()

EraseScreen erases the screen with the background colour and moves the cursor to home.

func (*VT100Writer) EraseStartOfLine

func (w *VT100Writer) EraseStartOfLine()

EraseStartOfLine erases from the current cursor position to the start of the current line.

func (*VT100Writer) EraseUp

func (w *VT100Writer) EraseUp()

EraseUp erases the screen from the current line up to the top of the screen.

func (*VT100Writer) HideCursor

func (w *VT100Writer) HideCursor()

HideCursor hides cursor.

func (*VT100Writer) SaveCursor

func (w *VT100Writer) SaveCursor()

SaveCursor saves current cursor position.

func (*VT100Writer) ScrollDown

func (w *VT100Writer) ScrollDown()

ScrollDown scrolls display down one line.

func (*VT100Writer) ScrollUp

func (w *VT100Writer) ScrollUp()

ScrollUp scroll display up one line.

func (*VT100Writer) SetColor

func (w *VT100Writer) SetColor(fg, bg Color, bold bool)

SetColor sets text and background colors. and specify whether text is bold.

func (*VT100Writer) SetDisplayAttributes

func (w *VT100Writer) SetDisplayAttributes(fg, bg Color, attrs ...DisplayAttribute)

SetDisplayAttributes to set VT100 display attributes.

func (*VT100Writer) SetTitle

func (w *VT100Writer) SetTitle(title string)

SetTitle sets a title of terminal window.

func (*VT100Writer) ShowCursor

func (w *VT100Writer) ShowCursor()

ShowCursor stops blinking cursor and show.

func (*VT100Writer) UnSaveCursor

func (w *VT100Writer) UnSaveCursor()

UnSaveCursor restores cursor position after a Save Cursor.

func (*VT100Writer) Write

func (w *VT100Writer) Write(data []byte) (int, error)

Write to write safety byte array by removing control sequences.

func (*VT100Writer) WriteRaw

func (w *VT100Writer) WriteRaw(data []byte)

WriteRaw to write raw byte array

func (*VT100Writer) WriteRawString

func (w *VT100Writer) WriteRawString(data string)

WriteRawString to write raw string

func (*VT100Writer) WriteString

func (w *VT100Writer) WriteString(data string) (int, error)

WriteString to write safety string by removing control sequences.

type WinSize

type WinSize struct {
	Row uint16
	Col uint16
}

WinSize represents the width and height of terminal.

type Writer

type Writer interface {
	io.Writer
	io.StringWriter
	// WriteRaw to write raw byte array.
	WriteRaw(data []byte)
	// WriteString to write raw string.
	WriteRawString(data string)
	// Flush to flush buffer.
	Flush() error

	// EraseScreen erases the screen with the background colour and moves the cursor to home.
	EraseScreen()
	// EraseUp erases the screen from the current line up to the top of the screen.
	EraseUp()
	// EraseDown erases the screen from the current line down to the bottom of the screen.
	EraseDown()
	// EraseStartOfLine erases from the current cursor position to the start of the current line.
	EraseStartOfLine()
	// EraseEndOfLine erases from the current cursor position to the end of the current line.
	EraseEndOfLine()
	// EraseLine erases the entire current line.
	EraseLine()

	// ShowCursor stops blinking cursor and show.
	ShowCursor()
	// HideCursor hides cursor.
	HideCursor()
	// CursorGoTo sets the cursor position where subsequent text will begin.
	CursorGoTo(row, col int)
	// CursorUp moves the cursor up by 'n' rows; the default count is 1.
	CursorUp(n int)
	// CursorDown moves the cursor down by 'n' rows; the default count is 1.
	CursorDown(n int)
	// CursorForward moves the cursor forward by 'n' columns; the default count is 1.
	CursorForward(n int)
	// CursorBackward moves the cursor backward by 'n' columns; the default count is 1.
	CursorBackward(n int)
	// AskForCPR asks for a cursor position report (CPR).
	AskForCPR()
	// SaveCursor saves current cursor position.
	SaveCursor()
	// UnSaveCursor restores cursor position after a Save Cursor.
	UnSaveCursor()

	// ScrollDown scrolls display down one line.
	ScrollDown()
	// ScrollUp scroll display up one line.
	ScrollUp()

	// SetTitle sets a title of terminal window.
	SetTitle(title string)
	// ClearTitle clears a title of terminal window.
	ClearTitle()

	// SetColor sets text and background colors. and specify whether text is bold.
	SetColor(fg, bg Color, bold bool)

	// Sets the colors and display attributes.
	SetDisplayAttributes(fg, bg Color, attrs ...DisplayAttribute)
}

Writer is an interface to abstract the output layer.

func NewStderrWriter

func NewStderrWriter() Writer

NewStderrWriter returns Writer object to write to stderr. This generates VT100 escape sequences because almost terminal emulators in POSIX OS built on top of a VT100 specification.

func NewStdoutWriter

func NewStdoutWriter() Writer

NewStdoutWriter returns Writer object to write to stdout. This generates VT100 escape sequences because almost terminal emulators in POSIX OS built on top of a VT100 specification.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL