mirror of
https://github.com/Hilbis/Hilbish
synced 2025-04-21 21:13:22 +00:00
Compare commits
7 Commits
c969f5ed15
...
e1f7d907a2
Author | SHA1 | Date | |
---|---|---|---|
e1f7d907a2 | |||
800a1184a2 | |||
4743222044 | |||
14a600f922 | |||
13e6d180f8 | |||
|
836f941e16 | ||
a02cd1d7ef |
@ -4,8 +4,10 @@
|
||||
### Added
|
||||
- Forward/Right arrow key will fill in hint text (#327)
|
||||
|
||||
## [2.3.4] - 2024-12-28
|
||||
### Fixed
|
||||
- Skip over file and prevent panic if info cannot be retrieved during file completion (due to permission error or anything else)
|
||||
- Apply environment variables properly after 2.3 shell interpreter changes
|
||||
|
||||
## [2.3.3] - 2024-11-04
|
||||
### Fixed
|
||||
@ -787,6 +789,7 @@ This input for example will prompt for more input to complete:
|
||||
|
||||
First "stable" release of Hilbish.
|
||||
|
||||
[2.3.4]: https://github.com/Rosettea/Hilbish/compare/v2.3.3...v2.3.4
|
||||
[2.3.3]: https://github.com/Rosettea/Hilbish/compare/v2.3.2...v2.3.3
|
||||
[2.3.2]: https://github.com/Rosettea/Hilbish/compare/v2.3.1...v2.3.2
|
||||
[2.3.1]: https://github.com/Rosettea/Hilbish/compare/v2.3.0...v2.3.1
|
||||
|
19
editor.go
19
editor.go
@ -17,6 +17,7 @@ func editorLoader(rtm *rt.Runtime) *rt.Table {
|
||||
"getVimRegister": {editorGetRegister, 2, false},
|
||||
"getLine": {editorGetLine, 0, false},
|
||||
"readChar": {editorReadChar, 0, false},
|
||||
"deleteByAmount": {editorDeleteByAmount, 1, false},
|
||||
}
|
||||
|
||||
mod := rt.NewTable()
|
||||
@ -106,3 +107,21 @@ func editorReadChar(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||
|
||||
return c.PushingNext1(t.Runtime, rt.StringValue(string(buf))), nil
|
||||
}
|
||||
|
||||
// #interface editor
|
||||
// deleteByAmount() -> string
|
||||
// Reads a keystroke from the user. This is in a format of something like Ctrl-L.
|
||||
func editorDeleteByAmount(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||
if err := c.Check1Arg(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
amount, err := c.IntArg(0)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
lr.rl.DeleteByAmount(int(amount))
|
||||
|
||||
return c.Next(), nil
|
||||
}
|
||||
|
20
exec.go
20
exec.go
@ -434,26 +434,8 @@ func execHandle(bg bool) interp.ExecHandlerFunc {
|
||||
// sh/interp but with our job handling
|
||||
|
||||
env := hc.Env
|
||||
envList := make([]string, 0, 64)
|
||||
envList := os.Environ()
|
||||
env.Each(func(name string, vr expand.Variable) bool {
|
||||
if name == "PATH" {
|
||||
pathEnv := os.Getenv("PATH")
|
||||
envList = append(envList, "PATH="+pathEnv)
|
||||
return true
|
||||
}
|
||||
|
||||
if !vr.IsSet() {
|
||||
// If a variable is set globally but unset in the
|
||||
// runner, we need to ensure it's not part of the final
|
||||
// list. Seems like zeroing the element is enough.
|
||||
// This is a linear search, but this scenario should be
|
||||
// rare, and the number of variables shouldn't be large.
|
||||
for i, kv := range envList {
|
||||
if strings.HasPrefix(kv, name+"=") {
|
||||
envList[i] = ""
|
||||
}
|
||||
}
|
||||
}
|
||||
if vr.Exported && vr.Kind == expand.String {
|
||||
envList = append(envList, name+"="+vr.String())
|
||||
}
|
||||
|
36
nature/abbr.lua
Normal file
36
nature/abbr.lua
Normal file
@ -0,0 +1,36 @@
|
||||
local bait = require 'bait'
|
||||
local hilbish = require 'hilbish'
|
||||
hilbish.abbr = {
|
||||
_abbrevs = {}
|
||||
}
|
||||
|
||||
function hilbish.abbr.add(opts)
|
||||
hilbish.abbr._abbrevs[opts.abbr] = opts
|
||||
end
|
||||
|
||||
print 'abbr loaded'
|
||||
hilbish.abbr.add {
|
||||
abbr = 'tt',
|
||||
expand = 'echo titties'
|
||||
}
|
||||
|
||||
hilbish.abbr.add {
|
||||
abbr = 'idk',
|
||||
expand = 'i dont know',
|
||||
anywhere = true
|
||||
}
|
||||
|
||||
bait.catch('hilbish.rawInput', function(c)
|
||||
-- 0x0d == enter
|
||||
if c == ' ' or c == string.char(0x0d) then
|
||||
-- check if the last "word" was a valid abbreviation
|
||||
local line = hilbish.editor.getLine()
|
||||
local lineSplits = string.split(line, ' ')
|
||||
local thisAbbr = hilbish.abbr._abbrevs[lineSplits[#lineSplits]]
|
||||
|
||||
if thisAbbr and (#lineSplits == 1 or thisAbbr.anywhere == true) then
|
||||
hilbish.editor.deleteByAmount(-lineSplits[#lineSplits]:len())
|
||||
hilbish.editor.insert(thisAbbr.expand)
|
||||
end
|
||||
end
|
||||
end)
|
@ -24,6 +24,7 @@ require 'nature.opts'
|
||||
require 'nature.vim'
|
||||
require 'nature.runner'
|
||||
require 'nature.hummingbird'
|
||||
require 'nature.abbr'
|
||||
|
||||
local shlvl = tonumber(os.getenv 'SHLVL')
|
||||
if shlvl ~= nil then
|
||||
|
@ -142,6 +142,10 @@ func (rl *Instance) viDeleteByAdjust(adjust int) {
|
||||
rl.updateHelpers()
|
||||
}
|
||||
|
||||
func (rl *Instance) DeleteByAmount(adjust int) {
|
||||
rl.viDeleteByAdjust(adjust)
|
||||
}
|
||||
|
||||
func (rl *Instance) vimDeleteToken(r rune) bool {
|
||||
tokens, _, _ := tokeniseSplitSpaces(rl.line, 0)
|
||||
pos := int(r) - 48 // convert ASCII to integer
|
||||
|
Loading…
x
Reference in New Issue
Block a user