Documentation
¶
Overview ¶
Readline is a pure go implementation for GNU-Readline kind library.
example:
rl, err := readline.New("> ")
if err != nil {
panic(err)
}
defer rl.Close()
for {
line, err := rl.Readline()
if err != nil { // io.EOF
break
}
println(line)
}
Index ¶
- Constants
- Variables
- func DialRemote(n, addr string) error
- func Do(p PrefixCompleterInterface, line []rune, pos int) (newLine [][]rune, offset int)
- func ListenRemote(n, addr string, cfg *Config, h func(*Instance), ...) error
- func Print(p PrefixCompleterInterface, prefix string, level int, buf *bytes.Buffer)
- func RetSegment(segments [][]rune, cands [][]rune, idx int) ([][]rune, int)
- func SplitSegment(line []rune, pos int) ([][]rune, int)
- type AutoCompleter
- type Config
- type DumpListener
- type DynamicCompleteFunc
- type DynamicPrefixCompleterInterface
- type Instance
- func (i *Instance) CaptureExitSignal()
- func (i *Instance) Clean()
- func (i *Instance) Close() error
- func (i *Instance) GenPasswordConfig() *Config
- func (i *Instance) HistoryDisable()
- func (i *Instance) HistoryEnable()
- func (i *Instance) IsVimMode() bool
- func (i *Instance) ReadPassword(prompt string) ([]byte, error)
- func (i *Instance) ReadPasswordWithConfig(cfg *Config) ([]byte, error)
- func (i *Instance) ReadSlice() ([]byte, error)
- func (i *Instance) Readline() (string, error)
- func (i *Instance) ReadlineWithDefault(what string) (string, error)
- func (i *Instance) Refresh()
- func (i *Instance) ResetHistory()
- func (i *Instance) SaveHistory(content string) error
- func (i *Instance) SetConfig(cfg *Config) error
- func (i *Instance) SetHistoryPath(p string)
- func (i *Instance) SetMaskRune(r rune)
- func (i *Instance) SetPrompt(s string)
- func (i *Instance) SetVimMode(on bool)
- func (i *Instance) Stderr() io.Writer
- func (i *Instance) Stdout() io.Writer
- func (i *Instance) Write(b []byte) (int, error)
- func (i *Instance) WriteStdin(val []byte) (int, error)
- type Listener
- type Message
- type MsgType
- type Operation
- func (o *Operation) Clean()
- func (o *Operation) Close()
- func (o *Operation) GenPasswordConfig() *Config
- func (o *Operation) GetConfig() *Config
- func (o *Operation) IsNormalMode() bool
- func (o *Operation) Password(prompt string) ([]byte, error)
- func (o *Operation) PasswordWithConfig(cfg *Config) ([]byte, error)
- func (o *Operation) Refresh()
- func (o *Operation) ResetHistory()
- func (o *Operation) Runes() ([]rune, error)
- func (o *Operation) SaveHistory(content string) error
- func (o *Operation) SetBuffer(what string)
- func (op *Operation) SetConfig(cfg *Config) (*Config, error)
- func (o *Operation) SetHistoryPath(path string)
- func (o *Operation) SetMaskRune(r rune)
- func (o *Operation) SetPrompt(s string)
- func (o *Operation) SetTitle(t string)
- func (o *Operation) Slice() ([]byte, error)
- func (o *Operation) Stderr() io.Writer
- func (o *Operation) Stdout() io.Writer
- func (o *Operation) String() (string, error)
- type Painter
- type PrefixCompleter
- func (p *PrefixCompleter) Do(line []rune, pos int) (newLine [][]rune, offset int)
- func (p *PrefixCompleter) GetChildren() []PrefixCompleterInterface
- func (p *PrefixCompleter) GetDynamicNames(line []rune) [][]rune
- func (p *PrefixCompleter) GetName() []rune
- func (p *PrefixCompleter) IsDynamic() bool
- func (p *PrefixCompleter) Print(prefix string, level int, buf *bytes.Buffer)
- func (p *PrefixCompleter) SetChildren(children []PrefixCompleterInterface)
- func (p *PrefixCompleter) Tree(prefix string) string
- type PrefixCompleterInterface
- type RemoteCli
- type RemoteSvr
- func (r *RemoteSvr) Close() error
- func (r *RemoteSvr) EnterRawMode() error
- func (r *RemoteSvr) ExitRawMode() error
- func (r *RemoteSvr) GetWidth() int
- func (r *RemoteSvr) GotIsTerminal(data []byte)
- func (r *RemoteSvr) GotReportWidth(data []byte)
- func (r *RemoteSvr) HandleConfig(cfg *Config)
- func (r *RemoteSvr) IsTerminal() bool
- func (r *RemoteSvr) Read(b []byte) (int, error)
- func (r *RemoteSvr) Write(b []byte) (int, error)
- type RuneBuffer
- func (r *RuneBuffer) BackEscapeWord()
- func (r *RuneBuffer) Backspace()
- func (r *RuneBuffer) Backup()
- func (r *RuneBuffer) Clean()
- func (r *RuneBuffer) CurrentWidth(x int) int
- func (r *RuneBuffer) CursorLineCount() int
- func (r *RuneBuffer) Delete() (success bool)
- func (r *RuneBuffer) DeleteWord()
- func (r *RuneBuffer) Erase()
- func (r *RuneBuffer) IdxLine(width int) int
- func (r *RuneBuffer) IsCursorInEnd() bool
- func (r *RuneBuffer) Kill()
- func (r *RuneBuffer) KillFront()
- func (r *RuneBuffer) Len() int
- func (r *RuneBuffer) LineCount() int
- func (r *RuneBuffer) MoveBackward()
- func (r *RuneBuffer) MoveForward()
- func (r *RuneBuffer) MoveTo(ch rune, prevChar, reverse bool) (success bool)
- func (r *RuneBuffer) MoveToEndWord()
- func (r *RuneBuffer) MoveToLineEnd()
- func (r *RuneBuffer) MoveToLineStart()
- func (r *RuneBuffer) MoveToNextWord()
- func (r *RuneBuffer) MoveToPrevWord() (success bool)
- func (r *RuneBuffer) Pos() int
- func (r *RuneBuffer) Print()
- func (r *RuneBuffer) PromptLen() int
- func (r *RuneBuffer) Refresh(f func())
- func (r *RuneBuffer) Replace(ch rune)
- func (r *RuneBuffer) Reset() []rune
- func (r *RuneBuffer) Restore()
- func (r *RuneBuffer) RuneSlice(i int) []rune
- func (r *RuneBuffer) Runes() []rune
- func (r *RuneBuffer) Set(buf []rune)
- func (r *RuneBuffer) SetConfig(cfg *Config)
- func (r *RuneBuffer) SetMask(m rune)
- func (r *RuneBuffer) SetOffset(position cursorPosition)
- func (r *RuneBuffer) SetPrompt(prompt string)
- func (r *RuneBuffer) SetStyle(start, end int, style string)
- func (r *RuneBuffer) SetWithIdx(idx int, buf []rune)
- func (r *RuneBuffer) Transpose()
- func (r *RuneBuffer) WriteRune(s rune)
- func (r *RuneBuffer) WriteRunes(s []rune)
- func (r *RuneBuffer) WriteString(s string)
- func (r *RuneBuffer) Yank()
- type SegmentComplete
- type SegmentCompleter
- type TabCompleter
- type Terminal
- func (t *Terminal) Bell()
- func (t *Terminal) Close() error
- func (t *Terminal) EnterRawMode() (err error)
- func (t *Terminal) ExitRawMode() (err error)
- func (t *Terminal) GetCursorPosition(deadline chan struct{}) (cursorPosition, error)
- func (t *Terminal) GetRune(deadline chan struct{}) (rune, error)
- func (t *Terminal) GetWidthHeight() (width, height int)
- func (t *Terminal) OnSizeChange()
- func (t *Terminal) SetConfig(c *Config) error
- func (t *Terminal) SleepToResume()
- func (t *Terminal) Write(b []byte) (int, error)
Constants ¶
const ( T_DATA = MsgType(iota) T_WIDTH T_WIDTH_REPORT T_ISTTY_REPORT T_RAW T_ERAW // exit raw T_EOF )
const ( S_STATE_FOUND = iota S_STATE_FAILING )
const ( S_DIR_BCK = iota S_DIR_FWD )
const ( CharLineStart = 1 CharBackward = 2 CharInterrupt = 3 CharDelete = 4 CharLineEnd = 5 CharForward = 6 CharBell = 7 CharCtrlH = 8 CharTab = 9 CharCtrlJ = 10 CharKill = 11 CharCtrlL = 12 CharEnter = 13 CharNext = 14 CharPrev = 16 CharBckSearch = 18 CharFwdSearch = 19 CharTranspose = 20 CharCtrlU = 21 CharCtrlW = 23 CharCtrlY = 25 CharCtrlZ = 26 CharEsc = 27 CharO = 79 CharEscapeEx = 91 CharBackspace = 127 )
const ( MetaBackward rune = -iota - 1 MetaForward MetaDelete MetaBackspace MetaTranspose MetaShiftTab )
const ( VIM_NORMAL = iota VIM_INSERT VIM_VISUAL )
Variables ¶
var (
ErrInterrupt = errors.New("Interrupt")
)
var NewEx = NewFromConfig
NewEx is an alias for NewFromConfig, for compatibility.
Functions ¶
func DialRemote ¶
func ListenRemote ¶
Types ¶
type AutoCompleter ¶
type AutoCompleter interface {
// Readline will pass the whole line and current offset to it
// Completer need to pass all the candidates, and how long they shared the same characters in line
// Example:
// [go, git, git-shell, grep]
// Do("g", 1) => ["o", "it", "it-shell", "rep"], 1
// Do("gi", 2) => ["t", "t-shell"], 2
// Do("git", 3) => ["", "-shell"], 3
Do(line []rune, pos int) (newLine [][]rune, length int)
}
func SegmentFunc ¶
func SegmentFunc(f func([][]rune, int) [][]rune) AutoCompleter
type Config ¶
type Config struct {
// prompt supports ANSI escape sequence, so we can color some characters even in windows
Prompt string
// readline will persist historys to file where HistoryFile specified
HistoryFile string
// specify the max length of historys, it's 500 by default, set it to -1 to disable history
HistoryLimit int
DisableAutoSaveHistory bool
// enable case-insensitive history searching
HistorySearchFold bool
// AutoCompleter will called once user press TAB
AutoComplete AutoCompleter
// Any key press will pass to Listener
// NOTE: Listener will be triggered by (nil, 0, 0) immediately
Listener Listener
Painter Painter
// If VimMode is true, readline will in vim.insert mode by default
VimMode bool
InterruptPrompt string
EOFPrompt string
FuncGetWidth func() int
// Function that returns width, height of the terminal or -1,-1 if unknown
FuncGetSize func() (width int, height int)
Stdin io.Reader
Stdout io.Writer
Stderr io.Writer
EnableMask bool
MaskRune rune
// erase the editing line after user submited it
// it use in IM usually.
UniqueEditLine bool
// filter input runes (may be used to disable CtrlZ or for translating some keys to different actions)
// -> output = new (translated) rune and true/false if continue with processing this one
FuncFilterInputRune func(rune) (rune, bool)
// force use interactive even stdout is not a tty
FuncIsTerminal func() bool
FuncMakeRaw func() error
FuncExitRaw func() error
FuncOnWidthChanged func(func())
ForceUseInteractive bool
// contains filtered or unexported fields
}
type DumpListener ¶
type DumpListener struct {
// contains filtered or unexported fields
}
type DynamicCompleteFunc ¶
Caller type for dynamic completion
type DynamicPrefixCompleterInterface ¶
type DynamicPrefixCompleterInterface interface {
PrefixCompleterInterface
IsDynamic() bool
GetDynamicNames(line []rune) [][]rune
}
type Instance ¶
type Instance struct {
// contains filtered or unexported fields
}
func NewFromConfig ¶
NewFromConfig creates a readline instance from the specified configuration.
func (*Instance) CaptureExitSignal ¶
func (i *Instance) CaptureExitSignal()
CaptureExitSignal registers handlers for common exit signals that will close the readline instance.
func (*Instance) Close ¶
Close() closes the readline instance, cleaning up state changes to the terminal. It interrupts any concurrent Readline() operation, so it can be asynchronously or from a signal handler. It is concurrency-safe and idempotent, so it can be called multiple times.
func (*Instance) GenPasswordConfig ¶
func (*Instance) HistoryDisable ¶
func (i *Instance) HistoryDisable()
HistoryDisable the save of the commands into the history
func (*Instance) HistoryEnable ¶
func (i *Instance) HistoryEnable()
HistoryEnable the save of the commands into the history (default on)
func (*Instance) ReadPasswordWithConfig ¶
we can generate a config by `i.GenPasswordConfig()`
func (*Instance) ReadlineWithDefault ¶
func (*Instance) ResetHistory ¶
func (i *Instance) ResetHistory()
func (*Instance) SaveHistory ¶
func (*Instance) SetHistoryPath ¶
change history persistence in runtime
func (*Instance) SetMaskRune ¶
func (*Instance) WriteStdin ¶
WriteStdin prefills the next Stdin fetch. On the next call to Readline(), this data will be written before the user input, and the user will be able to edit it. For example:
i := readline.New()
i.WriteStdin([]byte("test"))
_, _= i.Readline()
yields
> test[cursor]
type Listener ¶
type Message ¶
func NewMessage ¶
type Operation ¶
type Operation struct {
// contains filtered or unexported fields
}
func NewOperation ¶
func (*Operation) GenPasswordConfig ¶
func (*Operation) IsNormalMode ¶
func (*Operation) PasswordWithConfig ¶
func (*Operation) ResetHistory ¶
func (o *Operation) ResetHistory()
func (*Operation) SaveHistory ¶
if err is not nil, it just mean it fail to write to file other things goes fine.
func (*Operation) SetHistoryPath ¶
func (*Operation) SetMaskRune ¶
type PrefixCompleter ¶
type PrefixCompleter struct {
Name []rune
Dynamic bool
Callback DynamicCompleteFunc
Children []PrefixCompleterInterface
}
func NewPrefixCompleter ¶
func NewPrefixCompleter(pc ...PrefixCompleterInterface) *PrefixCompleter
func PcItem ¶
func PcItem(name string, pc ...PrefixCompleterInterface) *PrefixCompleter
func PcItemDynamic ¶
func PcItemDynamic(callback DynamicCompleteFunc, pc ...PrefixCompleterInterface) *PrefixCompleter
func (*PrefixCompleter) Do ¶
func (p *PrefixCompleter) Do(line []rune, pos int) (newLine [][]rune, offset int)
func (*PrefixCompleter) GetChildren ¶
func (p *PrefixCompleter) GetChildren() []PrefixCompleterInterface
func (*PrefixCompleter) GetDynamicNames ¶
func (p *PrefixCompleter) GetDynamicNames(line []rune) [][]rune
func (*PrefixCompleter) GetName ¶
func (p *PrefixCompleter) GetName() []rune
func (*PrefixCompleter) IsDynamic ¶
func (p *PrefixCompleter) IsDynamic() bool
func (*PrefixCompleter) Print ¶
func (p *PrefixCompleter) Print(prefix string, level int, buf *bytes.Buffer)
func (*PrefixCompleter) SetChildren ¶
func (p *PrefixCompleter) SetChildren(children []PrefixCompleterInterface)
func (*PrefixCompleter) Tree ¶
func (p *PrefixCompleter) Tree(prefix string) string
type RemoteCli ¶
type RemoteCli struct {
// contains filtered or unexported fields
}
func (*RemoteCli) MarkIsTerminal ¶
type RemoteSvr ¶
type RemoteSvr struct {
// contains filtered or unexported fields
}
func (*RemoteSvr) EnterRawMode ¶
func (*RemoteSvr) ExitRawMode ¶
func (*RemoteSvr) GotIsTerminal ¶
func (*RemoteSvr) GotReportWidth ¶
func (*RemoteSvr) HandleConfig ¶
func (*RemoteSvr) IsTerminal ¶
type RuneBuffer ¶
func NewRuneBuffer ¶
func NewRuneBuffer(w *Terminal, prompt string, cfg *Config) *RuneBuffer
func (*RuneBuffer) BackEscapeWord ¶
func (r *RuneBuffer) BackEscapeWord()
func (*RuneBuffer) Backspace ¶
func (r *RuneBuffer) Backspace()
func (*RuneBuffer) Backup ¶
func (r *RuneBuffer) Backup()
func (*RuneBuffer) Clean ¶
func (r *RuneBuffer) Clean()
func (*RuneBuffer) CurrentWidth ¶
func (r *RuneBuffer) CurrentWidth(x int) int
func (*RuneBuffer) CursorLineCount ¶
func (r *RuneBuffer) CursorLineCount() int
func (*RuneBuffer) Delete ¶
func (r *RuneBuffer) Delete() (success bool)
func (*RuneBuffer) DeleteWord ¶
func (r *RuneBuffer) DeleteWord()
func (*RuneBuffer) Erase ¶
func (r *RuneBuffer) Erase()
func (*RuneBuffer) IdxLine ¶
func (r *RuneBuffer) IdxLine(width int) int
func (*RuneBuffer) IsCursorInEnd ¶
func (r *RuneBuffer) IsCursorInEnd() bool
func (*RuneBuffer) Kill ¶
func (r *RuneBuffer) Kill()
func (*RuneBuffer) KillFront ¶
func (r *RuneBuffer) KillFront()
func (*RuneBuffer) Len ¶
func (r *RuneBuffer) Len() int
func (*RuneBuffer) LineCount ¶
func (r *RuneBuffer) LineCount() int
LineCount returns number of lines the buffer takes as it appears in the terminal.
func (*RuneBuffer) MoveBackward ¶
func (r *RuneBuffer) MoveBackward()
func (*RuneBuffer) MoveForward ¶
func (r *RuneBuffer) MoveForward()
func (*RuneBuffer) MoveTo ¶
func (r *RuneBuffer) MoveTo(ch rune, prevChar, reverse bool) (success bool)
func (*RuneBuffer) MoveToEndWord ¶
func (r *RuneBuffer) MoveToEndWord()
func (*RuneBuffer) MoveToLineEnd ¶
func (r *RuneBuffer) MoveToLineEnd()
func (*RuneBuffer) MoveToLineStart ¶
func (r *RuneBuffer) MoveToLineStart()
func (*RuneBuffer) MoveToNextWord ¶
func (r *RuneBuffer) MoveToNextWord()
func (*RuneBuffer) MoveToPrevWord ¶
func (r *RuneBuffer) MoveToPrevWord() (success bool)
func (*RuneBuffer) Pos ¶
func (r *RuneBuffer) Pos() int
func (*RuneBuffer) Print ¶
func (r *RuneBuffer) Print()
Print writes out the prompt and buffer contents at the current cursor position
func (*RuneBuffer) PromptLen ¶
func (r *RuneBuffer) PromptLen() int
func (*RuneBuffer) Refresh ¶
func (r *RuneBuffer) Refresh(f func())
func (*RuneBuffer) Replace ¶
func (r *RuneBuffer) Replace(ch rune)
func (*RuneBuffer) Reset ¶
func (r *RuneBuffer) Reset() []rune
func (*RuneBuffer) Restore ¶
func (r *RuneBuffer) Restore()
func (*RuneBuffer) RuneSlice ¶
func (r *RuneBuffer) RuneSlice(i int) []rune
func (*RuneBuffer) Runes ¶
func (r *RuneBuffer) Runes() []rune
func (*RuneBuffer) Set ¶
func (r *RuneBuffer) Set(buf []rune)
func (*RuneBuffer) SetConfig ¶
func (r *RuneBuffer) SetConfig(cfg *Config)
func (*RuneBuffer) SetMask ¶
func (r *RuneBuffer) SetMask(m rune)
func (*RuneBuffer) SetOffset ¶
func (r *RuneBuffer) SetOffset(position cursorPosition)
func (*RuneBuffer) SetPrompt ¶
func (r *RuneBuffer) SetPrompt(prompt string)
func (*RuneBuffer) SetStyle ¶
func (r *RuneBuffer) SetStyle(start, end int, style string)
func (*RuneBuffer) SetWithIdx ¶
func (r *RuneBuffer) SetWithIdx(idx int, buf []rune)
func (*RuneBuffer) Transpose ¶
func (r *RuneBuffer) Transpose()
func (*RuneBuffer) WriteRune ¶
func (r *RuneBuffer) WriteRune(s rune)
func (*RuneBuffer) WriteRunes ¶
func (r *RuneBuffer) WriteRunes(s []rune)
func (*RuneBuffer) WriteString ¶
func (r *RuneBuffer) WriteString(s string)
func (*RuneBuffer) Yank ¶
func (r *RuneBuffer) Yank()
type SegmentComplete ¶
type SegmentComplete struct {
SegmentCompleter
}
func SegmentAutoComplete ¶
func SegmentAutoComplete(completer SegmentCompleter) *SegmentComplete
type SegmentCompleter ¶
type SegmentCompleter interface {
// a
// |- a1
// |--- a11
// |- a2
// b
// input:
// DoTree([], 0) [a, b]
// DoTree([a], 1) [a]
// DoTree([a, ], 0) [a1, a2]
// DoTree([a, a], 1) [a1, a2]
// DoTree([a, a1], 2) [a1]
// DoTree([a, a1, ], 0) [a11]
// DoTree([a, a1, a], 1) [a11]
DoSegment([][]rune, int) [][]rune
}
type TabCompleter ¶
type TabCompleter struct{}
type Terminal ¶
type Terminal struct {
// contains filtered or unexported fields
}
func NewTerminal ¶
func (*Terminal) EnterRawMode ¶
func (*Terminal) ExitRawMode ¶
func (*Terminal) GetCursorPosition ¶
getOffset sends a DSR query to get the current offset, then blocks until the query returns.
func (*Terminal) GetWidthHeight ¶
GetWidthHeight returns the cached width, height values from the terminal
func (*Terminal) OnSizeChange ¶
func (t *Terminal) OnSizeChange()
OnSizeChange gets the current terminal size and caches it
func (*Terminal) SleepToResume ¶
func (t *Terminal) SleepToResume()
SleepToResume will sleep myself, and return only if I'm resumed.
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
example
|
|
|
readline-demo
command
|
|
|
readline-multiline
command
|
|
|
readline-pass-strength
command
This is a small example using readline to read a password and check it's strength while typing using the zxcvbn library.
|
This is a small example using readline to read a password and check it's strength while typing using the zxcvbn library. |
|
internal
|
|
|
term
Package term provides support functions for dealing with terminals, as commonly found on UNIX systems.
|
Package term provides support functions for dealing with terminals, as commonly found on UNIX systems. |