1 Star 0 Fork 1

brucewang / qlang

forked from landy / qlang 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
terminal.go 1.63 KB
一键复制 编辑 原始数据 按行查看 历史
xushiwei 提交于 2016-06-09 17:31 . qlang tutorial: terminal
package terminal
import (
"os"
"strings"
"github.com/peterh/liner"
)
type Terminal struct {
*liner.State
promptFirst string
promptNext string
fnReadMore func(expr string, line string) (string, bool)
}
func New(promptFirst, promptNext string, fnReadMore func(expr string, line string) (string, bool)) *Terminal {
term := &Terminal{
State: liner.NewLiner(),
promptFirst: promptFirst,
promptNext: promptNext,
fnReadMore: fnReadMore,
}
term.SetCtrlCAborts(true)
return term
}
func (term *Terminal) LoadHistroy(historyFile string) error {
f, err := os.Open(historyFile)
if err != nil {
return err
}
defer f.Close()
term.ReadHistory(f)
return nil
}
func (term *Terminal) SaveHistroy(historyFile string) error {
f, err := os.Create(historyFile)
if err != nil {
return err
}
defer f.Close()
term.WriteHistory(f)
return nil
}
var (
ErrPromptAborted = liner.ErrPromptAborted
)
func (term *Terminal) Scan() (string, error) {
var all string
var more bool
prompt := term.promptFirst
fnReadMore := term.fnReadMore
for {
line, err := term.Prompt(prompt)
if err != nil {
if err == liner.ErrPromptAborted {
return all, ErrPromptAborted
}
return all, err
}
if strings.TrimSpace(line) != "" {
term.AppendHistory(line)
}
if fnReadMore == nil {
return line, nil
}
all, more = fnReadMore(all, line)
if !more {
break
}
prompt = term.promptNext
}
return all, nil
}
// Exports is the export table of this module.
//
var Exports = map[string]interface{}{
"new": New,
"supported": liner.TerminalSupported,
"mode": liner.TerminalMode,
"ErrPromptAborted": ErrPromptAborted,
}
Go
1
https://gitee.com/brucewangzhihua1/qlang.git
git@gitee.com:brucewangzhihua1/qlang.git
brucewangzhihua1
qlang
qlang
v2.9.60

搜索帮助