improve readme
1 file changed
tree: 3bd078330ae34f03fa10a09aae0375f45f35865a
  1. example/
  2. .gitignore
  3. .travis.yml
  4. char.go
  5. history.go
  6. LICENSE
  7. operation.go
  8. readline.go
  9. README.md
  10. runebuf.go
  11. search.go
  12. terminal.go
  13. utils.go
README.md

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

ShortcutCommentSupport
Ctrl+ABeginning of lineYes
Ctrl+B / Backward one characterYes
Meta+BBackward one wordYes
Ctrl+CSend io.EOFYes
Ctrl+DDelete one characterYes
Meta+DDelete one wordYes
Ctrl+EEnd of lineYes
Ctrl+F / Forward one characterYes
Meta+FForward one wordYes
Ctrl+GCancelYes
Ctrl+HDelete previous characterYes
Ctrl+I / TabCommand line completionNo
Ctrl+JLine feedYes
Ctrl+KCut text to the end of lineYes
Ctrl+LClean screenNo
Ctrl+MSame as Enter keyYes
Ctrl+N / Next line (in history)Yes
Ctrl+P / Prev line (in history)Yes
Ctrl+RSearch backwards in historyYes
Ctrl+SSearch forwards in historyYes
Ctrl+TTranspose charactersYes
Meta+TTranspose wordsNo
Ctrl+UCut text to the beginning of lineNo
Ctrl+WCut previous wordYes
BackspaceDelete previous characterYes
Meta+BackspaceCut previous wordYes
EnterLine feedYes

Feedback

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