mirror of
				https://github.com/sammy-ette/Hilbish
				synced 2025-08-10 02:52:03 +00:00 
			
		
		
		
	refactor: put file history handler in line reader instance instead of global
This commit is contained in:
		
							parent
							
								
									e0694c8862
								
							
						
					
					
						commit
						8552b8968f
					
				
							
								
								
									
										11
									
								
								history.go
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								history.go
									
									
									
									
									
								
							| @ -4,6 +4,7 @@ import ( | |||||||
| 	"errors" | 	"errors" | ||||||
| 	"io/fs" | 	"io/fs" | ||||||
| 	"os" | 	"os" | ||||||
|  | 	"path/filepath" | ||||||
| 	"strings" | 	"strings" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| @ -12,13 +13,15 @@ type fileHistory struct { | |||||||
| 	f *os.File | 	f *os.File | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func newFileHistory() *fileHistory { | func newFileHistory(path string) *fileHistory { | ||||||
| 	err := os.MkdirAll(defaultHistDir, 0755) | 	dir := filepath.Dir(path) | ||||||
|  | 
 | ||||||
|  | 	err := os.MkdirAll(dir, 0755) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		panic(err) | 		panic(err) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	data, err := os.ReadFile(defaultHistPath) | 	data, err := os.ReadFile(path) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		if !errors.Is(err, fs.ErrNotExist) { | 		if !errors.Is(err, fs.ErrNotExist) { | ||||||
| 			panic(err) | 			panic(err) | ||||||
| @ -33,7 +36,7 @@ func newFileHistory() *fileHistory { | |||||||
| 		} | 		} | ||||||
| 		itms = append(itms, l) | 		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 { | 	if err != nil { | ||||||
| 		panic(err) | 		panic(err) | ||||||
| 	} | 	} | ||||||
|  | |||||||
							
								
								
									
										26
									
								
								rl.go
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								rl.go
									
									
									
									
									
								
							| @ -13,18 +13,22 @@ import ( | |||||||
| 
 | 
 | ||||||
| type lineReader struct { | type lineReader struct { | ||||||
| 	rl *readline.Instance | 	rl *readline.Instance | ||||||
|  | 	fileHist *fileHistory | ||||||
| } | } | ||||||
| var fileHist *fileHistory |  | ||||||
| var hinter *rt.Closure | var hinter *rt.Closure | ||||||
| var highlighter *rt.Closure | var highlighter *rt.Closure | ||||||
| 
 | 
 | ||||||
| func newLineReader(prompt string, noHist bool) *lineReader { | func newLineReader(prompt string, noHist bool) *lineReader { | ||||||
| 	rl := readline.NewInstance() | 	rl := readline.NewInstance() | ||||||
|  | 	lr := &lineReader{ | ||||||
|  | 		rl: rl, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	// we don't mind hilbish.read rl instances having completion, | 	// we don't mind hilbish.read rl instances having completion, | ||||||
| 	// but it cant have shared history | 	// but it cant have shared history | ||||||
| 	if !noHist { | 	if !noHist { | ||||||
| 		fileHist = newFileHistory() | 		lr.fileHist = newFileHistory(defaultHistPath) | ||||||
| 		rl.SetHistoryCtrlR("History", fileHist) | 		rl.SetHistoryCtrlR("History", lr.fileHist) | ||||||
| 		rl.HistoryAutoWrite = false | 		rl.HistoryAutoWrite = false | ||||||
| 	} | 	} | ||||||
| 	rl.ShowVimMode = false | 	rl.ShowVimMode = false | ||||||
| @ -171,9 +175,7 @@ func newLineReader(prompt string, noHist bool) *lineReader { | |||||||
| 		return pfx, compGroups | 		return pfx, compGroups | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return &lineReader{ | 	return lr | ||||||
| 		rl, |  | ||||||
| 	} |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (lr *lineReader) Read() (string, error) { | func (lr *lineReader) Read() (string, error) { | ||||||
| @ -212,7 +214,7 @@ func (lr *lineReader) SetRightPrompt(p string) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (lr *lineReader) AddHistory(cmd string) { | func (lr *lineReader) AddHistory(cmd string) { | ||||||
| 	fileHist.Write(cmd) | 	lr.fileHist.Write(cmd) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (lr *lineReader) ClearInput() { | 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) { | 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) { | 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 | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	cmd, _ := fileHist.GetLine(int(idx)) | 	cmd, _ := lr.fileHist.GetLine(int(idx)) | ||||||
| 
 | 
 | ||||||
| 	return c.PushingNext1(t.Runtime, rt.StringValue(cmd)), nil | 	return c.PushingNext1(t.Runtime, rt.StringValue(cmd)), nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (lr *lineReader) luaAllHistory(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) { | func (lr *lineReader) luaAllHistory(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) { | ||||||
| 	tbl := rt.NewTable() | 	tbl := rt.NewTable() | ||||||
| 	size := fileHist.Len() | 	size := lr.fileHist.Len() | ||||||
| 
 | 
 | ||||||
| 	for i := 1; i < size; i++ { | 	for i := 1; i < size; i++ { | ||||||
| 		cmd, _ := fileHist.GetLine(i) | 		cmd, _ := lr.fileHist.GetLine(i) | ||||||
| 		tbl.Set(rt.IntValue(int64(i)), rt.StringValue(cmd)) | 		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) { | func (lr *lineReader) luaClearHistory(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) { | ||||||
| 	fileHist.clear() | 	lr.fileHist.clear() | ||||||
| 	return c.Next(), nil | 	return c.Next(), nil | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user