mirror of
https://github.com/Hilbis/Hilbish
synced 2025-05-12 07:13:23 +00:00
Compare commits
8 Commits
1cb9a60539
...
c04a5122a1
Author | SHA1 | Date | |
---|---|---|---|
c04a5122a1 | |||
8731b1a7d1 | |||
4743222044 | |||
14a600f922 | |||
13e6d180f8 | |||
|
836f941e16 | ||
a02cd1d7ef | |||
eded38c7b5 |
@ -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
|
||||
|
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())
|
||||
}
|
||||
|
@ -1,3 +1,23 @@
|
||||
local fs = require 'fs'
|
||||
|
||||
-- explanation: this specific function gives to us info about
|
||||
-- the currently running source. this includes a path to the
|
||||
-- source file (info.source)
|
||||
-- we will use that to automatically load all commands by reading
|
||||
-- all the files in this dir and just requiring it.
|
||||
local info = debug.getinfo(1)
|
||||
local commandDir = fs.dir(info.source)
|
||||
if commandDir == '.' then return end
|
||||
|
||||
local commands = fs.readdir(commandDir)
|
||||
for _, command in ipairs(commands) do
|
||||
local name = command:gsub('%.lua', '') -- chop off extension
|
||||
if name ~= 'init' then
|
||||
-- skip this file (for obvious reasons)
|
||||
require('nature.completions.' .. name)
|
||||
end
|
||||
end
|
||||
|
||||
function hilbish.completion.handler(line, pos)
|
||||
if type(line) ~= 'string' then error '#1 must be a string' end
|
||||
if type(pos) ~= 'number' then error '#2 must be a number' end
|
53
nature/completions/sudo.lua
Normal file
53
nature/completions/sudo.lua
Normal file
@ -0,0 +1,53 @@
|
||||
local function curry(f)
|
||||
return function (x) return function (y) return f(x,y) end end
|
||||
end
|
||||
|
||||
local flags = {}
|
||||
local function flag(f, description)
|
||||
flags[f] = {description}
|
||||
end
|
||||
|
||||
local addflag = curry(flag)
|
||||
|
||||
addflag '-A' 'Ask for password via askpass or $SUDO_ASKPASS'
|
||||
addflag '-B' 'Ring the bell as part of the password prompt.'
|
||||
|
||||
hilbish.complete('command.sudo', function(query, ctx, fields)
|
||||
table.remove(fields, 1)
|
||||
local nonflags = table.filter(fields, function(v)
|
||||
if v == '' then
|
||||
return false
|
||||
end
|
||||
return v:match '^%-' == nil
|
||||
end)
|
||||
|
||||
if #fields == 1 or #nonflags == 0 then
|
||||
-- complete commands or sudo flags
|
||||
if query:match ('^%-') then
|
||||
local compFlags = {}
|
||||
for flg, flgstuff in pairs(flags) do
|
||||
if flg:match('^' .. query) then
|
||||
compFlags[flg] = flgstuff
|
||||
end
|
||||
end
|
||||
|
||||
local compGroup = {
|
||||
items = compFlags,
|
||||
type = 'list'
|
||||
}
|
||||
|
||||
return {compGroup}, query
|
||||
end
|
||||
|
||||
local comps, pfx = hilbish.completion.bins(query, ctx, fields)
|
||||
local compGroup = {
|
||||
items = comps,
|
||||
type = 'grid'
|
||||
}
|
||||
|
||||
return {compGroup}, pfx
|
||||
end
|
||||
|
||||
-- otherwise, get command flags
|
||||
return hilbish.completion.call('command.' .. fields[2], query, ctx, fields)
|
||||
end)
|
@ -2,9 +2,7 @@ local bait = require 'bait'
|
||||
local lunacolors = require 'lunacolors'
|
||||
|
||||
hilbish.motd = [[
|
||||
Wait ... {magenta}2.3{reset} is basically the same as {red}2.2?{reset}
|
||||
Erm.. {blue}Ctrl-C works for Commanders,{reset} {cyan}and the sh runner has some fixes.{reset}
|
||||
Just trust me bro, this is an important bug fix release. {red}- 🌺 sammyette{reset}
|
||||
{magenta}Hilbish{reset} blooms in the {blue}midnight.{reset}
|
||||
]]
|
||||
|
||||
bait.catch('hilbish.init', function()
|
||||
|
2
vars.go
2
vars.go
@ -11,7 +11,7 @@ var (
|
||||
|
||||
// Version info
|
||||
var (
|
||||
ver = "v2.3.3"
|
||||
ver = "v2.3.4"
|
||||
releaseName = "Alyssum"
|
||||
|
||||
gitCommit string
|
||||
|
Loading…
x
Reference in New Issue
Block a user