mirror of https://github.com/Hilbis/Hilbish
Compare commits
16 Commits
65ff0c77ab
...
90023ffa89
Author | SHA1 | Date |
---|---|---|
sammyette | 90023ffa89 | |
sammyette | 66c1eb95cd | |
sammyette | 309b7605e3 | |
sammyette | f94b8ae59b | |
sammyette | 7b3dc951c9 | |
sammyette | 0a49e1a4ef | |
TorchedSammy | 6ca36847f1 | |
TorchedSammy | 5ca728ba06 | |
sammyette | 813354b662 | |
TorchedSammy | 8d40179a73 | |
TorchedSammy | f7e725b5b9 | |
sammyette | 4ee160fb66 | |
TorchedSammy | 1024f93446 | |
TorchedSammy | 9c8d7692bc | |
TorchedSammy | 9131c72501 | |
TorchedSammy | 26ff6c9a46 |
|
@ -0,0 +1,31 @@
|
||||||
|
name: Build website
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- website
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Setup Hugo
|
||||||
|
uses: peaceiris/actions-hugo@v2
|
||||||
|
with:
|
||||||
|
hugo-version: 'latest'
|
||||||
|
extended: true
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: 'cd website && hugo --minify'
|
||||||
|
|
||||||
|
- name: Deploy
|
||||||
|
uses: peaceiris/actions-gh-pages@v3
|
||||||
|
with:
|
||||||
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
publish_dir: ./website/public
|
16
CHANGELOG.md
16
CHANGELOG.md
|
@ -1,9 +1,16 @@
|
||||||
# 🎀 Changelog
|
# 🎀 Changelog
|
||||||
|
|
||||||
## Unreleased
|
## Unreleased
|
||||||
**NOTE:** Hilbish now uses [Task] insead of Make for builds.
|
**NOTES FOR USERS/PACKAGERS UPDATING:**
|
||||||
Windows support is also now at a lower tier; The only thing guaranteed is
|
- Hilbish now uses [Task] insead of Make for builds.
|
||||||
Hilbish *compiling* on Windows.
|
- The doc format has been changed from plain text to markdown.
|
||||||
|
**YOU MUST reinstall Hilbish to remove the duplicate, old docs.**
|
||||||
|
- Hilbish will by default install to **`/usr/local`** instead of just `/usr/`
|
||||||
|
when building via Task. This is mainly to avoid conflict of distro packages
|
||||||
|
and local installs, and is the correct place when building from git either way.
|
||||||
|
To keep Hilbish in `/usr`, you must have `PREFIX="/usr/"` when running `task build` or `task install`
|
||||||
|
- Windows is no longer supported. It will build and run, but **will** have problems.
|
||||||
|
If you want to help fix the situation, start a discussion or open an issue and contribute.
|
||||||
|
|
||||||
[Task]: https://taskfile.dev/#/
|
[Task]: https://taskfile.dev/#/
|
||||||
|
|
||||||
|
@ -103,6 +110,7 @@ of a dot. (ie. `job.stop()` -> `job:stop()`)
|
||||||
- All `fs` module functions which take paths now implicitly expand ~ to home.
|
- All `fs` module functions which take paths now implicitly expand ~ to home.
|
||||||
- **Breaking Change:** `hilbish.greeting` has been moved to an opt (`hilbish.opts.greeting`) and is
|
- **Breaking Change:** `hilbish.greeting` has been moved to an opt (`hilbish.opts.greeting`) and is
|
||||||
always printed by default. To disable it, set the opt to false.
|
always printed by default. To disable it, set the opt to false.
|
||||||
|
- **Breaking Change:** `command.no-perm` hook has been replaced with `command.not-executable`
|
||||||
- History is now fetched from Lua, which means users can override `hilbish.history`
|
- History is now fetched from Lua, which means users can override `hilbish.history`
|
||||||
methods to make it act how they want.
|
methods to make it act how they want.
|
||||||
- `guide` has been removed. See the [website](https://rosettea.github.io/Hilbish/)
|
- `guide` has been removed. See the [website](https://rosettea.github.io/Hilbish/)
|
||||||
|
@ -161,6 +169,8 @@ will result in the files being completed.
|
||||||
- Cut off item names in grid menu if its longer than cell width
|
- Cut off item names in grid menu if its longer than cell width
|
||||||
- Fix completion search menu disappearing
|
- Fix completion search menu disappearing
|
||||||
- Completion paths having duplicated characters if it's escaped
|
- Completion paths having duplicated characters if it's escaped
|
||||||
|
- Get custom completion command properly to call from Lua
|
||||||
|
- Put proper command on the line when using up and down arrow keys to go through command history
|
||||||
|
|
||||||
## [2.0.0-rc1] - 2022-09-14
|
## [2.0.0-rc1] - 2022-09-14
|
||||||
This is a pre-release version of Hilbish for testing. To see the changelog,
|
This is a pre-release version of Hilbish for testing. To see the changelog,
|
||||||
|
|
|
@ -69,7 +69,7 @@ If you're new to nix you should probably read up on how to do that [here](https:
|
||||||
## Manual Build
|
## Manual Build
|
||||||
### Prerequisites
|
### Prerequisites
|
||||||
- [Go 1.17+](https://go.dev)
|
- [Go 1.17+](https://go.dev)
|
||||||
- [Task](https://taskfile.dev/#/)
|
- [Task](https://taskfile.dev/installation/) (**Go on the hyperlink here to see Task's install method for your OS.**)
|
||||||
|
|
||||||
### Build
|
### Build
|
||||||
First, clone Hilbish. The recursive is required, as some Lua libraries
|
First, clone Hilbish. The recursive is required, as some Lua libraries
|
||||||
|
|
|
@ -3,19 +3,19 @@
|
||||||
version: '3'
|
version: '3'
|
||||||
|
|
||||||
vars:
|
vars:
|
||||||
PREFIX: '{{default "/usr" .PREFIX}}'
|
PREFIX: '{{default "/usr/local" .PREFIX}}'
|
||||||
bindir__: '{{.PREFIX}}/bin'
|
bindir__: '{{.PREFIX}}/bin'
|
||||||
BINDIR: '{{default .bindir__ .BINDIR}}'
|
BINDIR: '{{default .bindir__ .BINDIR}}'
|
||||||
libdir__: '{{.PREFIX}}/share/hilbish'
|
libdir__: '{{.PREFIX}}/share/hilbish'
|
||||||
LIBDIR: '{{default .libdir__ .LIBDIR}}'
|
LIBDIR: '{{default .libdir__ .LIBDIR}}'
|
||||||
GOFLAGS: '-ldflags "-s -w"'
|
GOFLAGS: '-ldflags "-s -w -X main.dataDir={{.LIBDIR}}"'
|
||||||
|
|
||||||
tasks:
|
tasks:
|
||||||
default:
|
default:
|
||||||
cmds:
|
cmds:
|
||||||
- CGO_ENABLED=0 go build {{.GOFLAGS}}
|
- CGO_ENABLED=0 go build {{.GOFLAGS}}
|
||||||
vars:
|
vars:
|
||||||
GOFLAGS: '-ldflags "-s -w -X main.gitCommit=$(git rev-parse --short HEAD) -X main.gitBranch=$(git rev-parse --abbrev-ref HEAD)"'
|
GOFLAGS: '-ldflags "-s -w -X main.dataDir={{.LIBDIR}} -X main.gitCommit=$(git rev-parse --short HEAD) -X main.gitBranch=$(git rev-parse --abbrev-ref HEAD)"'
|
||||||
|
|
||||||
build:
|
build:
|
||||||
cmds:
|
cmds:
|
||||||
|
|
|
@ -29,6 +29,7 @@ type emmyPiece struct {
|
||||||
|
|
||||||
type module struct {
|
type module struct {
|
||||||
Docs []docPiece
|
Docs []docPiece
|
||||||
|
Fields []docPiece
|
||||||
Properties []docPiece
|
Properties []docPiece
|
||||||
ShortDescription string
|
ShortDescription string
|
||||||
Description string
|
Description string
|
||||||
|
@ -45,6 +46,7 @@ type docPiece struct {
|
||||||
GoFuncName string
|
GoFuncName string
|
||||||
IsInterface bool
|
IsInterface bool
|
||||||
IsMember bool
|
IsMember bool
|
||||||
|
Fields []docPiece
|
||||||
Properties []docPiece
|
Properties []docPiece
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,7 +118,15 @@ func setupDoc(mod string, fun *doc.Func) *docPiece {
|
||||||
}
|
}
|
||||||
em := emmyPiece{FuncName: funcName}
|
em := emmyPiece{FuncName: funcName}
|
||||||
|
|
||||||
// manage properties
|
// manage fields
|
||||||
|
fields := []docPiece{}
|
||||||
|
for _, tag := range tags["field"] {
|
||||||
|
fields = append(fields, docPiece{
|
||||||
|
FuncName: tag.id,
|
||||||
|
Doc: tag.fields,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
properties := []docPiece{}
|
properties := []docPiece{}
|
||||||
for _, tag := range tags["property"] {
|
for _, tag := range tags["property"] {
|
||||||
properties = append(properties, docPiece{
|
properties = append(properties, docPiece{
|
||||||
|
@ -159,6 +169,7 @@ func setupDoc(mod string, fun *doc.Func) *docPiece {
|
||||||
IsInterface: inInterface,
|
IsInterface: inInterface,
|
||||||
IsMember: isMember,
|
IsMember: isMember,
|
||||||
ParentModule: parentMod,
|
ParentModule: parentMod,
|
||||||
|
Fields: fields,
|
||||||
Properties: properties,
|
Properties: properties,
|
||||||
}
|
}
|
||||||
if strings.HasSuffix(dps.GoFuncName, strings.ToLower("loader")) {
|
if strings.HasSuffix(dps.GoFuncName, strings.ToLower("loader")) {
|
||||||
|
@ -253,6 +264,7 @@ func main() {
|
||||||
desc := piece.Doc[1:]
|
desc := piece.Doc[1:]
|
||||||
interfaceModules[modname].ShortDescription = shortDesc
|
interfaceModules[modname].ShortDescription = shortDesc
|
||||||
interfaceModules[modname].Description = strings.Join(desc, "\n")
|
interfaceModules[modname].Description = strings.Join(desc, "\n")
|
||||||
|
interfaceModules[modname].Fields = piece.Fields
|
||||||
interfaceModules[modname].Properties = piece.Properties
|
interfaceModules[modname].Properties = piece.Properties
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -295,13 +307,23 @@ func main() {
|
||||||
f, _ := os.Create(docPath)
|
f, _ := os.Create(docPath)
|
||||||
f.WriteString(fmt.Sprintf(header, modOrIface, modname, modu.ShortDescription))
|
f.WriteString(fmt.Sprintf(header, modOrIface, modname, modu.ShortDescription))
|
||||||
f.WriteString(fmt.Sprintf("## Introduction\n%s\n\n", modu.Description))
|
f.WriteString(fmt.Sprintf("## Introduction\n%s\n\n", modu.Description))
|
||||||
|
if len(modu.Fields) != 0 {
|
||||||
|
f.WriteString("## Interface fields\n")
|
||||||
|
for _, dps := range modu.Fields {
|
||||||
|
f.WriteString(fmt.Sprintf("- `%s`: ", dps.FuncName))
|
||||||
|
f.WriteString(strings.Join(dps.Doc, " "))
|
||||||
|
f.WriteString("\n")
|
||||||
|
}
|
||||||
|
f.WriteString("\n")
|
||||||
|
}
|
||||||
if len(modu.Properties) != 0 {
|
if len(modu.Properties) != 0 {
|
||||||
f.WriteString("## Properties\n")
|
f.WriteString("## Object properties\n")
|
||||||
for _, dps := range modu.Properties {
|
for _, dps := range modu.Properties {
|
||||||
f.WriteString(fmt.Sprintf("- `%s`: ", dps.FuncName))
|
f.WriteString(fmt.Sprintf("- `%s`: ", dps.FuncName))
|
||||||
f.WriteString(strings.Join(dps.Doc, " "))
|
f.WriteString(strings.Join(dps.Doc, " "))
|
||||||
f.WriteString("\n")
|
f.WriteString("\n")
|
||||||
}
|
}
|
||||||
|
f.WriteString("\n")
|
||||||
}
|
}
|
||||||
if len(modu.Docs) != 0 {
|
if len(modu.Docs) != 0 {
|
||||||
f.WriteString("## Functions\n")
|
f.WriteString("## Functions\n")
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
---
|
||||||
|
name: Interface hilbish.jobs
|
||||||
|
description: background job management
|
||||||
|
layout: apidoc
|
||||||
|
---
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
Manage interactive jobs in Hilbish via Lua.
|
||||||
|
|
||||||
|
Jobs are the name of background tasks/commands. A job can be started via
|
||||||
|
interactive usage or with the functions defined below for use in external runners.
|
||||||
|
|
||||||
|
## Object properties
|
||||||
|
- `cmd`: The user entered command string for the job.
|
||||||
|
- `running`: Whether the job is running or not.
|
||||||
|
- `id`: The ID of the job in the job table
|
||||||
|
- `pid`: The Process ID
|
||||||
|
- `exitCode`: The last exit code of the job.
|
||||||
|
- `stdout`: The standard output of the job. This just means the normal logs of the process.
|
||||||
|
- `stderr`: The standard error stream of the process. This (usually) includes error messages of the job.
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
### background()
|
||||||
|
Puts a job in the background. This acts the same as initially running a job.
|
||||||
|
|
||||||
|
### foreground()
|
||||||
|
Puts a job in the foreground. This will cause it to run like it was
|
||||||
|
executed normally and wait for it to complete.
|
||||||
|
|
||||||
|
### start()
|
||||||
|
Starts running the job.
|
||||||
|
|
||||||
|
### stop()
|
||||||
|
Stops the job from running.
|
||||||
|
|
||||||
|
### add(cmdstr, args, execPath)
|
||||||
|
Adds a new job to the job table. Note that this does not immediately run it.
|
||||||
|
|
||||||
|
### all()
|
||||||
|
Returns a table of all job objects.
|
||||||
|
|
||||||
|
### disown(id)
|
||||||
|
Disowns a job. This deletes it from the job table.
|
||||||
|
|
||||||
|
### get(id)
|
||||||
|
Get a job object via its ID.
|
||||||
|
|
||||||
|
### last() -> Job
|
||||||
|
Returns the last added job from the table.
|
||||||
|
|
|
@ -9,7 +9,8 @@ The `os` interface provides simple text information properties about
|
||||||
the current OS on the systen. This mainly includes the name and
|
the current OS on the systen. This mainly includes the name and
|
||||||
version.
|
version.
|
||||||
|
|
||||||
## Properties
|
## Interface fields
|
||||||
- `family`: Family name of the current OS
|
- `family`: Family name of the current OS
|
||||||
- `name`: Pretty name of the current OS
|
- `name`: Pretty name of the current OS
|
||||||
- `version`: Version of the current OS
|
- `version`: Version of the current OS
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
---
|
||||||
|
name: Interface hilbish.runner
|
||||||
|
description: interactive command runner customization
|
||||||
|
layout: apidoc
|
||||||
|
---
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
The runner interface contains functions that allow the user to change
|
||||||
|
how Hilbish interprets interactive input.
|
||||||
|
Users can add and change the default runner for interactive input to any
|
||||||
|
language or script of their choosing. A good example is using it to
|
||||||
|
write command in Fennel.
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
### setMode(cb)
|
||||||
|
This is the same as the `hilbish.runnerMode` function. It takes a callback,
|
||||||
|
which will be used to execute all interactive input.
|
||||||
|
In normal cases, neither callbacks should be overrided by the user,
|
||||||
|
as the higher level functions listed below this will handle it.
|
||||||
|
|
||||||
|
### lua(cmd)
|
||||||
|
Evaluates `cmd` as Lua input. This is the same as using `dofile`
|
||||||
|
or `load`, but is appropriated for the runner interface.
|
||||||
|
|
||||||
|
### sh(cmd)
|
||||||
|
Runs a command in Hilbish's shell script interpreter.
|
||||||
|
This is the equivalent of using `source`.
|
||||||
|
|
|
@ -9,6 +9,7 @@ This interface just contains properties to know about certain user directories.
|
||||||
It is equivalent to XDG on Linux and gets the user's preferred directories
|
It is equivalent to XDG on Linux and gets the user's preferred directories
|
||||||
for configs and data.
|
for configs and data.
|
||||||
|
|
||||||
## Properties
|
## Interface fields
|
||||||
- `config`: The user's config directory
|
- `config`: The user's config directory
|
||||||
- `data`: The user's directory for program data
|
- `data`: The user's directory for program data
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,12 @@ local hilbish = {}
|
||||||
--- @param cmd string
|
--- @param cmd string
|
||||||
function hilbish.aliases.add(alias, cmd) end
|
function hilbish.aliases.add(alias, cmd) end
|
||||||
|
|
||||||
|
--- This is the same as the `hilbish.runnerMode` function. It takes a callback,
|
||||||
|
--- which will be used to execute all interactive input.
|
||||||
|
--- In normal cases, neither callbacks should be overrided by the user,
|
||||||
|
--- as the higher level functions listed below this will handle it.
|
||||||
|
function hilbish.runner.setMode(cb) end
|
||||||
|
|
||||||
--- Calls a completer function. This is mainly used to call
|
--- Calls a completer function. This is mainly used to call
|
||||||
--- a command completer, which will have a `name` in the form
|
--- a command completer, which will have a `name` in the form
|
||||||
--- of `command.name`, example: `command.git`
|
--- of `command.name`, example: `command.git`
|
||||||
|
@ -122,12 +128,33 @@ function hilbish.timeout(cb, time) end
|
||||||
--- @param binName string
|
--- @param binName string
|
||||||
function hilbish.which(name) end
|
function hilbish.which(name) end
|
||||||
|
|
||||||
|
--- Puts a job in the background. This acts the same as initially running a job.
|
||||||
|
function hilbish.jobs:background() end
|
||||||
|
|
||||||
--- Returns binary/executale completion candidates based on the provided query.
|
--- Returns binary/executale completion candidates based on the provided query.
|
||||||
function hilbish.completions.bins(query, ctx, fields) end
|
function hilbish.completions.bins(query, ctx, fields) end
|
||||||
|
|
||||||
--- Returns file completion candidates based on the provided query.
|
--- Returns file completion candidates based on the provided query.
|
||||||
function hilbish.completions.files(query, ctx, fields) end
|
function hilbish.completions.files(query, ctx, fields) end
|
||||||
|
|
||||||
|
--- Puts a job in the foreground. This will cause it to run like it was
|
||||||
|
--- executed normally and wait for it to complete.
|
||||||
|
function hilbish.jobs:foreground() end
|
||||||
|
|
||||||
|
--- Evaluates `cmd` as Lua input. This is the same as using `dofile`
|
||||||
|
--- or `load`, but is appropriated for the runner interface.
|
||||||
|
function hilbish.runner.lua(cmd) end
|
||||||
|
|
||||||
|
--- Starts running the job.
|
||||||
|
function hilbish.jobs:start() end
|
||||||
|
|
||||||
|
--- Stops the job from running.
|
||||||
|
function hilbish.jobs.stop() end
|
||||||
|
|
||||||
|
--- Runs a command in Hilbish's shell script interpreter.
|
||||||
|
--- This is the equivalent of using `source`.
|
||||||
|
function hilbish.runner.sh(cmd) end
|
||||||
|
|
||||||
--- Stops a timer.
|
--- Stops a timer.
|
||||||
function hilbish.timers:stop() end
|
function hilbish.timers:stop() end
|
||||||
|
|
||||||
|
@ -142,6 +169,21 @@ function hilbish.aliases.list() end
|
||||||
--- @param alias string
|
--- @param alias string
|
||||||
function hilbish.aliases.resolve(alias) end
|
function hilbish.aliases.resolve(alias) end
|
||||||
|
|
||||||
|
--- Adds a new job to the job table. Note that this does not immediately run it.
|
||||||
|
function hilbish.jobs.add(cmdstr, args, execPath) end
|
||||||
|
|
||||||
|
--- Returns a table of all job objects.
|
||||||
|
function hilbish.jobs.all() end
|
||||||
|
|
||||||
|
--- Disowns a job. This deletes it from the job table.
|
||||||
|
function hilbish.jobs.disown(id) end
|
||||||
|
|
||||||
|
--- Get a job object via its ID.
|
||||||
|
function hilbish.jobs.get(id) end
|
||||||
|
|
||||||
|
--- Returns the last added job from the table.
|
||||||
|
function hilbish.jobs.last() end
|
||||||
|
|
||||||
--- Adds a command to the history.
|
--- Adds a command to the history.
|
||||||
--- @param cmd string
|
--- @param cmd string
|
||||||
function hilbish.history.add(cmd) end
|
function hilbish.history.add(cmd) end
|
||||||
|
|
4
exec.go
4
exec.go
|
@ -141,10 +141,10 @@ func runInput(input string, priv bool) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if exErr, ok := isExecError(err); ok {
|
if exErr, ok := isExecError(err); ok {
|
||||||
hooks.Emit("command." + exErr.typ, exErr.cmd)
|
hooks.Emit("command." + exErr.typ, exErr.cmd)
|
||||||
err = exErr.sprint()
|
} else {
|
||||||
}
|
|
||||||
fmt.Fprintln(os.Stderr, err)
|
fmt.Fprintln(os.Stderr, err)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
cmdFinish(exitCode, input, priv)
|
cmdFinish(exitCode, input, priv)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -29,4 +29,4 @@ replace github.com/maxlandon/readline => ./readline
|
||||||
|
|
||||||
replace layeh.com/gopher-luar => github.com/layeh/gopher-luar v1.0.10
|
replace layeh.com/gopher-luar => github.com/layeh/gopher-luar v1.0.10
|
||||||
|
|
||||||
replace github.com/arnodel/golua => github.com/Rosettea/golua v0.0.0-20220518005949-116371948fe3
|
replace github.com/arnodel/golua => github.com/Rosettea/golua v0.0.0-20221213193027-cbf6d4e4d345
|
||||||
|
|
4
go.sum
4
go.sum
|
@ -2,6 +2,10 @@ github.com/Rosettea/golua v0.0.0-20220419183026-6d22d6fec5ac h1:dtXrgjch8PQyf7C9
|
||||||
github.com/Rosettea/golua v0.0.0-20220419183026-6d22d6fec5ac/go.mod h1:9jzpYPiU2is0HVGCiuIOBSXdergHUW44IEjmuN1UrIE=
|
github.com/Rosettea/golua v0.0.0-20220419183026-6d22d6fec5ac/go.mod h1:9jzpYPiU2is0HVGCiuIOBSXdergHUW44IEjmuN1UrIE=
|
||||||
github.com/Rosettea/golua v0.0.0-20220518005949-116371948fe3 h1:I/wWr40FFLFF9pbT3wLb1FAEZhKb/hUWE+nJ5uHBK2g=
|
github.com/Rosettea/golua v0.0.0-20220518005949-116371948fe3 h1:I/wWr40FFLFF9pbT3wLb1FAEZhKb/hUWE+nJ5uHBK2g=
|
||||||
github.com/Rosettea/golua v0.0.0-20220518005949-116371948fe3/go.mod h1:9jzpYPiU2is0HVGCiuIOBSXdergHUW44IEjmuN1UrIE=
|
github.com/Rosettea/golua v0.0.0-20220518005949-116371948fe3/go.mod h1:9jzpYPiU2is0HVGCiuIOBSXdergHUW44IEjmuN1UrIE=
|
||||||
|
github.com/Rosettea/golua v0.0.0-20220621002945-b05143999437 h1:6lWu4YVLeKuZ8jR9xwHONhkHBsrIbw5dpfG1gtOVw0A=
|
||||||
|
github.com/Rosettea/golua v0.0.0-20220621002945-b05143999437/go.mod h1:9jzpYPiU2is0HVGCiuIOBSXdergHUW44IEjmuN1UrIE=
|
||||||
|
github.com/Rosettea/golua v0.0.0-20221213193027-cbf6d4e4d345 h1:QNYjYDogUSiNUkffbhFSrSCtpZhofeiVYGFN2FI4wSs=
|
||||||
|
github.com/Rosettea/golua v0.0.0-20221213193027-cbf6d4e4d345/go.mod h1:9jzpYPiU2is0HVGCiuIOBSXdergHUW44IEjmuN1UrIE=
|
||||||
github.com/Rosettea/sh/v3 v3.4.0-0.dev.0.20220306140409-795a84b00b4e h1:P2XupP8SaylWaudD1DqbWtZ3mIa8OsE9635LmR+Q+lg=
|
github.com/Rosettea/sh/v3 v3.4.0-0.dev.0.20220306140409-795a84b00b4e h1:P2XupP8SaylWaudD1DqbWtZ3mIa8OsE9635LmR+Q+lg=
|
||||||
github.com/Rosettea/sh/v3 v3.4.0-0.dev.0.20220306140409-795a84b00b4e/go.mod h1:R09vh/04ILvP2Gj8/Z9Jd0Dh0ZIvaucowMEs6abQpWs=
|
github.com/Rosettea/sh/v3 v3.4.0-0.dev.0.20220306140409-795a84b00b4e/go.mod h1:R09vh/04ILvP2Gj8/Z9Jd0Dh0ZIvaucowMEs6abQpWs=
|
||||||
github.com/Rosettea/sh/v3 v3.4.0-0.dev.0.20220524215627-dfd9a4fa219b h1:s5eDMhBk6H1BgipgLub/gv9qeyBaTuiHM0k3h2/9TSE=
|
github.com/Rosettea/sh/v3 v3.4.0-0.dev.0.20220524215627-dfd9a4fa219b h1:s5eDMhBk6H1BgipgLub/gv9qeyBaTuiHM0k3h2/9TSE=
|
||||||
|
|
45
job.go
45
job.go
|
@ -110,6 +110,10 @@ func (j *job) getProc() *os.Process {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #interface jobs
|
||||||
|
// #member
|
||||||
|
// start()
|
||||||
|
// Starts running the job.
|
||||||
func luaStartJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
func luaStartJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||||
if err := c.Check1Arg(); err != nil {
|
if err := c.Check1Arg(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -130,6 +134,9 @@ func luaStartJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||||
return c.Next(), nil
|
return c.Next(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #interface jobs
|
||||||
|
// stop()
|
||||||
|
// Stops the job from running.
|
||||||
func luaStopJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
func luaStopJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||||
if err := c.Check1Arg(); err != nil {
|
if err := c.Check1Arg(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -148,6 +155,11 @@ func luaStopJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||||
return c.Next(), nil
|
return c.Next(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #interface jobs
|
||||||
|
// #member
|
||||||
|
// foreground()
|
||||||
|
// Puts a job in the foreground. This will cause it to run like it was
|
||||||
|
// executed normally and wait for it to complete.
|
||||||
func luaForegroundJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
func luaForegroundJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||||
if err := c.Check1Arg(); err != nil {
|
if err := c.Check1Arg(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -180,6 +192,10 @@ func luaForegroundJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||||
return c.Next(), nil
|
return c.Next(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #interface jobs
|
||||||
|
// #member
|
||||||
|
// background()
|
||||||
|
// Puts a job in the background. This acts the same as initially running a job.
|
||||||
func luaBackgroundJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
func luaBackgroundJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||||
if err := c.Check1Arg(); err != nil {
|
if err := c.Check1Arg(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -276,6 +292,20 @@ func (j *jobHandler) stopAll() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #interface jobs
|
||||||
|
// #property cmd The user entered command string for the job.
|
||||||
|
// #property running Whether the job is running or not.
|
||||||
|
// #property id The ID of the job in the job table
|
||||||
|
// #property pid The Process ID
|
||||||
|
// #property exitCode The last exit code of the job.
|
||||||
|
// #property stdout The standard output of the job. This just means the normal logs of the process.
|
||||||
|
// #property stderr The standard error stream of the process. This (usually) includes error messages of the job.
|
||||||
|
// background job management
|
||||||
|
/*
|
||||||
|
Manage interactive jobs in Hilbish via Lua.
|
||||||
|
|
||||||
|
Jobs are the name of background tasks/commands. A job can be started via
|
||||||
|
interactive usage or with the functions defined below for use in external runners. */
|
||||||
func (j *jobHandler) loader(rtm *rt.Runtime) *rt.Table {
|
func (j *jobHandler) loader(rtm *rt.Runtime) *rt.Table {
|
||||||
jobMethods := rt.NewTable()
|
jobMethods := rt.NewTable()
|
||||||
jFuncs := map[string]util.LuaExport{
|
jFuncs := map[string]util.LuaExport{
|
||||||
|
@ -353,6 +383,9 @@ func jobUserData(j *job) *rt.UserData {
|
||||||
return rt.NewUserData(j, jobMeta.AsTable())
|
return rt.NewUserData(j, jobMeta.AsTable())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #interface jobs
|
||||||
|
// get(id)
|
||||||
|
// Get a job object via its ID.
|
||||||
func (j *jobHandler) luaGetJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
func (j *jobHandler) luaGetJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||||
j.mu.RLock()
|
j.mu.RLock()
|
||||||
defer j.mu.RUnlock()
|
defer j.mu.RUnlock()
|
||||||
|
@ -373,6 +406,9 @@ func (j *jobHandler) luaGetJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||||
return c.PushingNext(t.Runtime, rt.UserDataValue(job.ud)), nil
|
return c.PushingNext(t.Runtime, rt.UserDataValue(job.ud)), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #interface jobs
|
||||||
|
// add(cmdstr, args, execPath)
|
||||||
|
// Adds a new job to the job table. Note that this does not immediately run it.
|
||||||
func (j *jobHandler) luaAddJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
func (j *jobHandler) luaAddJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||||
if err := c.CheckNArgs(3); err != nil {
|
if err := c.CheckNArgs(3); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -402,6 +438,9 @@ func (j *jobHandler) luaAddJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||||
return c.PushingNext1(t.Runtime, rt.UserDataValue(jb.ud)), nil
|
return c.PushingNext1(t.Runtime, rt.UserDataValue(jb.ud)), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #interface jobs
|
||||||
|
// all()
|
||||||
|
// Returns a table of all job objects.
|
||||||
func (j *jobHandler) luaAllJobs(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
func (j *jobHandler) luaAllJobs(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||||
j.mu.RLock()
|
j.mu.RLock()
|
||||||
defer j.mu.RUnlock()
|
defer j.mu.RUnlock()
|
||||||
|
@ -414,6 +453,9 @@ func (j *jobHandler) luaAllJobs(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||||
return c.PushingNext1(t.Runtime, rt.TableValue(jobTbl)), nil
|
return c.PushingNext1(t.Runtime, rt.TableValue(jobTbl)), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #interface jobs
|
||||||
|
// disown(id)
|
||||||
|
// Disowns a job. This deletes it from the job table.
|
||||||
func (j *jobHandler) luaDisownJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
func (j *jobHandler) luaDisownJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||||
if err := c.Check1Arg(); err != nil {
|
if err := c.Check1Arg(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -431,6 +473,9 @@ func (j *jobHandler) luaDisownJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||||
return c.Next(), nil
|
return c.Next(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #interface jobs
|
||||||
|
// last() -> Job
|
||||||
|
// Returns the last added job from the table.
|
||||||
func (j *jobHandler) luaLastJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
func (j *jobHandler) luaLastJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||||
j.mu.RLock()
|
j.mu.RLock()
|
||||||
defer j.mu.RUnlock()
|
defer j.mu.RUnlock()
|
||||||
|
|
|
@ -24,7 +24,7 @@ function hilbish.completion.handler(line, pos)
|
||||||
return {compGroup}, pfx
|
return {compGroup}, pfx
|
||||||
else
|
else
|
||||||
local ok, compGroups, pfx = pcall(hilbish.completion.call,
|
local ok, compGroups, pfx = pcall(hilbish.completion.call,
|
||||||
'command.' .. #fields[1], query, ctx, fields)
|
'command.' .. fields[1], query, ctx, fields)
|
||||||
if ok then
|
if ok then
|
||||||
return compGroups, pfx
|
return compGroups, pfx
|
||||||
end
|
end
|
||||||
|
|
|
@ -69,3 +69,11 @@ end
|
||||||
bait.catch('error', function(event, handler, err)
|
bait.catch('error', function(event, handler, err)
|
||||||
bait.release(event, handler)
|
bait.release(event, handler)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
bait.catch('command.not-found', function(cmd)
|
||||||
|
print(string.format('hilbish: %s not found', cmd))
|
||||||
|
end)
|
||||||
|
|
||||||
|
bait.catch('command.not-executable', function(cmd)
|
||||||
|
print(string.format('hilbish: %s: not executable', cmd))
|
||||||
|
end)
|
||||||
|
|
6
os.go
6
os.go
|
@ -12,9 +12,9 @@ import (
|
||||||
// The `os` interface provides simple text information properties about
|
// The `os` interface provides simple text information properties about
|
||||||
// the current OS on the systen. This mainly includes the name and
|
// the current OS on the systen. This mainly includes the name and
|
||||||
// version.
|
// version.
|
||||||
// #property family Family name of the current OS
|
// #field family Family name of the current OS
|
||||||
// #property name Pretty name of the current OS
|
// #field name Pretty name of the current OS
|
||||||
// #property version Version of the current OS
|
// #field version Version of the current OS
|
||||||
func hshosLoader(rtm *rt.Runtime) *rt.Table {
|
func hshosLoader(rtm *rt.Runtime) *rt.Table {
|
||||||
info, _ := osinfo.GetOSInfo()
|
info, _ := osinfo.GetOSInfo()
|
||||||
mod := rt.NewTable()
|
mod := rt.NewTable()
|
||||||
|
|
|
@ -123,23 +123,20 @@ func (rl *Instance) walkHistory(i int) {
|
||||||
|
|
||||||
// When we are exiting the current line buffer to move around
|
// When we are exiting the current line buffer to move around
|
||||||
// the history, we make buffer the current line
|
// the history, we make buffer the current line
|
||||||
if rl.histPos == 0 && (rl.histPos+i) == 1 {
|
if rl.histOffset == 0 && rl.histOffset + i == 1 {
|
||||||
rl.lineBuf = string(rl.line)
|
rl.lineBuf = string(rl.line)
|
||||||
}
|
}
|
||||||
|
|
||||||
switch rl.histPos + i {
|
rl.histOffset += i
|
||||||
case 0, history.Len() + 1:
|
if rl.histOffset == 0 {
|
||||||
rl.histPos = 0
|
|
||||||
rl.line = []rune(rl.lineBuf)
|
rl.line = []rune(rl.lineBuf)
|
||||||
rl.pos = len(rl.lineBuf)
|
rl.pos = len(rl.lineBuf)
|
||||||
return
|
} else if rl.histOffset <= -1 {
|
||||||
case -1:
|
rl.histOffset = 0
|
||||||
rl.histPos = 0
|
} else {
|
||||||
rl.lineBuf = string(rl.line)
|
|
||||||
default:
|
|
||||||
dedup = true
|
dedup = true
|
||||||
old = string(rl.line)
|
old = string(rl.line)
|
||||||
new, err = history.GetLine(history.Len() - rl.histPos - 1)
|
new, err = history.GetLine(history.Len() - rl.histOffset)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
rl.resetHelpers()
|
rl.resetHelpers()
|
||||||
print("\r\n" + err.Error() + "\r\n")
|
print("\r\n" + err.Error() + "\r\n")
|
||||||
|
@ -148,7 +145,6 @@ func (rl *Instance) walkHistory(i int) {
|
||||||
}
|
}
|
||||||
|
|
||||||
rl.clearLine()
|
rl.clearLine()
|
||||||
rl.histPos += i
|
|
||||||
rl.line = []rune(new)
|
rl.line = []rune(new)
|
||||||
rl.pos = len(rl.line)
|
rl.pos = len(rl.line)
|
||||||
if rl.pos > 0 {
|
if rl.pos > 0 {
|
||||||
|
|
|
@ -134,6 +134,7 @@ type Instance struct {
|
||||||
// history operating params
|
// history operating params
|
||||||
lineBuf string
|
lineBuf string
|
||||||
histPos int
|
histPos int
|
||||||
|
histOffset int
|
||||||
histNavIdx int // Used for quick history navigation.
|
histNavIdx int // Used for quick history navigation.
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -49,7 +49,7 @@ func (rl *Instance) Readline() (string, error) {
|
||||||
|
|
||||||
// History Init
|
// History Init
|
||||||
// We need this set to the last command, so that we can access it quickly
|
// We need this set to the last command, so that we can access it quickly
|
||||||
rl.histPos = 0
|
rl.histOffset = 0
|
||||||
rl.viUndoHistory = []undoItem{{line: "", pos: 0}}
|
rl.viUndoHistory = []undoItem{{line: "", pos: 0}}
|
||||||
|
|
||||||
// Multisplit
|
// Multisplit
|
||||||
|
@ -546,6 +546,10 @@ func (rl *Instance) Readline() (string, error) {
|
||||||
// entry readline is currently configured for and then update the line entries
|
// entry readline is currently configured for and then update the line entries
|
||||||
// accordingly.
|
// accordingly.
|
||||||
func (rl *Instance) editorInput(r []rune) {
|
func (rl *Instance) editorInput(r []rune) {
|
||||||
|
if len(r) == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
switch rl.modeViMode {
|
switch rl.modeViMode {
|
||||||
case VimKeys:
|
case VimKeys:
|
||||||
rl.vi(r[0])
|
rl.vi(r[0])
|
||||||
|
|
|
@ -6,6 +6,13 @@ import (
|
||||||
rt "github.com/arnodel/golua/runtime"
|
rt "github.com/arnodel/golua/runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// #interface runner
|
||||||
|
// interactive command runner customization
|
||||||
|
// The runner interface contains functions that allow the user to change
|
||||||
|
// how Hilbish interprets interactive input.
|
||||||
|
// Users can add and change the default runner for interactive input to any
|
||||||
|
// language or script of their choosing. A good example is using it to
|
||||||
|
// write command in Fennel.
|
||||||
func runnerModeLoader(rtm *rt.Runtime) *rt.Table {
|
func runnerModeLoader(rtm *rt.Runtime) *rt.Table {
|
||||||
exports := map[string]util.LuaExport{
|
exports := map[string]util.LuaExport{
|
||||||
"sh": {shRunner, 1, false},
|
"sh": {shRunner, 1, false},
|
||||||
|
@ -19,6 +26,18 @@ func runnerModeLoader(rtm *rt.Runtime) *rt.Table {
|
||||||
return mod
|
return mod
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #interface runner
|
||||||
|
// setMode(cb)
|
||||||
|
// This is the same as the `hilbish.runnerMode` function. It takes a callback,
|
||||||
|
// which will be used to execute all interactive input.
|
||||||
|
// In normal cases, neither callbacks should be overrided by the user,
|
||||||
|
// as the higher level functions listed below this will handle it.
|
||||||
|
func _runnerMode() {}
|
||||||
|
|
||||||
|
// #interface runner
|
||||||
|
// sh(cmd)
|
||||||
|
// Runs a command in Hilbish's shell script interpreter.
|
||||||
|
// This is the equivalent of using `source`.
|
||||||
func shRunner(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
func shRunner(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||||
if err := c.Check1Arg(); err != nil {
|
if err := c.Check1Arg(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -42,6 +61,10 @@ func shRunner(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||||
return c.PushingNext(t.Runtime, rt.TableValue(runnerRet)), nil
|
return c.PushingNext(t.Runtime, rt.TableValue(runnerRet)), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #interface runner
|
||||||
|
// lua(cmd)
|
||||||
|
// Evaluates `cmd` as Lua input. This is the same as using `dofile`
|
||||||
|
// or `load`, but is appropriated for the runner interface.
|
||||||
func luaRunner(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
func luaRunner(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||||
if err := c.Check1Arg(); err != nil {
|
if err := c.Check1Arg(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
@ -11,8 +11,8 @@ import (
|
||||||
// This interface just contains properties to know about certain user directories.
|
// This interface just contains properties to know about certain user directories.
|
||||||
// It is equivalent to XDG on Linux and gets the user's preferred directories
|
// It is equivalent to XDG on Linux and gets the user's preferred directories
|
||||||
// for configs and data.
|
// for configs and data.
|
||||||
// #property config The user's config directory
|
// #field config The user's config directory
|
||||||
// #property data The user's directory for program data
|
// #field data The user's directory for program data
|
||||||
func userDirLoader(rtm *rt.Runtime) *rt.Table {
|
func userDirLoader(rtm *rt.Runtime) *rt.Table {
|
||||||
mod := rt.NewTable()
|
mod := rt.NewTable()
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ var (
|
||||||
.. hilbish.userDir.config .. '/hilbish/?/init.lua;'
|
.. hilbish.userDir.config .. '/hilbish/?/init.lua;'
|
||||||
.. hilbish.userDir.config .. '/hilbish/?/?.lua;'
|
.. hilbish.userDir.config .. '/hilbish/?/?.lua;'
|
||||||
.. hilbish.userDir.config .. '/hilbish/?.lua'`
|
.. hilbish.userDir.config .. '/hilbish/?.lua'`
|
||||||
dataDir = "/usr/share/hilbish"
|
dataDir = "/usr/local/share/hilbish"
|
||||||
preloadPath = dataDir + "/nature/init.lua"
|
preloadPath = dataDir + "/nature/init.lua"
|
||||||
sampleConfPath = dataDir + "/.hilbishrc.lua" // Path to default/sample config
|
sampleConfPath = dataDir + "/.hilbishrc.lua" // Path to default/sample config
|
||||||
defaultConfDir = ""
|
defaultConfDir = ""
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
title: "{{ replace .Name "-" " " | title }}"
|
||||||
|
date: {{ .Date }}
|
||||||
|
draft: true
|
||||||
|
---
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
baseURL = 'https://rosettea.github.io/Hilbish/'
|
||||||
|
languageCode = 'en-us'
|
||||||
|
title = 'Hilbish'
|
||||||
|
theme = 'hsh'
|
||||||
|
enableGitInfo = true
|
||||||
|
|
||||||
|
[menu]
|
||||||
|
[[menu.nav]]
|
||||||
|
identifier = 'home'
|
||||||
|
name = 'Home'
|
||||||
|
pageref = '/'
|
||||||
|
weight = 1
|
||||||
|
[[menu.nav]]
|
||||||
|
identifier = 'install'
|
||||||
|
name = 'Install'
|
||||||
|
pageref = '/install'
|
||||||
|
weight = 2
|
||||||
|
[[menu.nav]]
|
||||||
|
identifier = 'docs'
|
||||||
|
name = 'Docs'
|
||||||
|
pageref = '/docs'
|
||||||
|
weight = 3
|
||||||
|
|
||||||
|
[markup.goldmark.renderer]
|
||||||
|
unsafe = true
|
|
@ -0,0 +1,134 @@
|
||||||
|
---
|
||||||
|
description: 'Something Unique. Hilbish is the new interactive shell for Lua fans. Extensible, scriptable, configurable: All in Lua.'
|
||||||
|
---
|
||||||
|
|
||||||
|
[//]: <>
|
||||||
|
|
||||||
|
<!-- hugo (prob goldmark) is funny; the html wont work if its the first thing -->
|
||||||
|
<div class="text-center">
|
||||||
|
<h1 class="fw-light">Something Unique.</h1>
|
||||||
|
<p>
|
||||||
|
<strong>Hilbish</strong> is the new interactive shell for Lua fans.<br>
|
||||||
|
Extensible, scriptable, configurable: All in Lua.
|
||||||
|
</p>
|
||||||
|
<a href="install" class="btn btn-primary">Install</a>
|
||||||
|
<a href="https://github.com/Rosettea/Hilbish" class="btn btn-secondary" target="_blank">Github</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<div class="row row-cols-1 row-cols-md-2 g-4">
|
||||||
|
<div class="col">
|
||||||
|
<div class="card border-light mb-3">
|
||||||
|
<div class="row g-0">
|
||||||
|
<div class="col-md-4">
|
||||||
|
<a href="https://safe.kashima.moe/6njmopm47u1x.png">
|
||||||
|
<img src="https://safe.kashima.moe/6njmopm47u1x.png" class="img-fluid rounded-start">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-8">
|
||||||
|
<h5 class="card-header">Simple and Easy Scripting</h5>
|
||||||
|
<div class="card-body">
|
||||||
|
<p class="card-text">
|
||||||
|
Hilbish is configured and scripted in the Lua programming language.
|
||||||
|
This removes all the old, ugly things about Shell script and introduces
|
||||||
|
everything good about Lua, including other languages (Moonscript & Fennel).
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<div class="card border-light mb-3">
|
||||||
|
<div class="row g-0">
|
||||||
|
<div class="col-md-4">
|
||||||
|
<a href="https://safe.kashima.moe/jkndbi636lzj.png">
|
||||||
|
<img src="https://safe.kashima.moe/jkndbi636lzj.png" class="img-fluid rounded-start">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-8">
|
||||||
|
<h5 class="card-header">History and Completion Menus</h5>
|
||||||
|
<div class="card-body">
|
||||||
|
<p class="card-text">
|
||||||
|
Hilbish provides the user with proper menus for completions,
|
||||||
|
history searching. Want to see your previous commands? Hit Ctrl-R.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<div class="card border-light mb-3">
|
||||||
|
<div class="row g-0">
|
||||||
|
<div class="col-md-4">
|
||||||
|
<a href="https://safe.kashima.moe/6yfeooamzro4.png">
|
||||||
|
<img src="https://safe.kashima.moe/6yfeooamzro4.png" class="img-fluid rounded-start">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-8">
|
||||||
|
<h5 class="card-header">Tons of Features, and More to Come</h5>
|
||||||
|
<div class="card-body">
|
||||||
|
<p class="card-text">
|
||||||
|
Hilbish offers a bunch of features to make your interactive
|
||||||
|
shell experience rich. Things like syntax highlighting and hinting
|
||||||
|
available via the Lua API.
|
||||||
|
</p>
|
||||||
|
<p class="card-small text-muted">* Command hints shown in photo are not default.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- uncomment, replace top when editor interface can be replaced (and replace the images) -->
|
||||||
|
<!--
|
||||||
|
<div class="col">
|
||||||
|
<div class="card border-light mb-3">
|
||||||
|
<div class="row g-0">
|
||||||
|
<div class="col-md-4">
|
||||||
|
<a href="https://safe.kashima.moe/6yfeooamzro4.png">
|
||||||
|
<img src="https://safe.kashima.moe/6yfeooamzro4.png" class="img-fluid rounded-start">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-8">
|
||||||
|
<h5 class="card-header">Highly Extensible</h5>
|
||||||
|
<div class="card-body">
|
||||||
|
<p class="card-text">
|
||||||
|
Hilbish can be turned into an all new shell if wanted. One of our
|
||||||
|
main goals is that most (if not all) interfaces can be replaced.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
-->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<h1 class="fw-light">Why not just Lua?</h1>
|
||||||
|
<p>
|
||||||
|
Hilbish is your interactive shell as well as a just a Lua interpreter
|
||||||
|
and enhanced REPL.<br>
|
||||||
|
</p>
|
||||||
|
<ul class="list-group" style="max-width: 64em;">
|
||||||
|
<li class="list-group-item"><i class="fa-solid fa-battery-full"></i> Batteries included Lua runtime that's also your user shell!</li>
|
||||||
|
<li class="list-group-item"><i class="fa-solid fa-network-wired"></i> Hilbish is easily cross platform. It has OS agnostic interfaces for easy cross platform Lua code.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<h1 class="fw-light">Try It Today!</h1>
|
||||||
|
<p>
|
||||||
|
Hilbish is known to run on the 3 major platforms (Windows, MacOS, Linux)
|
||||||
|
but likely builds on other Unixes!
|
||||||
|
<br>
|
||||||
|
Windows doesn't work as well as it should, so if you're a Windows user,
|
||||||
|
<a href="https://github.com/Rosettea/Hilbish/discussions/165">say something</a>!
|
||||||
|
<ul class="list-group" style="max-width: 64em;">
|
||||||
|
<li class="list-group-item"><i class="fa-solid fa-cloud-arrow-down"></i> <a href="/Hilbish/install" style="text-decoration: none;"><strong>Download</strong></a> the binary</li>
|
||||||
|
<li class="list-group-item"><i class="fa-solid fa-screwdriver-wrench"></i> <a href="https://github.com/Rosettea/Hilbish#manual-build" style="text-decoration: none;"><strong>Build</strong></a> from source</li>
|
||||||
|
</ul>
|
||||||
|
</p>
|
|
@ -0,0 +1,19 @@
|
||||||
|
---
|
||||||
|
title: Introduction
|
||||||
|
layout: doc
|
||||||
|
weight: -1
|
||||||
|
menu: docs
|
||||||
|
---
|
||||||
|
|
||||||
|
Here lies the documentation for Hilbish, the hyper extensible Lua shell.
|
||||||
|
Hilbish provides you with a few quality of life features and useful
|
||||||
|
functions to ensure you can make the shell fully yours.
|
||||||
|
|
||||||
|
These features include:
|
||||||
|
- Completion and history search menus
|
||||||
|
- Hinting and syntax highlighting (scripted by user)
|
||||||
|
|
||||||
|
# Installation
|
||||||
|
Steps on installing Hilbish will be at the Install page in the navigation bar
|
||||||
|
at the top. This also included getting development builds from the GitHub
|
||||||
|
repository.
|
|
@ -0,0 +1,25 @@
|
||||||
|
---
|
||||||
|
title: Frequently Asked Questions
|
||||||
|
layout: doc
|
||||||
|
weight: -20
|
||||||
|
menu: docs
|
||||||
|
---
|
||||||
|
|
||||||
|
# Is Hilbish POSIX compliant?
|
||||||
|
No, it is not. POSIX compliance is a non-goal. Perhaps in the future,
|
||||||
|
someone would be able to write a native plugin to support shell scripting
|
||||||
|
(which would be against it's main goal, but ....)
|
||||||
|
|
||||||
|
# Windows Support?
|
||||||
|
It compiles for Windows (CI ensures it does), but otherwise it is not
|
||||||
|
directly supported. If you'd like to improve this situation,
|
||||||
|
checkout [the discussion](https://github.com/Rosettea/Hilbish/discussions/165).
|
||||||
|
|
||||||
|
# Where is the API documentation?
|
||||||
|
The builtin `doc` command supplies all documentation of Hilbish provided
|
||||||
|
APIs. This will be on the website in the near future.
|
||||||
|
|
||||||
|
# Why?
|
||||||
|
Hilbish emerged from the desire of a Lua configured shell.
|
||||||
|
It was the initial reason that it was created, but now it's more:
|
||||||
|
to be hyper extensible, simpler and more user friendly.
|
|
@ -0,0 +1,11 @@
|
||||||
|
---
|
||||||
|
title: Features
|
||||||
|
layout: doc
|
||||||
|
weight: -40
|
||||||
|
menu: docs
|
||||||
|
---
|
||||||
|
|
||||||
|
Hilbish has a wide range of features to enhance the user's experience and
|
||||||
|
is always adding new ones. If there is something missing here or something
|
||||||
|
you would like to see, please [start a discussion](https://github.com/Rosettea/Hilbish/discussions)
|
||||||
|
or comment on any existing ones which match your request.
|
|
@ -0,0 +1,17 @@
|
||||||
|
---
|
||||||
|
title: Runner Mode
|
||||||
|
description: Customize the interactive script/command runner.
|
||||||
|
layout: doc
|
||||||
|
menu:
|
||||||
|
docs:
|
||||||
|
parent: "Features"
|
||||||
|
---
|
||||||
|
|
||||||
|
Hilbish allows you to change how interactive text can be interpreted.
|
||||||
|
This is mainly due to the fact that the default method Hilbish uses
|
||||||
|
is that it runs Lua first and then falls back to shell script.
|
||||||
|
|
||||||
|
In some cases, someone might want to switch to just shell script to avoid
|
||||||
|
it while interactive but still have a Lua config, or go full Lua to use
|
||||||
|
Hilbish as a REPL. This also allows users to add alternative languages,
|
||||||
|
instead of either like Fennel.
|
|
@ -0,0 +1,59 @@
|
||||||
|
---
|
||||||
|
title: Getting Started
|
||||||
|
layout: doc
|
||||||
|
weight: -10
|
||||||
|
menu: docs
|
||||||
|
---
|
||||||
|
|
||||||
|
To start Hilbish, open a terminal. If Hilbish has been installed and is not the
|
||||||
|
default shell, you can simply run `hilbish` to start it. This will launch
|
||||||
|
a normal interactive session.
|
||||||
|
To exit, you can either run the `exit` command or hit Ctrl+D.
|
||||||
|
|
||||||
|
# Setting as Default
|
||||||
|
## Login shell
|
||||||
|
There are a few ways to make Hilbish your default shell. A simple way is
|
||||||
|
to make it your user/login shell.
|
||||||
|
|
||||||
|
{{< warning `It is not recommended to set Hilbish as your login shell. That is expected to be a
|
||||||
|
POSIX compliant shell, which Hilbish is not. At most, there will just be a
|
||||||
|
few variables missing in your environment` >}}
|
||||||
|
|
||||||
|
To do that, simply run `chsh -s /usr/bin/hilbish`.
|
||||||
|
Some distros (namely Fedora) might have `lchsh` instead, which is used like `lchsh <user>`.
|
||||||
|
When prompted, you can put the path for Hilbish.
|
||||||
|
|
||||||
|
## Default with terminal
|
||||||
|
The simpler way is to set the default shell for your terminal. The way of
|
||||||
|
doing this depends on how your terminal settings are configured.
|
||||||
|
|
||||||
|
## Run after login shell
|
||||||
|
Some shells (like zsh) have an rc file, like `.zlogin`, which is ran when the shell session
|
||||||
|
is a login shell. In that file, you can run Hilbish. Example:
|
||||||
|
|
||||||
|
```
|
||||||
|
exec hilbish -S -l
|
||||||
|
```
|
||||||
|
|
||||||
|
This will replace the shell with Hilbish, set $SHELL to Hilbish and launch it as a login shell.
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
Once installation and setup has been done, you can then configure Hilbish.
|
||||||
|
It is configured and scripted via Lua, so the config file is a Lua file.
|
||||||
|
You can use any pure Lua library to do whatever you want.
|
||||||
|
|
||||||
|
Hilbish's sample configuration is usually located in `hilbish.dataDir .. '/.hilbishrc.lua'`.
|
||||||
|
You can print that path via Lua to see what it is: `print(hilbish.dataDir .. '/.hilbishrc.lua')`.
|
||||||
|
As an example, it will usually will result in `/usr/share/hilbish/.hilbishrc.lua` on Linux.
|
||||||
|
|
||||||
|
To edit your user configuration, you can copy that file to `hilbish.userDir.config .. '/hilbish/init.lua'`,
|
||||||
|
which follows XDG on Linux and MacOS, and is located in %APPDATA% on Windows.
|
||||||
|
|
||||||
|
As the directory is usually `~/.config` on Linux, you can run this command to copy it:
|
||||||
|
`cp /usr/share/hilbish/.hilbishrc.lua ~/.config/hilbish/init.lua`
|
||||||
|
|
||||||
|
Now you can get to editing it. Since it's just a Lua file, having basic
|
||||||
|
knowledge of Lua would help. All of Lua's standard libraries and functions
|
||||||
|
from Lua 5.4 are available. Hilbish has some custom and modules that are
|
||||||
|
available. To see them, you can run the `doc` command. This also works as
|
||||||
|
general documentation for other things.
|
|
@ -0,0 +1,38 @@
|
||||||
|
---
|
||||||
|
title: Install
|
||||||
|
description: Steps on how to install Hilbish on all the OSes and distros supported.
|
||||||
|
layout: page
|
||||||
|
---
|
||||||
|
|
||||||
|
## Official Binaries
|
||||||
|
The best way to get Hilbish is to get a build directly from GitHub.
|
||||||
|
At any time, there are 2 versions of Hilbish recommended for download:
|
||||||
|
the latest stable release, and development builds from the master branch.
|
||||||
|
|
||||||
|
You can download both at any time, but note that the development builds may
|
||||||
|
have breaking changes.
|
||||||
|
|
||||||
|
For the latest **stable release**, check here: https://github.com/Rosettea/Hilbish/releases/latest
|
||||||
|
For a **development build**: https://nightly.link/Rosettea/Hilbish/workflows/build/master
|
||||||
|
|
||||||
|
## Package Repositories
|
||||||
|
### Arch Linux (AUR)
|
||||||
|
Hilbish is on the AUR. Setup an AUR helper, and install.
|
||||||
|
Example with yay:
|
||||||
|
|
||||||
|
```
|
||||||
|
yay -S hilbish
|
||||||
|
```
|
||||||
|
|
||||||
|
Or, from master branch:
|
||||||
|
```
|
||||||
|
yay -S hilbish-git
|
||||||
|
```
|
||||||
|
|
||||||
|
### Alpine Linux
|
||||||
|
Hilbish is currentlty in the testing/edge repository for Alpine.
|
||||||
|
Follow the steps [here](https://wiki.alpinelinux.org/wiki/Enable_Community_Repository)
|
||||||
|
(Using testing repositories) and install:
|
||||||
|
```
|
||||||
|
apk add hilbish
|
||||||
|
```
|
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2022 Rosettea
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
|
@ -0,0 +1,2 @@
|
||||||
|
+++
|
||||||
|
+++
|
|
@ -0,0 +1,7 @@
|
||||||
|
{{ define "main"}}
|
||||||
|
<main id="main">
|
||||||
|
<div>
|
||||||
|
<h1><a href="{{ "/" | relURL }}">Go Home</a></h1>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,6 @@
|
||||||
|
<h{{ (add .Level 1) }} id="{{ .Anchor | safeURL }}">
|
||||||
|
{{ .Text | safeHTML }}
|
||||||
|
</h{{ (add .Level 1) }}>
|
||||||
|
{{ if eq .Text ""}}
|
||||||
|
<hr>
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,4 @@
|
||||||
|
<a href="{{ .Destination | safeURL }}"{{ with .Title}} title="{{ . }}"{{ end }}{{ if eq (substr .Destination 0 4) "http" }} target="_blank" rel="noopener"{{ end }}>
|
||||||
|
{{ .Text | safeHTML }}
|
||||||
|
</a>
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
{{- partial "head.html" . -}}
|
||||||
|
<body class="d-flex flex-column min-vh-100" style="overflow-x: hidden;">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="check-circle-fill" fill="currentColor" viewBox="0 0 16 16">
|
||||||
|
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zm-3.97-3.03a.75.75 0 0 0-1.08.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-.01-1.05z"/>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="info-fill" fill="currentColor" viewBox="0 0 16 16">
|
||||||
|
<path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="exclamation-triangle-fill" fill="currentColor" viewBox="0 0 16 16">
|
||||||
|
<path d="M8.982 1.566a1.13 1.13 0 0 0-1.96 0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889 0 1.438-.99.98-1.767L8.982 1.566zM8 5c.535 0 .954.462.9.995l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 5.995A.905.905 0 0 1 8 5zm.002 6a1 1 0 1 1 0 2 1 1 0 0 1 0-2z"/>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
{{- partial "header.html" . -}}
|
||||||
|
{{- block "main" . }}{{- end }}
|
||||||
|
{{- partial "footer.html" . -}}
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,53 @@
|
||||||
|
{{ define "main" }}
|
||||||
|
<div class="container py-3 row">
|
||||||
|
<div class="container" style="width: 240px;">
|
||||||
|
<div class="p-3 col">
|
||||||
|
<ul class="nav nav-pills mb-auto">
|
||||||
|
{{ $currentPage := . }}
|
||||||
|
{{ range .Site.Menus.docs.ByWeight.Reverse }}
|
||||||
|
<li class="nav-item">
|
||||||
|
<a href="{{ .URL }}" class="nav-link">
|
||||||
|
<strong>{{ .Title }}</strong>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{ if .Children }}
|
||||||
|
<ul style="list-style: none;">
|
||||||
|
{{ range .Children }}
|
||||||
|
<li class="nav-item">
|
||||||
|
<a href="{{ .URL }}" class="nav-link">
|
||||||
|
{{ .Title }}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="p-3 col">
|
||||||
|
<div>
|
||||||
|
<h1>{{ .Title }}</h1>
|
||||||
|
<p><em>
|
||||||
|
{{ $date := .Date.UTC.Format "Jan 2, 2006" }}
|
||||||
|
{{ $lastmod := .Lastmod.UTC.Format "Jan 2, 2006" }}
|
||||||
|
{{ if and (ne $lastmod $date) (gt .Lastmod .Date) }}
|
||||||
|
Last updated {{ $lastmod }}<br>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ if .Description }}
|
||||||
|
{{ .Description }}<br>
|
||||||
|
{{ end}}
|
||||||
|
</em></p>
|
||||||
|
{{.Content}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="footer mt-auto">
|
||||||
|
<p class="card-small text-muted">
|
||||||
|
Want to help improve this page? <a href="https://github.com/Rosettea/Hilbish/issues/new/choose">Create an issue.</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
{{ define "main" }}
|
||||||
|
<main>
|
||||||
|
<div class="container mt-2">
|
||||||
|
{{.Content}}
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,8 @@
|
||||||
|
{{ define "main" }}
|
||||||
|
<main>
|
||||||
|
<div class="container mt-2">
|
||||||
|
<h1>{{ .Title }}</h1>
|
||||||
|
{{.Content}}
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{{ define "main" }}
|
||||||
|
<main style="max-width: 80em; margin: auto;">
|
||||||
|
{{.Content}}
|
||||||
|
</main>
|
||||||
|
{{ end }}
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
<footer class="footer mt-auto mt-auto py-3 bg-light row">
|
||||||
|
<div class="col mb-3">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col mb-3">
|
||||||
|
<a href="/Hilbish" class="d-flex align-items-center mb-3 link-dark text-decoration-none">
|
||||||
|
<img src="/Hilbish/hilbish-flower.png" alt="" height="48" class="d-inline-block align-text-top">
|
||||||
|
</a>
|
||||||
|
<p class="text-muted">
|
||||||
|
Rosettea © 2022
|
||||||
|
<br>
|
||||||
|
Made with <i class="fa-solid fa-heart" style="color: #f6345b;"></i>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col mb-3"></div>
|
||||||
|
<div class="col mb-3"></div>
|
||||||
|
<div class="col mb-3"></div>
|
||||||
|
|
||||||
|
<div class="col mb-3">
|
||||||
|
<h5>Hilbish</h5>
|
||||||
|
<ul class="nav flex-column">
|
||||||
|
<li class="nav-item mb-2"><a href="/Hilbish" class="nav-link p-0 text-muted">Home</a></li>
|
||||||
|
<li class="nav-item mb-2"><a href="/Hilbish/docs/faq" class="nav-link p-0 text-muted">FAQ</a></li>
|
||||||
|
<li class="nav-item mb-2"><a href="https://github.com/Rosettea/Hilbish" class="nav-link p-0 text-muted">Source</a></li>
|
||||||
|
<li class="nav-item mb-2"><a href="https://github.com/Rosettea/Hilbish/releases" class="nav-link p-0 text-muted">Releases</a></li>
|
||||||
|
<li class="nav-item mb-2"><a href="/Hilbish/docs" class="nav-link p-0 text-muted">Documentation</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col mb-3"></div>
|
||||||
|
</footer>
|
|
@ -0,0 +1,26 @@
|
||||||
|
<head>
|
||||||
|
{{ $title := print .Title " — " .Site.Title }}
|
||||||
|
{{ if .IsHome }}{{ $title = .Site.Title }}{{ end }}
|
||||||
|
<title>{{ $title }}</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no"/>
|
||||||
|
|
||||||
|
<meta name="theme-color" content="#ff89dd">
|
||||||
|
<meta content="/Hilbish/hilbish-flower.png" property="og:image" />
|
||||||
|
|
||||||
|
<meta property="og:site_name" content="Hilbish" />
|
||||||
|
<meta content="{{ $title }}" property="og:title" />
|
||||||
|
<meta content="{{if .Description}}{{ .Description }}{{ else }}{{ .Summary }}{{ end }}" property="og:description" />
|
||||||
|
<meta content="{{if .Description}}{{ .Description }}{{ else }}{{ .Summary }}{{ end }}" name="description" />
|
||||||
|
|
||||||
|
<meta name="revisit-after" content="2 days">
|
||||||
|
<meta name="keywords" content="Lua, Hilbish, Linux, Shell">
|
||||||
|
|
||||||
|
<meta property="og:locale" content="en_GB" />
|
||||||
|
<link rel="canonical" href="https://rosettea.github.io/Hilbish/" />
|
||||||
|
<meta property="og:url" content="https://rosettea.github.io/Hilbish/" />
|
||||||
|
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor" crossorigin="anonymous">
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/js/bootstrap.bundle.min.js" integrity="sha384-pprn3073KE6tl6bjs2QrFaJGz5/SUsLqktiwsUTF55Jfv3qYSDhgCecCxMW52nD2" crossorigin="anonymous"></script>
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css" integrity="sha512-KfkfwYDsLkIlwQp6LFnl8zNdLGxu9YAA1QvwINks4PhcElQSvqcyVLLD9aMhXd13uQjoXtEKNosOWaZqXgel0g==" crossorigin="anonymous" referrerpolicy="no-referrer" />
|
||||||
|
</head>
|
|
@ -0,0 +1,25 @@
|
||||||
|
<header>
|
||||||
|
<nav class="navbar navbar-expand-md sticky-top bg-light">
|
||||||
|
<div class="container-fluid">
|
||||||
|
<a class="navbar-brand" href="/Hilbish">
|
||||||
|
<img src="/Hilbish/hilbish-flower.png" alt="" height="24" class="d-inline-block align-text-top">
|
||||||
|
Hilbish
|
||||||
|
</a>
|
||||||
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
|
||||||
|
<span class="navbar-toggler-icon"></span>
|
||||||
|
</button>
|
||||||
|
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
||||||
|
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
|
||||||
|
{{ $currentPage := . }}
|
||||||
|
{{ range .Site.Menus.nav }}
|
||||||
|
<li class="nav-item">
|
||||||
|
<a href="{{ .URL }}" class="nav-link {{ if $currentPage.IsMenuCurrent "nav" . }}active{{ end }}">
|
||||||
|
{{ .Name }}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
</header>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<div class="alert alert-warning d-flex align-items-center" role="alert">
|
||||||
|
<svg class="bi flex-shrink-0 me-2" width="24" height="24" role="img" aria-label="Warning:"><use xlink:href="#exclamation-triangle-fill"/></svg>
|
||||||
|
<div>
|
||||||
|
{{ .Get 0 }}
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1,21 @@
|
||||||
|
# theme.toml template for a Hugo theme
|
||||||
|
# See https://github.com/gohugoio/hugoThemes#themetoml for an example
|
||||||
|
|
||||||
|
name = "Hsh"
|
||||||
|
license = "MIT"
|
||||||
|
licenselink = "https://github.com/yourname/yourtheme/blob/master/LICENSE"
|
||||||
|
description = ""
|
||||||
|
homepage = "http://example.com/"
|
||||||
|
tags = []
|
||||||
|
features = []
|
||||||
|
min_version = "0.41.0"
|
||||||
|
|
||||||
|
[author]
|
||||||
|
name = ""
|
||||||
|
homepage = ""
|
||||||
|
|
||||||
|
# If porting an existing theme
|
||||||
|
[original]
|
||||||
|
name = ""
|
||||||
|
homepage = ""
|
||||||
|
repo = ""
|
Loading…
Reference in New Issue