Compare commits

...

13 Commits

Author SHA1 Message Date
sammyette edcc1b39f0
docs: add todo to lua.go 2021-06-09 20:43:01 -04:00
sammyette 646cb93dec
feat: support comptime sample conf declaration 2021-06-09 20:33:30 -04:00
sammyette 13dc0cd857
feat: support comptime config dir declaration 2021-06-09 20:30:53 -04:00
sammyette 792ce996d3
fix: return 0 exit code when cd with noarg instead of throwing hook explicitly 2021-06-09 20:30:12 -04:00
sammyette 95dee1f4dd
fix: check aliases before going to sh interp 2021-06-09 19:16:08 -04:00
sammyette 14064eceda
chore: cleanup and remove extra spaces 2021-06-09 18:41:37 -04:00
sammyette ce5ac86a4c
docs: make build for stable release more clear 2021-06-09 18:19:52 -04:00
sammyette fa1cdbefa2
docs: move aur install step up 2021-06-09 18:18:23 -04:00
sammyette a9b39834b3
docs: make build steps clearer 2021-06-09 18:16:04 -04:00
sammyette 6cbebcbae9
docs: fix arch install step for readline 2021-06-09 18:13:43 -04:00
sammyette 42c22aac96
docs: add newline between readline dep and fedora install step 2021-06-09 18:12:45 -04:00
sammyette 084f049ba5
style: add spaces between multiply op 2021-06-09 18:10:34 -04:00
Daniel de Sá ea67ae228c
docs: add readline install for arch (#60) 2021-06-09 14:38:04 -04:00
6 changed files with 63 additions and 32 deletions

View File

@ -41,11 +41,21 @@ Then click on the artifacts drop down, and download artifact for your platform,
like what is highlighted in the screenshot.
<br><img src="https://modeus.is-inside.me/KJ0Puceb.png"><br>
### AUR
Arch Linux users can install Hilbish from the AUR.
```sh
yay -S hilbish
```
If you want the latest and greatest, you can install and compile from the latest git commit
```sh
yay -S hilbish-git
```
### Manual Build
#### Prerequisites
- [Go 1.16](https://go.dev)
- GNU Readline
On Fedora, readline can be installed with:
```
sudo dnf install readline-devel
@ -61,6 +71,11 @@ On OpenSUSE, it can be installed with:
sudo zypper install readline-devel
```
On Arch Linux, it can be installed with:
```
sudo pacman -S readline
```
#### Build
First, clone Hilbish:
```sh
@ -74,23 +89,16 @@ And get dependencies and build:
```sh
go get -d all
make dev
# If you want to use latest stable release,
make build
# or want to use Hilbiline,
make hilbiline
```
If you `git checkout`'d the latest stable release, run
`make build` instead of `make dev`.
or want to experiment Hilbiline, instead run
`make hilbiline`
#### Install
`sudo make install`
Alternatively, if you use Arch Linux, you can compile Hilbish with an **(unofficial)** AUR package:
```sh
yay -S hilbish
```
If you want the latest and greatest, you can install and compile from latest git commit:
```sh
yay -S hilbish-git
```
### Uninstall
```sh
sudo make uninstall

1
lua.go
View File

@ -42,6 +42,7 @@ func LuaInit() {
cmds := commander.New()
// When a command from Lua is added, register it for use
// TODO: maybe dont add command code to a lua table? insstead use a map
cmds.Events.On("commandRegister",
func(cmdName string, cmd *lua.LFunction) {
commands[cmdName] = true

22
main.go
View File

@ -29,17 +29,25 @@ var (
curuser *user.User
hooks bait.Bait
defaultConfPath string
)
func main() {
homedir, _ = os.UserHomeDir()
curuser, _ = user.Current()
defaultconfpath := homedir + "/.hilbishrc.lua"
if defaultConfDir == "" {
// we'll add *our* default if its empty (wont be if its changed comptime)
defaultConfPath = filepath.Join(homedir, "/.hilbishrc.lua")
} else {
// else do ~ substitution
defaultConfPath = filepath.Join(strings.Replace(defaultConfDir, "~", homedir, 1), ".hilbishrc.lua")
}
verflag := getopt.BoolLong("version", 'v', "Prints Hilbish version")
setshflag := getopt.BoolLong("setshellenv", 'S', "Sets $SHELL to Hilbish's executed path")
cmdflag := getopt.StringLong("command", 'c', "", "Executes a command on startup")
configflag := getopt.StringLong("config", 'C', defaultconfpath, "Sets the path to Hilbish's config")
configflag := getopt.StringLong("config", 'C', defaultConfPath, "Sets the path to Hilbish's config")
getopt.BoolLong("login", 'l', "Makes Hilbish act like a login shell")
getopt.BoolLong("interactive", 'i', "Force Hilbish to be an interactive shell")
getopt.BoolLong("noexec", 'n', "Don't execute and only report Lua syntax errors")
@ -81,21 +89,21 @@ func main() {
}
// If user's config doesn't exixt,
if _, err := os.Stat(defaultconfpath); os.IsNotExist(err) {
if _, err := os.Stat(defaultConfPath); os.IsNotExist(err) {
// Read default from current directory
// (this is assuming the current dir is Hilbish's git)
input, err := os.ReadFile(".hilbishrc.lua")
if err != nil {
// If it wasnt found, go to "real default"
input, err = os.ReadFile("/usr/share/hilbish/.hilbishrc.lua")
// If it wasnt found, go to the real sample conf
input, err = os.ReadFile(sampleConfPath)
if err != nil {
fmt.Println("could not find .hilbishrc.lua or /usr/share/hilbish/.hilbishrc.lua")
fmt.Println("could not find .hilbishrc.lua or", sampleConfPath)
return
}
}
// Create it using either default config we found
err = os.WriteFile(homedir + "/.hilbishrc.lua", input, 0644)
err = os.WriteFile(defaultConfPath, input, 0644)
if err != nil {
// If that fails, bail
fmt.Println("Error creating config file")

View File

@ -35,7 +35,8 @@ commander.register('cd', function (args)
return
end
fs.cd(os.getenv 'HOME')
bait.throw('command.exit', 0)
return
end)
commander.register('exit', function()
@ -44,19 +45,19 @@ end)
do
local virt_G = { }
setmetatable(_G, {
__index = function (self, key)
__index = function (_, key)
local got_virt = virt_G[key]
if got_virt ~= nil then
return got_virt
end
virt_G[key] = os.getenv(key)
return virt_G[key]
end,
__newindex = function (self, key, value)
__newindex = function (_, key, value)
if type(value) == 'string' then
os.setenv(key, value)
virt_G[key] = value
@ -68,7 +69,7 @@ do
end
end,
})
bait.catch('command.exit', function ()
for key, value in pairs(virt_G) do
if type(value) == 'string' then
@ -82,15 +83,15 @@ end
function string.split(str, delimiter)
local result = {}
local from = 1
local delim_from, delim_to = string.find(str, delimiter, from)
while delim_from do
table.insert(result, string.sub(str, from, delim_from - 1))
from = delim_to + 1
delim_from, delim_to = string.find(str, delimiter, from)
end
table.insert(result, string.sub(str, from))
return result

View File

@ -18,6 +18,17 @@ import (
func RunInput(input string) {
cmdArgs, cmdString := splitInput(input)
// If alias was found, use command alias
for aliases[cmdArgs[0]] != "" {
alias := aliases[cmdArgs[0]]
cmdString = alias + strings.TrimPrefix(cmdString, cmdArgs[0])
cmdArgs, cmdString = splitInput(cmdString)
if aliases[cmdArgs[0]] != "" {
continue
}
}
// First try to load input, essentially compiling to bytecode
fn, err := l.LoadString(cmdString)
if err != nil && noexecute {
@ -149,7 +160,7 @@ func execCommand(cmd string) error {
return interp.NewExitStatus(127)
}
return interp.DefaultExecHandler(2*time.Second)(ctx, args)
return interp.DefaultExecHandler(2 * time.Second)(ctx, args)
}
runner, _ := interp.New(
interp.StdIO(os.Stdin, os.Stdout, os.Stderr),

View File

@ -10,6 +10,8 @@ var (
.. os.getenv 'HOME' .. '/.local/share/hilbish/libs/?/?.lua;'
.. os.getenv 'HOME' .. '/.local/share/hilbish/libs/?.lua'`
preloadPath = "/usr/share/hilbish/preload.lua"
defaultConfDir = "" // ~ will be substituted for home, path for user's default config
sampleConfPath = "/usr/share/hilbish/.hilbishrc.lua" // Path to default/sample config
prompt string // Prompt will always get changed anyway
multilinePrompt = "> "