mirror of https://github.com/Hilbis/Hilbish
refactor: put file history handler in line reader instance instead of global
parent
e0694c8862
commit
8552b8968f
11
history.go
11
history.go
|
@ -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
26
rl.go
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue