aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/peterh/liner/README.md
blob: 9148b249298ec033d1ab117fcbce53b3278f0a24 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
Liner
=====

Liner is a command line editor with history. It was inspired by linenoise;
everything Unix-like is a VT100 (or is trying very hard to be). If your
terminal is not pretending to be a VT100, change it. Liner also support
Windows.

Liner is released under the X11 license (which is similar to the new BSD
license).

Line Editing
------------

The following line editing commands are supported on platforms and terminals
that Liner supports:

Keystroke    | Action
---------    | ------
Ctrl-A, Home | Move cursor to beginning of line
Ctrl-E, End  | Move cursor to end of line
Ctrl-B, Left | Move cursor one character left
Ctrl-F, Right| Move cursor one character right
Ctrl-Left, Alt-B    | Move cursor to previous word
Ctrl-Right, Alt-F   | Move cursor to next word
Ctrl-D, Del  | (if line is *not* empty) Delete character under cursor
Ctrl-D       | (if line *is* empty) End of File - usually quits application
Ctrl-C       | Reset input (create new empty prompt)
Ctrl-L       | Clear screen (line is unmodified)
Ctrl-T       | Transpose previous character with current character
Ctrl-H, BackSpace | Delete character before cursor
Ctrl-W       | Delete word leading up to cursor
Ctrl-K       | Delete from cursor to end of line
Ctrl-U       | Delete from start of line to cursor
Ctrl-P, Up   | Previous match from history
Ctrl-N, Down | Next match from history
Ctrl-R       | Reverse Search history (Ctrl-S forward, Ctrl-G cancel)
Ctrl-Y       | Paste from Yank buffer (Alt-Y to paste next yank instead)
Tab          | Next completion
Shift-Tab    | (after Tab) Previous completion

Getting started
-----------------

```go
package main

import (
    "log"
    "os"
    "path/filepath"
    "strings"

    "github.com/peterh/liner"
)

var (
    history_fn = filepath.Join(os.TempDir(), ".liner_example_history")
    names      = []string{"john", "james", "mary", "nancy"}
)

func main() {
    line := liner.NewLiner()
    defer line.Close()

    line.SetCtrlCAborts(true)

    line.SetCompleter(func(line string) (c []string) {
        for _, n := range names {
            if strings.HasPrefix(n, strings.ToLower(line)) {
                c = append(c, n)
            }
        }
        return
    })

    if f, err := os.Open(history_fn); err == nil {
        line.ReadHistory(f)
        f.Close()
    }

    if name, err := line.Prompt("What is your name? "); err == nil {
        log.Print("Got: ", name)
        line.AppendHistory(name)
    } else if err == liner.ErrPromptAborted {
        log.Print("Aborted")
    } else {
        log.Print("Error reading line: ", err)
    }

    if f, err := os.Create(history_fn); err != nil {
        log.Print("Error writing history file: ", err)
    } else {
        line.WriteHistory(f)
        f.Close()
    }
}
```

For documentation, see http://godoc.org/github.com/peterh/liner