prompt

package module
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Aug 14, 2017 License: MIT Imports: 14 Imported by: 0

README

go-prompt

Library for building a powerful interactive prompt, inspired by python-prompt-toolkit. Easy building a multi-platform binary of the command line tools because built with Golang.

demo

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

Projects using go-prompt

Features

Flexible options

go-prompt provides many options. All options are listed in Developer Guide.

options

Keyboard Shortcuts

Emacs-like keyboard shortcut is available by default (it's also default shortcuts in Bash shell). You can customize and expand these shortcuts.

keyboard shortcuts

KeyBinding 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/delete the Line before the cursor to the clipboard.
Easy to use

Usage is like this:

package main

import (
	"fmt"
	"github.com/c-bata/go-prompt"
)

func completer(d prompt.Document) []prompt.Suggest {
	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, d.GetWordBeforeCursor(), true)
}

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

More practical example is available from _example directory and a source code of kube-prompt.

Author

Masashi Shibata

LICENSE

This software is licensed under the MIT License (See LICENSE ).

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func BisectLeft

func BisectLeft(a []int, v int) int

BisectLeft to Locate the insertion point for v in a to maintain sorted order.

func BisectRight

func BisectRight(a []int, v int) int

BisectRight to Locate the insertion point for v in a to maintain sorted order.

func Choose

func Choose(prefix string, choices []string, opts ...option) string

func Input

func Input(prefix string, completer Completer, opts ...option) string

func OptionAddKeyBind

func OptionAddKeyBind(b ...KeyBind) option

func OptionDescriptionBGColor

func OptionDescriptionBGColor(x Color) option

func OptionDescriptionTextColor

func OptionDescriptionTextColor(x Color) option

func OptionHistory

func OptionHistory(x []string) option

func OptionInputBGColor

func OptionInputBGColor(x Color) option

func OptionInputTextColor

func OptionInputTextColor(x Color) option

func OptionMaxSuggestion

func OptionMaxSuggestion(x uint16) option

func OptionParser

func OptionParser(x ConsoleParser) option

func OptionPrefix

func OptionPrefix(x string) option

func OptionPrefixBackgroundColor

func OptionPrefixBackgroundColor(x Color) option

func OptionPrefixTextColor

func OptionPrefixTextColor(x Color) option

func OptionPreviewSuggestionBGColor

func OptionPreviewSuggestionBGColor(x Color) option

func OptionPreviewSuggestionTextColor

func OptionPreviewSuggestionTextColor(x Color) option

func OptionSelectedDescriptionBGColor

func OptionSelectedDescriptionBGColor(x Color) option

func OptionSelectedDescriptionTextColor

func OptionSelectedDescriptionTextColor(x Color) option

func OptionSelectedSuggestionBGColor

func OptionSelectedSuggestionBGColor(x Color) option

func OptionSelectedSuggestionTextColor

func OptionSelectedSuggestionTextColor(x Color) option

func OptionSuggestionBGColor

func OptionSuggestionBGColor(x Color) option

func OptionSuggestionTextColor

func OptionSuggestionTextColor(x Color) option

func OptionTitle

func OptionTitle(x string) option

func OptionWriter

func OptionWriter(x ConsoleWriter) option

func SwitchKeyBindMode

func SwitchKeyBindMode(m KeyBindMode) option

Types

type ASCIICode

type ASCIICode struct {
	Key       Key
	ASCIICode []byte
}

type Buffer

type Buffer struct {
	CursorPosition int
	// 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)

CursorDown move cursor to the next line. (for multi-line edit).

func (*Buffer) CursorLeft

func (b *Buffer) CursorLeft(count int)

CursorLeft move to left on the current line.

func (*Buffer) CursorRight

func (b *Buffer) CursorRight(count int)

CursorRight move to right on the current line.

func (*Buffer) CursorUp

func (b *Buffer) CursorUp(count int)

CursorUp move cursor to the previous line. (for multi-line edit).

func (*Buffer) Delete

func (b *Buffer) Delete(count int) (deleted string)

Delete specified number of characters and Return the deleted text.

func (*Buffer) DeleteBeforeCursor

func (b *Buffer) DeleteBeforeCursor(count int) (deleted string)

DeleteBeforeCursor delete specified number of characters before cursor and return the deleted text.

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(v string, overwrite bool, moveCursor bool)

InsertText insert string from current line.

func (*Buffer) JoinNextLine

func (b *Buffer) JoinNextLine(separator string)

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(copyMargin bool)

NewLine means CR.

func (*Buffer) SwapCharactersBeforeCursor

func (b *Buffer) SwapCharactersBeforeCursor()

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
const (
	DefaultColor Color = iota

	// Low intensity
	Black
	DarkRed
	DarkGreen
	Brown
	DarkBlue
	Purple
	Cyan
	LightGray

	// High intensity
	DarkGray
	Red
	Green
	Yellow
	Blue
	Fuchsia
	Turquoise
	White
)

type Completer

type Completer func(Document) []Suggest

type CompletionManager

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

func NewCompletionManager

func NewCompletionManager(completer Completer, max uint16) *CompletionManager

func (*CompletionManager) Completing

func (c *CompletionManager) Completing() bool

func (*CompletionManager) GetSelectedSuggestion

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

func (*CompletionManager) GetSuggestions

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

func (*CompletionManager) Next

func (c *CompletionManager) Next()

func (*CompletionManager) Previous

func (c *CompletionManager) Previous()

func (*CompletionManager) Reset

func (c *CompletionManager) Reset()

func (*CompletionManager) Update

func (c *CompletionManager) Update(in Document)

type ConsoleParser

type ConsoleParser interface {
	// Setup
	Setup() error
	// TearDown
	TearDown() error
	// GetSCIICode returns ASCIICode correspond to input byte codes.
	GetKey(b []byte) Key
	// GetWinSize returns winsize struct which is the response of ioctl(2).
	GetWinSize() *WinSize
}

type ConsoleWriter

type ConsoleWriter interface {
	WriteRaw(data []byte)
	Write(data []byte)
	WriteStr(data string)
	WriteRawStr(data string)
	Flush() error

	EraseScreen()
	EraseUp()
	EraseDown()
	EraseStartOfLine()
	EraseEndOfLine()
	EraseLine()

	ShowCursor()
	HideCursor()
	CursorGoTo(row, col int)
	CursorUp(n int)
	CursorDown(n int)
	CursorForward(n int)
	CursorBackward(n int)
	AskForCPR()
	SaveCursor()
	UnSaveCursor()

	ScrollDown()
	ScrollUp()

	SetTitle(title string)
	ClearTitle()

	SetColor(fg, bg Color, bold bool)
}

type Document

type Document struct {
	Text           string
	CursorPosition int
}

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`.

func (*Document) CurrentLineAfterCursor

func (d *Document) CurrentLineAfterCursor() string

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

func (*Document) CurrentLineBeforeCursor

func (d *Document) CurrentLineBeforeCursor() string

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

func (*Document) CursorPositionCol

func (d *Document) CursorPositionCol() (col int)

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

func (*Document) CursorPositionRow

func (d *Document) CursorPositionRow() (row int)

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

func (*Document) FindStartOfPreviousWord

func (d *Document) FindStartOfPreviousWord() int

FindStartOfPreviousWord return an index relative to the cursor position pointing to the start of the previous word. Return `None` if nothing was found.

func (*Document) GetCharRelativeToCursor

func (d *Document) GetCharRelativeToCursor(offset int) (r rune)

GetCharRelativeToCursor return character relative to cursor position, or empty string

func (*Document) GetCursorDownPosition

func (d *Document) GetCursorDownPosition(count int, preferredColumn int) int

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 int) int

GetCursorLeftPosition returns the relative position for cursor left.

func (*Document) GetCursorRightPosition

func (d *Document) GetCursorRightPosition(count int) int

GetCursorRightPosition returns relative position for cursor right.

func (*Document) GetCursorUpPosition

func (d *Document) GetCursorUpPosition(count int, preferredColumn int) int

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() int

GetEndOfLinePosition returns relative position for the end of this line.

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.

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) TextAfterCursor

func (d *Document) TextAfterCursor() string

TextAfterCursor returns the text after the cursor.

func (*Document) TextBeforeCursor

func (d *Document) TextBeforeCursor() string

TextBeforeCursor returns the text before the cursor.

func (*Document) TranslateIndexToPosition

func (d *Document) TranslateIndexToPosition(index int) (row int, col 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 int) (index int)

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

type Exec

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

type Executor

type Executor func(string)

type Filter

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

type History

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

func NewHistory

func NewHistory() *History

func (*History) Add

func (h *History) Add(input string)

func (*History) Clear

func (h *History) Clear()

func (*History) Newer

func (h *History) Newer(buf *Buffer) (new *Buffer, changed bool)

func (*History) Older

func (h *History) Older(buf *Buffer) (new *Buffer, changed bool)

type Key

type Key int
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
	Left

	ShiftLeft
	ShiftUp
	ShiftDown
	ShiftRight

	Home
	End
	Delete
	ShiftDelete
	ControlDelete
	PageUp
	PageDown
	BackTab
	Insert
	Backspace

	// 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 (Key) String

func (i Key) String() string

type KeyBind

type KeyBind struct {
	Key Key
	Fn  KeyBindFunc
}

type KeyBindFunc

type KeyBindFunc func(*Buffer)

type KeyBindMode

type KeyBindMode string
const (
	CommonKeyBind KeyBindMode = "common"
	EmacsKeyBind  KeyBindMode = "emacs"
)

type Prompt

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

func New

func New(executor Executor, completer Completer, opts ...option) *Prompt

func (*Prompt) Input

func (p *Prompt) Input() string

func (*Prompt) Run

func (p *Prompt) Run()

type Render

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

func (*Render) BreakLine

func (r *Render) BreakLine(buffer *Buffer)

func (*Render) Render

func (r *Render) Render(buffer *Buffer, completion *CompletionManager)

func (*Render) Setup

func (r *Render) Setup()

func (*Render) TearDown

func (r *Render) TearDown()

func (*Render) UpdateWinSize

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

type Suggest

type Suggest struct {
	Text        string
	Description string
}

func FilterContains

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

func FilterHasPrefix

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

func FilterHasSuffix

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

type VT100Parser

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

func NewVT100StandardInputParser

func NewVT100StandardInputParser() *VT100Parser

func (*VT100Parser) GetKey

func (t *VT100Parser) GetKey(b []byte) Key

func (*VT100Parser) GetWinSize

func (t *VT100Parser) GetWinSize() *WinSize

GetWinSize returns winsize struct which is the response of ioctl(2).

func (*VT100Parser) Setup

func (t *VT100Parser) Setup() error

func (*VT100Parser) TearDown

func (t *VT100Parser) TearDown() error

type VT100Writer

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

func NewVT100StandardOutputWriter

func NewVT100StandardOutputWriter() *VT100Writer

func (*VT100Writer) AskForCPR

func (w *VT100Writer) AskForCPR()

func (*VT100Writer) ClearTitle

func (w *VT100Writer) ClearTitle()

func (*VT100Writer) CursorBackward

func (w *VT100Writer) CursorBackward(n int)

func (*VT100Writer) CursorDown

func (w *VT100Writer) CursorDown(n int)

func (*VT100Writer) CursorForward

func (w *VT100Writer) CursorForward(n int)

func (*VT100Writer) CursorGoTo

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

func (*VT100Writer) CursorUp

func (w *VT100Writer) CursorUp(n int)

func (*VT100Writer) EraseDown

func (w *VT100Writer) EraseDown()

func (*VT100Writer) EraseEndOfLine

func (w *VT100Writer) EraseEndOfLine()

func (*VT100Writer) EraseLine

func (w *VT100Writer) EraseLine()

func (*VT100Writer) EraseScreen

func (w *VT100Writer) EraseScreen()

func (*VT100Writer) EraseStartOfLine

func (w *VT100Writer) EraseStartOfLine()

func (*VT100Writer) EraseUp

func (w *VT100Writer) EraseUp()

func (*VT100Writer) Flush

func (w *VT100Writer) Flush() error

func (*VT100Writer) HideCursor

func (w *VT100Writer) HideCursor()

func (*VT100Writer) SaveCursor

func (w *VT100Writer) SaveCursor()

func (*VT100Writer) ScrollDown

func (w *VT100Writer) ScrollDown()

func (*VT100Writer) ScrollUp

func (w *VT100Writer) ScrollUp()

func (*VT100Writer) SetColor

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

func (*VT100Writer) SetTitle

func (w *VT100Writer) SetTitle(title string)

func (*VT100Writer) ShowCursor

func (w *VT100Writer) ShowCursor()

func (*VT100Writer) UnSaveCursor

func (w *VT100Writer) UnSaveCursor()

func (*VT100Writer) Write

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

func (*VT100Writer) WriteRaw

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

func (*VT100Writer) WriteRawStr

func (w *VT100Writer) WriteRawStr(data string)

func (*VT100Writer) WriteStr

func (w *VT100Writer) WriteStr(data string)

type WinSize

type WinSize struct {
	Row uint16
	Col uint16
}

Directories

Path Synopsis
_example

Jump to

Keyboard shortcuts

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