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
|
||||
|
||||
## Unreleased
|
||||
**NOTE:** Hilbish now uses [Task] insead of Make for builds.
|
||||
Windows support is also now at a lower tier; The only thing guaranteed is
|
||||
Hilbish *compiling* on Windows.
|
||||
**NOTES FOR USERS/PACKAGERS UPDATING:**
|
||||
- Hilbish now uses [Task] insead of Make for builds.
|
||||
- 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/#/
|
||||
|
||||
|
@ -103,6 +110,7 @@ of a dot. (ie. `job.stop()` -> `job:stop()`)
|
|||
- 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
|
||||
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`
|
||||
methods to make it act how they want.
|
||||
- `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
|
||||
- Fix completion search menu disappearing
|
||||
- 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
|
||||
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
|
||||
### Prerequisites
|
||||
- [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
|
||||
First, clone Hilbish. The recursive is required, as some Lua libraries
|
||||
|
|
|
@ -3,19 +3,19 @@
|
|||
version: '3'
|
||||
|
||||
vars:
|
||||
PREFIX: '{{default "/usr" .PREFIX}}'
|
||||
PREFIX: '{{default "/usr/local" .PREFIX}}'
|
||||
bindir__: '{{.PREFIX}}/bin'
|
||||
BINDIR: '{{default .bindir__ .BINDIR}}'
|
||||
libdir__: '{{.PREFIX}}/share/hilbish'
|
||||
LIBDIR: '{{default .libdir__ .LIBDIR}}'
|
||||
GOFLAGS: '-ldflags "-s -w"'
|
||||
GOFLAGS: '-ldflags "-s -w -X main.dataDir={{.LIBDIR}}"'
|
||||
|
||||
tasks:
|
||||
default:
|
||||
cmds:
|
||||
- CGO_ENABLED=0 go build {{.GOFLAGS}}
|
||||
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:
|
||||
cmds:
|
||||
|
|
|
@ -29,6 +29,7 @@ type emmyPiece struct {
|
|||
|
||||
type module struct {
|
||||
Docs []docPiece
|
||||
Fields []docPiece
|
||||
Properties []docPiece
|
||||
ShortDescription string
|
||||
Description string
|
||||
|
@ -45,6 +46,7 @@ type docPiece struct {
|
|||
GoFuncName string
|
||||
IsInterface bool
|
||||
IsMember bool
|
||||
Fields []docPiece
|
||||
Properties []docPiece
|
||||
}
|
||||
|
||||
|
@ -116,7 +118,15 @@ func setupDoc(mod string, fun *doc.Func) *docPiece {
|
|||
}
|
||||
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{}
|
||||
for _, tag := range tags["property"] {
|
||||
properties = append(properties, docPiece{
|
||||
|
@ -159,6 +169,7 @@ func setupDoc(mod string, fun *doc.Func) *docPiece {
|
|||
IsInterface: inInterface,
|
||||
IsMember: isMember,
|
||||
ParentModule: parentMod,
|
||||
Fields: fields,
|
||||
Properties: properties,
|
||||
}
|
||||
if strings.HasSuffix(dps.GoFuncName, strings.ToLower("loader")) {
|
||||
|
@ -253,6 +264,7 @@ func main() {
|
|||
desc := piece.Doc[1:]
|
||||
interfaceModules[modname].ShortDescription = shortDesc
|
||||
interfaceModules[modname].Description = strings.Join(desc, "\n")
|
||||
interfaceModules[modname].Fields = piece.Fields
|
||||
interfaceModules[modname].Properties = piece.Properties
|
||||
continue
|
||||
}
|
||||
|
@ -295,13 +307,23 @@ func main() {
|
|||
f, _ := os.Create(docPath)
|
||||
f.WriteString(fmt.Sprintf(header, modOrIface, modname, modu.ShortDescription))
|
||||
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 {
|
||||
f.WriteString("## Properties\n")
|
||||
f.WriteString("## Object properties\n")
|
||||
for _, dps := range modu.Properties {
|
||||
f.WriteString(fmt.Sprintf("- `%s`: ", dps.FuncName))
|
||||
f.WriteString(strings.Join(dps.Doc, " "))
|
||||
f.WriteString("\n")
|
||||
}
|
||||
f.WriteString("\n")
|
||||
}
|
||||
if len(modu.Docs) != 0 {
|
||||
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
|
||||
version.
|
||||
|
||||
## Properties
|
||||
## Interface fields
|
||||
- `family`: Family name of the current OS
|
||||
- `name`: Pretty name 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
|
||||
for configs and data.
|
||||
|
||||
## Properties
|
||||
## Interface fields
|
||||
- `config`: The user's config directory
|
||||
- `data`: The user's directory for program data
|
||||
|
||||
|
|
|
@ -7,6 +7,12 @@ local hilbish = {}
|
|||
--- @param cmd string
|
||||
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
|
||||
--- a command completer, which will have a `name` in the form
|
||||
--- of `command.name`, example: `command.git`
|
||||
|
@ -122,12 +128,33 @@ function hilbish.timeout(cb, time) end
|
|||
--- @param binName string
|
||||
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.
|
||||
function hilbish.completions.bins(query, ctx, fields) end
|
||||
|
||||
--- Returns file completion candidates based on the provided query.
|
||||
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.
|
||||
function hilbish.timers:stop() end
|
||||
|
||||
|
@ -142,6 +169,21 @@ function hilbish.aliases.list() end
|
|||
--- @param alias string
|
||||
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.
|
||||
--- @param cmd string
|
||||
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 exErr, ok := isExecError(err); ok {
|
||||
hooks.Emit("command." + exErr.typ, exErr.cmd)
|
||||
err = exErr.sprint()
|
||||
}
|
||||
} else {
|
||||
fmt.Fprintln(os.Stderr, err)
|
||||
}
|
||||
}
|
||||
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 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-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-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/go.mod h1:R09vh/04ILvP2Gj8/Z9Jd0Dh0ZIvaucowMEs6abQpWs=
|
||||
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
|
||||
}
|
||||
|
||||
// #interface jobs
|
||||
// #member
|
||||
// start()
|
||||
// Starts running the job.
|
||||
func luaStartJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||
if err := c.Check1Arg(); err != nil {
|
||||
return nil, err
|
||||
|
@ -130,6 +134,9 @@ func luaStartJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
|||
return c.Next(), nil
|
||||
}
|
||||
|
||||
// #interface jobs
|
||||
// stop()
|
||||
// Stops the job from running.
|
||||
func luaStopJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||
if err := c.Check1Arg(); err != nil {
|
||||
return nil, err
|
||||
|
@ -148,6 +155,11 @@ func luaStopJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
|||
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) {
|
||||
if err := c.Check1Arg(); err != nil {
|
||||
return nil, err
|
||||
|
@ -180,6 +192,10 @@ func luaForegroundJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
|||
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) {
|
||||
if err := c.Check1Arg(); err != nil {
|
||||
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 {
|
||||
jobMethods := rt.NewTable()
|
||||
jFuncs := map[string]util.LuaExport{
|
||||
|
@ -353,6 +383,9 @@ func jobUserData(j *job) *rt.UserData {
|
|||
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) {
|
||||
j.mu.RLock()
|
||||
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
|
||||
}
|
||||
|
||||
// #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) {
|
||||
if err := c.CheckNArgs(3); err != nil {
|
||||
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
|
||||
}
|
||||
|
||||
// #interface jobs
|
||||
// all()
|
||||
// Returns a table of all job objects.
|
||||
func (j *jobHandler) luaAllJobs(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||
j.mu.RLock()
|
||||
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
|
||||
}
|
||||
|
||||
// #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) {
|
||||
if err := c.Check1Arg(); err != nil {
|
||||
return nil, err
|
||||
|
@ -431,6 +473,9 @@ func (j *jobHandler) luaDisownJob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
|||
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) {
|
||||
j.mu.RLock()
|
||||
defer j.mu.RUnlock()
|
||||
|
|
|
@ -24,7 +24,7 @@ function hilbish.completion.handler(line, pos)
|
|||
return {compGroup}, pfx
|
||||
else
|
||||
local ok, compGroups, pfx = pcall(hilbish.completion.call,
|
||||
'command.' .. #fields[1], query, ctx, fields)
|
||||
'command.' .. fields[1], query, ctx, fields)
|
||||
if ok then
|
||||
return compGroups, pfx
|
||||
end
|
||||
|
|
|
@ -69,3 +69,11 @@ end
|
|||
bait.catch('error', function(event, handler, err)
|
||||
bait.release(event, handler)
|
||||
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 current OS on the systen. This mainly includes the name and
|
||||
// version.
|
||||
// #property family Family name of the current OS
|
||||
// #property name Pretty name of the current OS
|
||||
// #property version Version of the current OS
|
||||
// #field family Family name of the current OS
|
||||
// #field name Pretty name of the current OS
|
||||
// #field version Version of the current OS
|
||||
func hshosLoader(rtm *rt.Runtime) *rt.Table {
|
||||
info, _ := osinfo.GetOSInfo()
|
||||
mod := rt.NewTable()
|
||||
|
|
|
@ -123,23 +123,20 @@ func (rl *Instance) walkHistory(i int) {
|
|||
|
||||
// When we are exiting the current line buffer to move around
|
||||
// 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)
|
||||
}
|
||||
|
||||
switch rl.histPos + i {
|
||||
case 0, history.Len() + 1:
|
||||
rl.histPos = 0
|
||||
rl.histOffset += i
|
||||
if rl.histOffset == 0 {
|
||||
rl.line = []rune(rl.lineBuf)
|
||||
rl.pos = len(rl.lineBuf)
|
||||
return
|
||||
case -1:
|
||||
rl.histPos = 0
|
||||
rl.lineBuf = string(rl.line)
|
||||
default:
|
||||
} else if rl.histOffset <= -1 {
|
||||
rl.histOffset = 0
|
||||
} else {
|
||||
dedup = true
|
||||
old = string(rl.line)
|
||||
new, err = history.GetLine(history.Len() - rl.histPos - 1)
|
||||
new, err = history.GetLine(history.Len() - rl.histOffset)
|
||||
if err != nil {
|
||||
rl.resetHelpers()
|
||||
print("\r\n" + err.Error() + "\r\n")
|
||||
|
@ -148,7 +145,6 @@ func (rl *Instance) walkHistory(i int) {
|
|||
}
|
||||
|
||||
rl.clearLine()
|
||||
rl.histPos += i
|
||||
rl.line = []rune(new)
|
||||
rl.pos = len(rl.line)
|
||||
if rl.pos > 0 {
|
||||
|
|
|
@ -134,6 +134,7 @@ type Instance struct {
|
|||
// history operating params
|
||||
lineBuf string
|
||||
histPos int
|
||||
histOffset int
|
||||
histNavIdx int // Used for quick history navigation.
|
||||
|
||||
//
|
||||
|
|
|
@ -49,7 +49,7 @@ func (rl *Instance) Readline() (string, error) {
|
|||
|
||||
// History Init
|
||||
// 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}}
|
||||
|
||||
// Multisplit
|
||||
|
@ -546,6 +546,10 @@ func (rl *Instance) Readline() (string, error) {
|
|||
// entry readline is currently configured for and then update the line entries
|
||||
// accordingly.
|
||||
func (rl *Instance) editorInput(r []rune) {
|
||||
if len(r) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
switch rl.modeViMode {
|
||||
case VimKeys:
|
||||
rl.vi(r[0])
|
||||
|
|
|
@ -6,6 +6,13 @@ import (
|
|||
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 {
|
||||
exports := map[string]util.LuaExport{
|
||||
"sh": {shRunner, 1, false},
|
||||
|
@ -19,6 +26,18 @@ func runnerModeLoader(rtm *rt.Runtime) *rt.Table {
|
|||
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) {
|
||||
if err := c.Check1Arg(); err != nil {
|
||||
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
|
||||
}
|
||||
|
||||
// #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) {
|
||||
if err := c.Check1Arg(); err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -11,8 +11,8 @@ import (
|
|||
// 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
|
||||
// for configs and data.
|
||||
// #property config The user's config directory
|
||||
// #property data The user's directory for program data
|
||||
// #field config The user's config directory
|
||||
// #field data The user's directory for program data
|
||||
func userDirLoader(rtm *rt.Runtime) *rt.Table {
|
||||
mod := rt.NewTable()
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ var (
|
|||
.. hilbish.userDir.config .. '/hilbish/?/init.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"
|
||||
sampleConfPath = dataDir + "/.hilbishrc.lua" // Path to default/sample config
|
||||
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