代码拉取完成,页面将自动刷新
同步操作将从 landy/qlang 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
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,
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。