readline

package
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Oct 16, 2017 License: Apache-2.0, MIT Imports: 19 Imported by: 0

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

Package terminal provides support functions for dealing with terminals, as commonly found on UNIX systems.

Putting a terminal into raw mode is the most common requirement:

oldState, err := terminal.MakeRaw(0)
if err != nil {
        panic(err)
}
defer terminal.Restore(0, oldState)

Index

Constants

View Source
const (
	T_DATA = MsgType(iota)
	T_WIDTH
	T_WIDTH_REPORT
	T_ISTTY_REPORT
	T_RAW
	T_ERAW // exit raw
	T_EOF
)
View Source
const (
	S_STATE_FOUND = iota
	S_STATE_FAILING
)
View Source
const (
	S_DIR_BCK = iota
	S_DIR_FWD
)
View Source
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
	CharCtrlZ     = 26
	CharEsc       = 27
	CharEscapeEx  = 91
	CharBackspace = 127
)
View Source
const (
	MetaBackward rune = -iota - 1
	MetaForward
	MetaDelete
	MetaBackspace
	MetaTranspose
)
View Source
const (
	VIM_NORMAL = iota
	VIM_INSERT
	VIM_VISUAL
)

Variables

View Source
var (
	Stdin  io.ReadCloser  = os.Stdin
	Stdout io.WriteCloser = os.Stdout
	Stderr io.WriteCloser = os.Stderr
)
View Source
var (
	ErrInterrupt = errors.New("Interrupt")
)
View Source
var TabWidth = 4

Functions

func AddHistory

func AddHistory(content string) error

add history to global instance manually raise error only if `SetHistoryPath` is set with a non-empty path

func ClearScreen

func ClearScreen(w io.Writer) (int, error)

ClearScreen clears the console screen

func Debug

func Debug(o ...interface{})

append log info to another file

func DefaultIsTerminal

func DefaultIsTerminal() bool

func DefaultOnWidthChanged

func DefaultOnWidthChanged(f func())

func DialRemote

func DialRemote(n, addr string) error

func Do

func Do(p PrefixCompleterInterface, line []rune, pos int) (newLine [][]rune, offset int)

func GetInt

func GetInt(s []string, def int) int

func GetScreenWidth

func GetScreenWidth() int

func GetSize

func GetSize(fd int) (width, height int, err error)

GetSize returns the dimensions of the given terminal.

func GetStdin

func GetStdin() int

func IsPrintable

func IsPrintable(key rune) bool

func IsTerminal

func IsTerminal(fd int) bool

IsTerminal returns true if the given file descriptor is a terminal.

func IsWordBreak

func IsWordBreak(i rune) bool

func Line

func Line(prompt string) (string, error)

readline with global configs

func LineCount

func LineCount(screenWidth, w int) int

calculate how many lines for N character

func ListenRemote

func ListenRemote(n, addr string, cfg *Config, h func(*Instance), onListen ...func(net.Listener) error) error

func Password

func Password(prompt string) ([]byte, error)

func Print

func Print(p PrefixCompleterInterface, prefix string, level int, buf *bytes.Buffer)

func ReadPassword

func ReadPassword(fd int) ([]byte, error)

ReadPassword reads a line of input from a terminal without local echo. This is commonly used for inputting passwords and other sensitive data. The slice returned does not include the \n.

func Restore

func Restore(fd int, state *State) error

func RetSegment

func RetSegment(segments [][]rune, cands [][]rune, idx int) ([][]rune, int)

func SetAutoComplete

func SetAutoComplete(completer AutoCompleter)

set auto completer to global instance

func SetHistoryPath

func SetHistoryPath(fp string)

let readline load history from filepath and try to persist history into disk set fp to "" to prevent readline persisting history to disk so the `AddHistory` will return nil error forever.

func SplitByLine

func SplitByLine(start, screenWidth int, rs []rune) []string

func SplitSegment

func SplitSegment(line []rune, pos int) ([][]rune, int)

func SuspendMe

func SuspendMe()

SuspendMe use to send suspend signal to myself, when we in the raw mode. For OSX it need to send to parent's pid For Linux it need to send to myself

func WaitForResume

func WaitForResume() chan struct{}

WaitForResume need to call before current process got suspend. It will run a ticker until a long duration is occurs, which means this process is resumed.

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 CancelableStdin

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

func NewCancelableStdin

func NewCancelableStdin(r io.Reader) *CancelableStdin

func (*CancelableStdin) Close

func (c *CancelableStdin) Close() error

func (*CancelableStdin) Read

func (c *CancelableStdin) Read(b []byte) (n int, err error)

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

	// If VimMode is true, readline will in vim.insert mode by default
	VimMode bool

	InterruptPrompt string
	EOFPrompt       string

	FuncGetWidth func() 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

	// 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
}

func (Config) Clone

func (c Config) Clone() *Config

func (*Config) Init

func (c *Config) Init() error

func (*Config) SetListener

func (c *Config) SetListener(f func(line []rune, pos int, key rune) (newLine []rune, newPos int, ok bool))

type DumpListener

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

func (*DumpListener) OnChange

func (d *DumpListener) OnChange(line []rune, pos int, key rune) (newLine []rune, newPos int, ok bool)

type DynamicCompleteFunc

type DynamicCompleteFunc func(string) []string

Caller type for dynamic completion

type DynamicPrefixCompleterInterface

type DynamicPrefixCompleterInterface interface {
	PrefixCompleterInterface
	IsDynamic() bool
	GetDynamicNames(line []rune) [][]rune
}

type Instance

type Instance struct {
	Config    *Config
	Terminal  *Terminal
	Operation *Operation
}

func HandleConn

func HandleConn(cfg Config, conn net.Conn) (*Instance, error)

func New

func New(prompt string) (*Instance, error)

func NewEx

func NewEx(cfg *Config) (*Instance, error)

func (*Instance) Clean

func (i *Instance) Clean()

func (*Instance) Close

func (i *Instance) Close() error

we must make sure that call Close() before process exit.

func (*Instance) GenPasswordConfig

func (i *Instance) GenPasswordConfig() *Config

func (*Instance) IsVimMode

func (i *Instance) IsVimMode() bool

func (*Instance) Line

func (i *Instance) Line() *Result

func (*Instance) ReadPassword

func (i *Instance) ReadPassword(prompt string) ([]byte, error)

func (*Instance) ReadPasswordEx

func (i *Instance) ReadPasswordEx(prompt string, l Listener) ([]byte, error)

func (*Instance) ReadPasswordWithConfig

func (i *Instance) ReadPasswordWithConfig(cfg *Config) ([]byte, error)

we can generate a config by `i.GenPasswordConfig()`

func (*Instance) ReadSlice

func (i *Instance) ReadSlice() ([]byte, error)

same as readline

func (*Instance) Readline

func (i *Instance) Readline() (string, error)

err is one of (nil, io.EOF, readline.ErrInterrupt)

func (*Instance) Refresh

func (i *Instance) Refresh()

func (*Instance) ResetHistory

func (i *Instance) ResetHistory()

func (*Instance) SaveHistory

func (i *Instance) SaveHistory(content string) error

func (*Instance) SetConfig

func (i *Instance) SetConfig(cfg *Config) *Config

func (*Instance) SetHistoryPath

func (i *Instance) SetHistoryPath(p string)

change history persistence in runtime

func (*Instance) SetMaskRune

func (i *Instance) SetMaskRune(r rune)

func (*Instance) SetPrompt

func (i *Instance) SetPrompt(s string)

func (*Instance) SetVimMode

func (i *Instance) SetVimMode(on bool)

switch VimMode in runtime

func (*Instance) Stderr

func (i *Instance) Stderr() io.Writer

readline will refresh automatic when write through Stdout()

func (*Instance) Stdout

func (i *Instance) Stdout() io.Writer

readline will refresh automatic when write through Stdout()

func (*Instance) Write

func (i *Instance) Write(b []byte) (int, error)

type InterruptError

type InterruptError struct {
	Line []rune
}

func (*InterruptError) Error

func (*InterruptError) Error() string

type Listener

type Listener interface {
	OnChange(line []rune, pos int, key rune) (newLine []rune, newPos int, ok bool)
}

func FuncListener

func FuncListener(f func(line []rune, pos int, key rune) (newLine []rune, newPos int, ok bool)) Listener

type Message

type Message struct {
	Type MsgType
	Data []byte
}

func NewMessage

func NewMessage(t MsgType, data []byte) *Message

func ReadMessage

func ReadMessage(r io.Reader) (*Message, error)

func (*Message) WriteTo

func (m *Message) WriteTo(w io.Writer) (int, error)

type MsgType

type MsgType int16

type Operation

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

func NewOperation

func NewOperation(t *Terminal, cfg *Config) *Operation

func (*Operation) Clean

func (o *Operation) Clean()

func (*Operation) Close

func (o *Operation) Close()

func (Operation) CompleteRefresh

func (o Operation) CompleteRefresh()

func (Operation) EnterCompleteMode

func (o Operation) EnterCompleteMode(offset int, candidate [][]rune)

func (Operation) EnterCompleteSelectMode

func (o Operation) EnterCompleteSelectMode()

func (Operation) EnterPasswordMode

func (o Operation) EnterPasswordMode(cfg *Config) (err error)

func (Operation) EnterVimInsertMode

func (o Operation) EnterVimInsertMode()

func (Operation) ExitCompleteMode

func (o Operation) ExitCompleteMode(revent bool)

func (Operation) ExitCompleteSelectMode

func (o Operation) ExitCompleteSelectMode()

func (Operation) ExitPasswordMode

func (o Operation) ExitPasswordMode()

func (Operation) ExitSearchMode

func (o Operation) ExitSearchMode(revert bool)

func (Operation) ExitVimInsertMode

func (o Operation) ExitVimInsertMode()

func (Operation) ExitVimMode

func (o Operation) ExitVimMode()

func (*Operation) GenPasswordConfig

func (o *Operation) GenPasswordConfig() *Config

func (Operation) HandleCompleteSelect

func (o Operation) HandleCompleteSelect(r rune) bool

func (Operation) HandleVim

func (o Operation) HandleVim(r rune, readNext func() rune) rune

func (Operation) HandleVimNormal

func (o Operation) HandleVimNormal(r rune, readNext func() rune) (t rune)

func (Operation) IsEnableVimMode

func (o Operation) IsEnableVimMode() bool

func (Operation) IsInCompleteMode

func (o Operation) IsInCompleteMode() bool

func (Operation) IsInCompleteSelectMode

func (o Operation) IsInCompleteSelectMode() bool

func (*Operation) IsNormalMode

func (o *Operation) IsNormalMode() bool

func (Operation) IsSearchMode

func (o Operation) IsSearchMode() bool

func (Operation) OnComplete

func (o Operation) OnComplete() bool

func (*Operation) Password

func (o *Operation) Password(prompt string) ([]byte, error)

func (Operation) PasswordConfig

func (o Operation) PasswordConfig() *Config

func (*Operation) PasswordEx

func (o *Operation) PasswordEx(prompt string, l Listener) ([]byte, error)

func (*Operation) PasswordWithConfig

func (o *Operation) PasswordWithConfig(cfg *Config) ([]byte, error)

func (*Operation) Refresh

func (o *Operation) Refresh()

func (*Operation) ResetHistory

func (o *Operation) ResetHistory()

func (*Operation) Runes

func (o *Operation) Runes() ([]rune, error)

func (*Operation) SaveHistory

func (o *Operation) SaveHistory(content string) error

if err is not nil, it just mean it fail to write to file other things goes fine.

func (Operation) SearchBackspace

func (o Operation) SearchBackspace()

func (Operation) SearchChar

func (o Operation) SearchChar(r rune)

func (Operation) SearchMode

func (o Operation) SearchMode(dir int) bool

func (Operation) SearchRefresh

func (o Operation) SearchRefresh(x int)

func (*Operation) SetConfig

func (op *Operation) SetConfig(cfg *Config) (*Config, error)

func (*Operation) SetHistoryPath

func (o *Operation) SetHistoryPath(path string)

func (*Operation) SetMaskRune

func (o *Operation) SetMaskRune(r rune)

func (*Operation) SetPrompt

func (o *Operation) SetPrompt(s string)

func (*Operation) SetTitle

func (o *Operation) SetTitle(t string)

func (Operation) SetVimMode

func (o Operation) SetVimMode(on bool)

func (*Operation) Slice

func (o *Operation) Slice() ([]byte, error)

func (*Operation) Stderr

func (o *Operation) Stderr() io.Writer

func (*Operation) Stdout

func (o *Operation) Stdout() io.Writer

func (*Operation) String

func (o *Operation) String() (string, error)

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 (*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 PrefixCompleterInterface

type PrefixCompleterInterface interface {
	Print(prefix string, level int, buf *bytes.Buffer)
	Do(line []rune, pos int) (newLine [][]rune, length int)
	GetName() []rune
	GetChildren() []PrefixCompleterInterface
	SetChildren(children []PrefixCompleterInterface)
}

type RawMode

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

func (*RawMode) Enter

func (r *RawMode) Enter() (err error)

func (*RawMode) Exit

func (r *RawMode) Exit() error

type RemoteCli

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

func NewRemoteCli

func NewRemoteCli(conn net.Conn) (*RemoteCli, error)

func (*RemoteCli) Close

func (r *RemoteCli) Close()

func (*RemoteCli) MarkIsTerminal

func (r *RemoteCli) MarkIsTerminal(is bool)

func (*RemoteCli) Serve

func (r *RemoteCli) Serve() error

func (*RemoteCli) ServeBy

func (r *RemoteCli) ServeBy(source io.Reader) error

func (*RemoteCli) Write

func (r *RemoteCli) Write(b []byte) (int, error)

type RemoteSvr

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

func NewRemoteSvr

func NewRemoteSvr(conn net.Conn) (*RemoteSvr, error)

func (*RemoteSvr) Close

func (r *RemoteSvr) Close()

func (*RemoteSvr) EnterRawMode

func (r *RemoteSvr) EnterRawMode() error

func (*RemoteSvr) ExitRawMode

func (r *RemoteSvr) ExitRawMode() error

func (*RemoteSvr) GetWidth

func (r *RemoteSvr) GetWidth() int

func (*RemoteSvr) GotIsTerminal

func (r *RemoteSvr) GotIsTerminal(data []byte)

func (*RemoteSvr) GotReportWidth

func (r *RemoteSvr) GotReportWidth(data []byte)

func (*RemoteSvr) HandleConfig

func (r *RemoteSvr) HandleConfig(cfg *Config)

func (*RemoteSvr) IsTerminal

func (r *RemoteSvr) IsTerminal() bool

func (*RemoteSvr) Read

func (r *RemoteSvr) Read(b []byte) (int, error)

func (*RemoteSvr) Write

func (r *RemoteSvr) Write(b []byte) (int, error)

type Result

type Result struct {
	Line  string
	Error error
}

func (*Result) CanBreak

func (l *Result) CanBreak() bool

func (*Result) CanContinue

func (l *Result) CanContinue() bool

type RuneBuffer

type RuneBuffer struct {
	sync.Mutex
	// contains filtered or unexported fields
}

func NewRuneBuffer

func NewRuneBuffer(w io.Writer, prompt string, cfg *Config, width int) *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(width int) int

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

func (r *RuneBuffer) OnWidthChange(newWidth int)

func (*RuneBuffer) Pos

func (r *RuneBuffer) Pos() int

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(offset string)

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)

type Runes

type Runes struct{}

func (Runes) Aggregate

func (Runes) Aggregate(candicate [][]rune) (same []rune, size int)

func (Runes) Backspace

func (Runes) Backspace(r []rune) []byte

func (Runes) ColorFilter

func (Runes) ColorFilter(r []rune) []rune

func (Runes) Copy

func (Runes) Copy(r []rune) []rune

func (Runes) Equal

func (Runes) Equal(a, b []rune) bool

func (Runes) EqualFold

func (r Runes) EqualFold(a, b []rune) bool

func (Runes) EqualRune

func (Runes) EqualRune(a, b rune, fold bool) bool

func (Runes) EqualRuneFold

func (r Runes) EqualRuneFold(a, b rune) bool

func (Runes) HasPrefix

func (Runes) HasPrefix(r, prefix []rune) bool

func (Runes) HasPrefixFold

func (Runes) HasPrefixFold(r, prefix []rune) bool

func (Runes) Index

func (Runes) Index(r rune, rs []rune) int

func (Runes) IndexAll

func (rs Runes) IndexAll(r, sub []rune) int

Search in runes from front to end

func (Runes) IndexAllBck

func (rs Runes) IndexAllBck(r, sub []rune) int

Search in runes from end to front

func (Runes) IndexAllBckEx

func (rs Runes) IndexAllBckEx(r, sub []rune, fold bool) int

func (Runes) IndexAllEx

func (rs Runes) IndexAllEx(r, sub []rune, fold bool) int

func (Runes) TrimSpaceLeft

func (Runes) TrimSpaceLeft(in []rune) []rune

func (Runes) Width

func (Runes) Width(r rune) int

func (Runes) WidthAll

func (Runes) WidthAll(r []rune) (length int)

type SegmentComplete

type SegmentComplete struct {
	SegmentCompleter
}

func SegmentAutoComplete

func SegmentAutoComplete(completer SegmentCompleter) *SegmentComplete

func (*SegmentComplete) Do

func (c *SegmentComplete) Do(line []rune, pos int) (newLine [][]rune, offset int)

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 State

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

State contains the state of a terminal.

func GetState

func GetState(fd int) (*State, error)

GetState returns the current state of a terminal which may be useful to restore the terminal after a signal.

func MakeRaw

func MakeRaw(fd int) (*State, error)

MakeRaw put the terminal connected to the given file descriptor into raw mode and returns the previous state of the terminal so that it can be restored.

type TabCompleter

type TabCompleter struct{}

func (*TabCompleter) Do

func (t *TabCompleter) Do([]rune, int) ([][]rune, int)

type Terminal

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

func NewTerminal

func NewTerminal(cfg *Config) (*Terminal, error)

func (*Terminal) Bell

func (t *Terminal) Bell()

func (*Terminal) Close

func (t *Terminal) Close() error

func (*Terminal) EnterRawMode

func (t *Terminal) EnterRawMode() (err error)

func (*Terminal) ExitRawMode

func (t *Terminal) ExitRawMode() (err error)

func (*Terminal) GetOffset

func (t *Terminal) GetOffset(f func(offset string))

func (*Terminal) IsReading

func (t *Terminal) IsReading() bool

func (*Terminal) KickRead

func (t *Terminal) KickRead()

func (*Terminal) Print

func (t *Terminal) Print(s string)

func (*Terminal) PrintRune

func (t *Terminal) PrintRune(r rune)

func (*Terminal) ReadRune

func (t *Terminal) ReadRune() rune

return rune(0) if meet EOF

func (*Terminal) Readline

func (t *Terminal) Readline() *Operation

func (*Terminal) SetConfig

func (t *Terminal) SetConfig(c *Config) error

func (*Terminal) SleepToResume

func (t *Terminal) SleepToResume()

SleepToResume will sleep myself, and return only if I'm resumed.

func (*Terminal) Write

func (t *Terminal) Write(b []byte) (int, error)

Jump to

Keyboard shortcuts

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