refactor: put file history handler in line reader instance instead of global

lua-history
TorchedSammy 2022-07-09 13:51:32 -04:00
parent e0694c8862
commit 8552b8968f
Signed by: sammyette
GPG Key ID: 904FC49417B44DCD
2 changed files with 21 additions and 16 deletions

View File

@ -4,6 +4,7 @@ import (
"errors"
"io/fs"
"os"
"path/filepath"
"strings"
)
@ -12,13 +13,15 @@ type fileHistory struct {
f *os.File
}
func newFileHistory() *fileHistory {
err := os.MkdirAll(defaultHistDir, 0755)
func newFileHistory(path string) *fileHistory {
dir := filepath.Dir(path)
err := os.MkdirAll(dir, 0755)
if err != nil {
panic(err)
}
data, err := os.ReadFile(defaultHistPath)
data, err := os.ReadFile(path)
if err != nil {
if !errors.Is(err, fs.ErrNotExist) {
panic(err)
@ -33,7 +36,7 @@ func newFileHistory() *fileHistory {
}
itms = append(itms, l)
}
f, err := os.OpenFile(defaultHistPath, os.O_APPEND | os.O_WRONLY | os.O_CREATE, 0755)
f, err := os.OpenFile(path, os.O_APPEND | os.O_WRONLY | os.O_CREATE, 0755)
if err != nil {
panic(err)
}

26
rl.go
View File

@ -13,18 +13,22 @@ import (
type lineReader struct {
rl *readline.Instance
fileHist *fileHistory
}
var fileHist *fileHistory
var hinter *rt.Closure
var highlighter *rt.Closure
func newLineReader(prompt string, noHist bool) *lineReader {
rl := readline.NewInstance()
lr := &lineReader{
rl: rl,
}
// we don't mind hilbish.read rl instances having completion,
// but it cant have shared history
if !noHist {
fileHist = newFileHistory()
rl.SetHistoryCtrlR("History", fileHist)
lr.fileHist = newFileHistory(defaultHistPath)
rl.SetHistoryCtrlR("History", lr.fileHist)
rl.HistoryAutoWrite = false
}
rl.ShowVimMode = false
@ -171,9 +175,7 @@ func newLineReader(prompt string, noHist bool) *lineReader {
return pfx, compGroups
}
return &lineReader{
rl,
}
return lr
}
func (lr *lineReader) Read() (string, error) {
@ -212,7 +214,7 @@ func (lr *lineReader) SetRightPrompt(p string) {
}
func (lr *lineReader) AddHistory(cmd string) {
fileHist.Write(cmd)
lr.fileHist.Write(cmd)
}
func (lr *lineReader) ClearInput() {
@ -253,7 +255,7 @@ func (lr *lineReader) luaAddHistory(t *rt.Thread, c *rt.GoCont) (rt.Cont, error)
}
func (lr *lineReader) luaSize(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
return c.PushingNext1(t.Runtime, rt.IntValue(int64(fileHist.Len()))), nil
return c.PushingNext1(t.Runtime, rt.IntValue(int64(lr.fileHist.Len()))), nil
}
func (lr *lineReader) luaGetHistory(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
@ -265,17 +267,17 @@ func (lr *lineReader) luaGetHistory(t *rt.Thread, c *rt.GoCont) (rt.Cont, error)
return nil, err
}
cmd, _ := fileHist.GetLine(int(idx))
cmd, _ := lr.fileHist.GetLine(int(idx))
return c.PushingNext1(t.Runtime, rt.StringValue(cmd)), nil
}
func (lr *lineReader) luaAllHistory(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
tbl := rt.NewTable()
size := fileHist.Len()
size := lr.fileHist.Len()
for i := 1; i < size; i++ {
cmd, _ := fileHist.GetLine(i)
cmd, _ := lr.fileHist.GetLine(i)
tbl.Set(rt.IntValue(int64(i)), rt.StringValue(cmd))
}
@ -283,6 +285,6 @@ func (lr *lineReader) luaAllHistory(t *rt.Thread, c *rt.GoCont) (rt.Cont, error)
}
func (lr *lineReader) luaClearHistory(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
fileHist.clear()
lr.fileHist.clear()
return c.Next(), nil
}