readline

package module
v0.0.0-...-800fa3d Latest Latest
Warning

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

Go to latest
Published: Sep 24, 2015 License: MIT Imports: 13 Imported by: 0

README

readline

Software License Build Status GoDoc

Readline is a pure go implementation for GNU-Readline kind library.

WHY: Readline will support most of features which GNU Readline is supported, and provide a pure go environment and a MIT license.

Demo

demo

You can read the source code in example/main.go.

Usage

  • Simplest example
import "github.com/chzyer/readline"

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)
}
  • Example with durable history
rl, err := readline.NewEx(&readline.Config{
	Prompt: "> ",
	HistoryFile: "/tmp/readline.tmp",
})
if err != nil {
	panic(err)
}
defer rl.Close()

for {
	line, err := rl.Readline()
	if err != nil { // io.EOF
		break
	}
	println(line)
}
  • Example with auto refresh
import (
	"log"
	"github.com/chzyer/readline"
)

rl, err := readline.New("> ")
if err != nil {
	panic(err)
}
defer rl.Close()
log.SetOutput(l.Stderr()) // let "log" write to l.Stderr instead of os.Stderr

go func() {
	for _ = range time.Tick(time.Second) {
		log.Println("hello")
	}
}()

for {
	line, err := rl.Readline()
	if err != nil { // io.EOF
		break
	}
	println(line)
}

Shortcut

Meta+B means press Esc and n separately.
Users can change that in terminal simulator(i.e. iTerm2) to Alt+B

Shortcut Comment Support
Ctrl+A Beginning of line Yes
Ctrl+B / Backward one character Yes
Meta+B Backward one word Yes
Ctrl+C Send io.EOF Yes
Ctrl+D Delete one character Yes
Meta+D Delete one word Yes
Ctrl+E End of line Yes
Ctrl+F / Forward one character Yes
Meta+F Forward one word Yes
Ctrl+G Cancel Yes
Ctrl+H Delete previous character Yes
Ctrl+I / Tab Command line completion NoYet
Ctrl+J Line feed Yes
Ctrl+K Cut text to the end of line Yes
Ctrl+L Clean screen NoYet
Ctrl+M Same as Enter key Yes
Ctrl+N / Next line (in history) Yes
Ctrl+P / Prev line (in history) Yes
Ctrl+R Search backwards in history Yes
Ctrl+S Search forwards in history Yes
Ctrl+T Transpose characters Yes
Meta+T Transpose words NoYet
Ctrl+U Cut text to the beginning of line NoYet
Ctrl+W Cut previous word Yes
Backspace Delete previous character Yes
Meta+Backspace Cut previous word Yes
Enter Line feed Yes

Feedback

If you have any question, please submit an GitHub Issues and any pull request is welcomed :)

Documentation

Overview

Readline is a pure go implementation for GNU-Readline kind library.

WHY: Readline will support most of features which GNU Readline is supported, and provide a pure go environment and a MIT license.

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

View Source
const (
	CharLineStart = 1
	CharBackward  = 2
	CharInterrupt = 3
	CharDelete    = 4
	CharLineEnd   = 5
	CharForward   = 6
	CharCannel    = 7
	CharCtrlH     = 8
	CharCtrlJ     = 10
	CharKill      = 11
	CharEnter     = 13
	CharNext      = 14
	CharPrev      = 16
	CharBckSearch = 18
	CharFwdSearch = 19
	CharTranspose = 20
	CharCtrlW     = 23
	CharEsc       = 27
	CharEscapeEx  = 91
	CharBackspace = 127
)
View Source
const (
	MetaPrev = -iota - 1
	MetaNext
	MetaDelete
	MetaBackspace
	MetaTranspose
)
View Source
const (
	S_STATE_FOUND = iota
	S_STATE_FAILING
)
View Source
const (
	S_DIR_BCK = iota
	S_DIR_FWD
)

Variables

This section is empty.

Functions

func Debug

func Debug(o ...interface{})

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 LineCount

func LineCount(w int) int

func MakeRaw

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

func Restore

func Restore(fd int, state *terminal.State) error

func RunesIndex

func RunesIndex(r, sub []rune) int

func RunesIndexBck

func RunesIndexBck(r, sub []rune) int

func RunesWidth

func RunesWidth(r []rune) (length int)

Types

type Config

type Config struct {
	Prompt      string
	HistoryFile string
}

type Instance

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

func New

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

func NewEx

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

func (*Instance) Close

func (i *Instance) Close() error

func (*Instance) ReadSlice

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

func (*Instance) Readline

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

func (*Instance) Stderr

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

func (*Instance) Write

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

type Operation

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

func NewOperation

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

func (*Operation) Close

func (o *Operation) Close()

func (Operation) ExitSearchMode

func (o Operation) ExitSearchMode(revert bool)

func (Operation) FindHistoryBck

func (o Operation) FindHistoryBck(isNewSearch bool, rs []rune, start int) (int, *list.Element)

func (Operation) FindHistoryFwd

func (o Operation) FindHistoryFwd(isNewSearch bool, rs []rune, start int) (int, *list.Element)

func (Operation) IsSearchMode

func (o Operation) IsSearchMode() bool

func (Operation) NewHistory

func (o Operation) NewHistory(current []rune)

func (Operation) NextHistory

func (o Operation) NextHistory() ([]rune, bool)

func (Operation) PrevHistory

func (o Operation) PrevHistory() []rune

func (Operation) PushHistory

func (o Operation) PushHistory(s []rune)

func (*Operation) Runes

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

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)

func (Operation) SearchRefresh

func (o Operation) SearchRefresh(x int)

func (*Operation) Slice

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

func (*Operation) Stderr

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

func (*Operation) String

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

func (Operation) UpdateHistory

func (o Operation) UpdateHistory(s []rune, commit bool)

type RuneBuffer

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

func NewRuneBuffer

func NewRuneBuffer(w io.Writer, prompt string) *RuneBuffer

func (*RuneBuffer) BackEscapeWord

func (r *RuneBuffer) BackEscapeWord()

func (*RuneBuffer) Backspace

func (r *RuneBuffer) Backspace()

func (*RuneBuffer) Clean

func (r *RuneBuffer) Clean()

func (*RuneBuffer) CleanOutput

func (r *RuneBuffer) CleanOutput() []byte

func (*RuneBuffer) CursorLineCount

func (r *RuneBuffer) CursorLineCount() int

func (*RuneBuffer) Delete

func (r *RuneBuffer) Delete()

func (*RuneBuffer) DeleteWord

func (r *RuneBuffer) DeleteWord()

func (*RuneBuffer) IdxLine

func (r *RuneBuffer) IdxLine() int

func (*RuneBuffer) Kill

func (r *RuneBuffer) Kill()

func (*RuneBuffer) Len

func (r *RuneBuffer) Len() int

func (*RuneBuffer) LineCount

func (r *RuneBuffer) LineCount() int

func (*RuneBuffer) MoveBackward

func (r *RuneBuffer) MoveBackward()

func (*RuneBuffer) MoveForward

func (r *RuneBuffer) MoveForward()

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

func (*RuneBuffer) Output

func (r *RuneBuffer) Output() []byte

func (*RuneBuffer) Pos

func (r *RuneBuffer) Pos() int

func (*RuneBuffer) PromptLen

func (r *RuneBuffer) PromptLen() int

func (*RuneBuffer) Refresh

func (r *RuneBuffer) Refresh()

func (*RuneBuffer) Reset

func (r *RuneBuffer) Reset() []rune

func (*RuneBuffer) Runes

func (r *RuneBuffer) Runes() []rune

func (*RuneBuffer) Set

func (r *RuneBuffer) Set(buf []rune)

func (*RuneBuffer) SetIdx

func (r *RuneBuffer) SetIdx(idx int) (change int)

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 Terminal

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

func NewTerminal

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

func (*Terminal) Close

func (t *Terminal) Close() error

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

func (*Terminal) Readline

func (t *Terminal) Readline() *Operation

func (*Terminal) Write

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

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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