Readline is a pure go(golang) implementation for GNU-Readline kind library
Go to file
Kris Watts 800fa3d2b8 Added the write method to the Instance object so that it can be passed around as a io.Writer object. 2015-09-23 21:22:26 -06:00
example Added the write method to the Instance object so that it can be passed around as a io.Writer object. 2015-09-23 21:22:26 -06:00
.gitignore support history 2015-09-21 13:14:10 +08:00
.travis.yml add travis 2015-09-23 13:11:42 +08:00
LICENSE Initial commit 2015-09-20 23:11:30 +08:00
README.md update readme 2015-09-23 22:18:14 +08:00
char.go fix typo 2015-09-23 13:03:13 +08:00
doc.go add doc 2015-09-23 13:55:53 +08:00
history.go fix fwd search crash 2015-09-23 14:22:22 +08:00
operation.go fix searchmode disappear in wrapWriter.Write 2015-09-23 14:04:30 +08:00
readline.go Added the write method to the Instance object so that it can be passed around as a io.Writer object. 2015-09-23 21:22:26 -06:00
runebuf.go update example 2015-09-23 14:52:45 +08:00
search.go update example 2015-09-23 14:52:45 +08:00
terminal.go refactor 2015-09-23 11:46:56 +08:00
utils.go update example 2015-09-23 14:52:45 +08:00

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

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