mirror of https://github.com/Hilbis/Hilbish
Compare commits
5 Commits
237bc19f68
...
5175367b35
Author | SHA1 | Date |
---|---|---|
TorchedSammy | 5175367b35 | |
TorchedSammy | 83ca8066e6 | |
TorchedSammy | 92f279e5cf | |
TorchedSammy | f26ef935dd | |
TorchedSammy | 6b9bbb615d |
18
api.go
18
api.go
|
@ -174,10 +174,8 @@ These will be formatted and replaced with the appropriate values.
|
||||||
--- @param str string
|
--- @param str string
|
||||||
*/
|
*/
|
||||||
func hlprompt(L *lua.LState) int {
|
func hlprompt(L *lua.LState) int {
|
||||||
prompt = L.CheckString(1)
|
prompt := L.CheckString(1)
|
||||||
if lr != nil {
|
lr.SetPrompt(fmtPrompt(prompt))
|
||||||
lr.SetPrompt(fmtPrompt())
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
@ -276,11 +274,13 @@ func hlgoro(L *lua.LState) int {
|
||||||
|
|
||||||
// call fn
|
// call fn
|
||||||
go func() {
|
go func() {
|
||||||
L.CallByParam(lua.P{
|
if err := L.CallByParam(lua.P{
|
||||||
Fn: fn,
|
Fn: fn,
|
||||||
NRet: 0,
|
NRet: 0,
|
||||||
Protect: true,
|
Protect: true,
|
||||||
}, args...)
|
}, args...); err != nil {
|
||||||
|
fmt.Fprintln(os.Stderr, "Error in goro function:\n\n", err)
|
||||||
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
@ -297,11 +297,13 @@ func hltimeout(L *lua.LState) int {
|
||||||
timeout := time.Duration(ms) * time.Millisecond
|
timeout := time.Duration(ms) * time.Millisecond
|
||||||
time.Sleep(timeout)
|
time.Sleep(timeout)
|
||||||
|
|
||||||
L.CallByParam(lua.P{
|
if err := L.CallByParam(lua.P{
|
||||||
Fn: cb,
|
Fn: cb,
|
||||||
NRet: 0,
|
NRet: 0,
|
||||||
Protect: true,
|
Protect: true,
|
||||||
})
|
}); err != nil {
|
||||||
|
fmt.Fprintln(os.Stderr, "Error in goro function:\n\n", err)
|
||||||
|
}
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,71 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"io/fs"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type fileHistory struct {
|
||||||
|
items []string
|
||||||
|
f *os.File
|
||||||
|
}
|
||||||
|
|
||||||
|
func newFileHistory() (*fileHistory, error) {
|
||||||
|
data, err := os.ReadFile(defaultHistPath)
|
||||||
|
if err != nil {
|
||||||
|
if !errors.Is(err, fs.ErrNotExist) {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var itms []string
|
||||||
|
for _, l := range strings.Split(string(data), "\n") {
|
||||||
|
itms = append(itms, l)
|
||||||
|
}
|
||||||
|
f, err := os.OpenFile(defaultHistPath, os.O_RDWR | os.O_CREATE, 0755)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
fh := &fileHistory{
|
||||||
|
items: itms,
|
||||||
|
f: f,
|
||||||
|
}
|
||||||
|
|
||||||
|
return fh, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *fileHistory) Write(line string) (int, error) {
|
||||||
|
if line == "" {
|
||||||
|
return len(h.items), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := h.f.WriteString(line + "\n")
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
h.f.Sync()
|
||||||
|
|
||||||
|
h.items = append(h.items, line)
|
||||||
|
return len(h.items), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *fileHistory) GetLine(idx int) (string, error) {
|
||||||
|
if len(h.items) == 0 {
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
if idx == -1 { // this should be fixed readline side
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
return h.items[idx], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *fileHistory) Len() int {
|
||||||
|
return len(h.items)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *fileHistory) Dump() interface{} {
|
||||||
|
return nil
|
||||||
|
}
|
5
main.go
5
main.go
|
@ -114,6 +114,7 @@ func main() {
|
||||||
|
|
||||||
go handleSignals()
|
go handleSignals()
|
||||||
luaInit()
|
luaInit()
|
||||||
|
lr = newLineReader("")
|
||||||
// If user's config doesn't exixt,
|
// If user's config doesn't exixt,
|
||||||
if _, err := os.Stat(defaultConfPath); os.IsNotExist(err) && *configflag == defaultConfPath {
|
if _, err := os.Stat(defaultConfPath); os.IsNotExist(err) && *configflag == defaultConfPath {
|
||||||
// Read default from current directory
|
// Read default from current directory
|
||||||
|
@ -162,12 +163,10 @@ func main() {
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
lr = newLineReader("")
|
|
||||||
input:
|
input:
|
||||||
for interactive {
|
for interactive {
|
||||||
running = false
|
running = false
|
||||||
|
|
||||||
lr.SetPrompt(fmtPrompt())
|
|
||||||
input, err := lr.Read()
|
input, err := lr.Read()
|
||||||
|
|
||||||
if err == io.EOF {
|
if err == io.EOF {
|
||||||
|
@ -225,7 +224,7 @@ func continuePrompt(prev string) (string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// This semi cursed function formats our prompt (obviously)
|
// This semi cursed function formats our prompt (obviously)
|
||||||
func fmtPrompt() string {
|
func fmtPrompt(prompt string) string {
|
||||||
host, _ := os.Hostname()
|
host, _ := os.Hostname()
|
||||||
cwd, _ := os.Getwd()
|
cwd, _ := os.Getwd()
|
||||||
|
|
||||||
|
|
5
rl.go
5
rl.go
|
@ -18,6 +18,11 @@ type lineReader struct {
|
||||||
// other gophers might hate this naming but this is local, shut up
|
// other gophers might hate this naming but this is local, shut up
|
||||||
func newLineReader(prompt string) *lineReader {
|
func newLineReader(prompt string) *lineReader {
|
||||||
rl := readline.NewInstance()
|
rl := readline.NewInstance()
|
||||||
|
fileHist, err := newFileHistory()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
rl.SetHistoryCtrlR("file", fileHist)
|
||||||
rl.ShowVimMode = false
|
rl.ShowVimMode = false
|
||||||
rl.ViModeCallback = func(mode readline.ViMode) {
|
rl.ViModeCallback = func(mode readline.ViMode) {
|
||||||
modeStr := ""
|
modeStr := ""
|
||||||
|
|
1
vars.go
1
vars.go
|
@ -7,7 +7,6 @@ var (
|
||||||
defaultHistDir = ""
|
defaultHistDir = ""
|
||||||
commonRequirePaths = "';./libs/?/init.lua;./?/init.lua;./?/?.lua'"
|
commonRequirePaths = "';./libs/?/init.lua;./?/init.lua;./?/?.lua'"
|
||||||
|
|
||||||
prompt string // Prompt will always get changed anyway
|
|
||||||
multilinePrompt = "> "
|
multilinePrompt = "> "
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue