diff --git a/versions/ci-website-fixes/404.html b/versions/ci-website-fixes/404.html index fc207ac..313b15e 100644 --- a/versions/ci-website-fixes/404.html +++ b/versions/ci-website-fixes/404.html @@ -1,4 +1,4 @@ -
Happy birthday Hilbish! As of last month, Hilbish is now 2 years old. Unfortunately I missed the official date, but I will still make a more focused post on the date (19st).
I decided to fix up this website and Hilbish’s logo, so that can diff --git a/versions/ci-website-fixes/blog/index.html b/versions/ci-website-fixes/blog/index.html index 4284ee8..964da0f 100644 --- a/versions/ci-website-fixes/blog/index.html +++ b/versions/ci-website-fixes/blog/index.html @@ -1,7 +1,7 @@ -
The release with full changelogs and prebuilt binaries can be seen at the v2.2.0 tag. +
The release with full changelogs and prebuilt binaries can be seen at the v2.2.0 tag. Welcome to a very long awaited release of Hilbish, and on Christmas. Just think of it as a long preparing, late Christmas gift. :) This release does not contain a whole lot of changes, but it is a new release with enhancements and bug fixes! Documentation As is a trend, the documentation has been improved by ONE HUNDRED TIMES.
Happy birthday Hilbish! As of last month, Hilbish is now 2 years old. Unfortunately I missed the official date, but I will still make a more focused post on the date (19st).
I decided to fix up this website and Hilbish’s logo, so that can be thought of as something for the 2 years milestone?
diff --git a/versions/ci-website-fixes/blog/index.xml b/versions/ci-website-fixes/blog/index.xml
index fbe095f..09d6c90 100644
--- a/versions/ci-website-fixes/blog/index.xml
+++ b/versions/ci-website-fixes/blog/index.xml
@@ -1,4 +1,4 @@
- Hilbish v2.0 has been released!
Well actually, it was released a week ago, but I only wrote this
Hilbish blog after that. This is a big release, coming 9 months after the previous v1.2.0 and
diff --git a/versions/ci-website-fixes/blog/v2.1-release/index.html b/versions/ci-website-fixes/blog/v2.1-release/index.html
index d7bb559..dbc74ad 100644
--- a/versions/ci-website-fixes/blog/v2.1-release/index.html
+++ b/versions/ci-website-fixes/blog/v2.1-release/index.html
@@ -1,13 +1,13 @@
- The release with full changelogs and prebuilt binaries can be
seen at the v2.1.0
tag. Oh look! A new release of Hilbish! This time is the v2.1 release,
diff --git a/versions/ci-website-fixes/blog/v2.1.1-release/index.html b/versions/ci-website-fixes/blog/v2.1.1-release/index.html
index 3fd3ef1..bd317c3 100644
--- a/versions/ci-website-fixes/blog/v2.1.1-release/index.html
+++ b/versions/ci-website-fixes/blog/v2.1.1-release/index.html
@@ -1,11 +1,11 @@
- The release with full changelogs and prebuilt binaries can be
seen at the v2.1.1
tag. Welcome to a fresh new release of Hilbish! Some people (or none) may be awaiting
diff --git a/versions/ci-website-fixes/blog/v2.1.2-release/index.html b/versions/ci-website-fixes/blog/v2.1.2-release/index.html
index 5827362..34a25e9 100644
--- a/versions/ci-website-fixes/blog/v2.1.2-release/index.html
+++ b/versions/ci-website-fixes/blog/v2.1.2-release/index.html
@@ -1,11 +1,11 @@
- The release with full changelogs and prebuilt binaries can be
seen at the v2.1.2
tag. This release reverts the April Fool’s code additions in v2.1.1. It is
diff --git a/versions/ci-website-fixes/blog/v2.2-release/index.html b/versions/ci-website-fixes/blog/v2.2-release/index.html
index dbd99a5..b987d39 100644
--- a/versions/ci-website-fixes/blog/v2.2-release/index.html
+++ b/versions/ci-website-fixes/blog/v2.2-release/index.html
@@ -1,11 +1,11 @@
- The release with full changelogs and prebuilt binaries can be
seen at the v2.2.0
tag. Welcome to a very long awaited release of Hilbish, and on Christmas. Just think
diff --git a/versions/ci-website-fixes/blog/welcome/index.html b/versions/ci-website-fixes/blog/welcome/index.html
index 542b6df..6643c0a 100644
--- a/versions/ci-website-fixes/blog/welcome/index.html
+++ b/versions/ci-website-fixes/blog/welcome/index.html
@@ -1,6 +1,6 @@
- Hello! Welcome to the Hilbish blog. This will mainly contain release
announcements and some other things relating to Hilbish (development). The release with full changelogs and prebuilt binaries can be seen at the v2.2.0 tag.
+ The release with full changelogs and prebuilt binaries can be seen at the v2.2.0 tag.
Welcome to a very long awaited release of Hilbish, and on Christmas. Just think of it as a long preparing, late Christmas gift. :) This release does not contain a whole lot of changes, but it is a new release with enhancements and bug fixes!
Documentation As is a trend, the documentation has been improved by ONE HUNDRED TIMES. Happy birthday Hilbish! As of last month, Hilbish is now 2 years old. Unfortunately I missed the official date, but I will still make a more focused post on the date (19st).
I decided to fix up this website and Hilbish’s logo, so that can be thought of as something for the 2 years milestone?
diff --git a/versions/ci-website-fixes/categories/index.xml b/versions/ci-website-fixes/categories/index.xml
index 67505ce..553ec15 100644
--- a/versions/ci-website-fixes/categories/index.xml
+++ b/versions/ci-website-fixes/categories/index.xml
@@ -1 +1 @@
- the event emitter Bait is the event emitter for Hilbish. Much like Node.js and
+its Usage of the Bait module consists of userstanding
+event-driven architecture, but it’s pretty simple:
+If you want to act on a certain event, you can Examples of this are in the Hilbish default config!
+Consider this part of it: What this does is, whenever the Catches an event. This function can be used to act on events. Catches an event, but only once. This will remove the hook immediately after it runs for the first time. Returns a table of functions that are hooked on an event with the corresponding Removes the Throws a hook with library for custom commands Commander is the library which handles Hilbish commands. This makes
+the user able to add Lua-written commands to their shell without making
+a separate script in a bin folder. Instead, you may simply use the Commander
+library in your Hilbish config. In this example, a command with the name of The Removes the named command. Note that this will only remove Commander-registered commands. Adds a new command with the given filesystem interaction and functionality library The fs module provides filesystem functions to Hilbish. While Lua’s standard
+library has some I/O functions, they’re missing a lot of the basics. The Returns an absolute version of the Returns the “basename,” or the last part of the provided Returns the directory part of Match all files based on the provided Takes any list of paths and joins them based on the operating system’s path separator. Creates a new directory with the provided Returns a pair of connected files, also known as a pipe. This function has no parameters. Returns a list of all files and directories in the provided path. Returns the information about a given command aliasing The alias interface deals with all command aliases in Hilbish. This is an alias (ha) for the hilbish.alias
+function. This function has no parameters. Get a table of all aliases, with string keys as the alias and the value as the command. This function has no parameters. tab completions The completions interface deals with tab completions. Return binaries/executables based on the provided parameters. Calls a completer function. This is mainly used to call a command completer, which will have a Returns file matches based on the provided parameters. This function contains the general completion handler for Hilbish. This function handles interactions for Hilbish's line reader The hilbish.editor interface provides functions to
+directly interact with the line editor in use. Returns the current input line. This function has no parameters. Returns the text that is at the register. Reads a keystroke from the user. This is in a format of something like Ctrl-L. This function has no parameters. command history The history interface deals with command history.
+This includes the ability to override functions to change the main
+method of saving history. Retrieves all history as a table. This function has no parameters. Deletes all commands from the history. This function has no parameters. Retrieves a command from the history based on the 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. Creates a new job. This function does not run the job. This function is intended to be Returns a table of all job objects. This function has no parameters. Disowns a job. This simply deletes it from the list of jobs without stopping it. Get a job object via its ID. This function has no parameters. Returns the last added job to the table. This function has no parameters. The Job type describes a Hilbish job. Puts a job in the background. This acts the same as initially running a job. Puts a job in the foreground. This will cause it to run like it was
+executed normally and wait for it to complete. Starts running the job. Stops the job from running. native module loading The hilbish.module interface provides a function to load
+Hilbish plugins/modules. Hilbish modules are Go-written
+plugins (see https://pkg.go.dev/plugin
+) that are used to add functionality
+to Hilbish that cannot be written in Lua for any reason. Note that you don’t ever need to use the load function that is here as
+modules can be loaded with a To make a valid native module, the Go plugin has to export a Loader function
+with a signature like so: Hilbish uses this package as its Lua runtime. You will need to read
+it to use it for a native plugin. Here is some code for an example plugin: This can be compiled with 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. Runners are functions that evaluate user input. The default runners in
+Hilbish can run shell script and Lua code. A runner is passed the input and has to return a table with these values.
+All are not required, only the useful ones the runner needs to return.
+(So if there isn’t an error, just omit Here is a simple example of a fennel runner. It falls back to
+shell script if fennel eval has an error. This is the same as the Evaluates timeout and interval API If you ever want to run a piece of code on a timed interval, or want to wait
+a few seconds, you don’t have to rely on timing tricks, as Hilbish has a
+timer API to set intervals and timeouts. These are the simple functions An example of usage: Creates a timer that runs based on the specified The Job type describes a Hilbish timer. Starts a timer. Stops a timer. user-related 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
+for configs and data. the core Hilbish API The Hilbish module includes the core API, containing
+interfaces and functions which directly relate to shell functionality. Sets an alias, with a name of Appends the provided dir to the command path ( Registers a completion handler for the specified scope. Returns the current directory of the shell. This function has no parameters. Replaces the currently running Hilbish instance with the supplied command. Puts Line highlighter handler. The command line hint handler. It gets called on every key insert to Sets the input mode for Hilbish’s line reader. Runs the Changes the text prompt when Hilbish asks for more input. Changes the shell prompt to the provided string. Read input from the user, using Hilbish’s line editor/input reader. Runs Sets the execution/runner mode for interactive Hilbish. Executed the Checks if A sink is a structure that has input and/or output to/from
+a desination. Sets/toggles the option of automatically flushing output.
+A call with no argument will toggle the value. Flush writes all buffered input to the sink. Reads a liine of input from the sink. Reads all input from the sink. Writes data to a sink. Writes data to a sink with a newline at the end. Welcome to the API documentation for Hilbish. This documents Lua functions
+provided by Hilbish. low level terminal library The terminal library is a simple and lower level library for certain terminal interactions. Restores the last saved state of the terminal This function has no parameters. Saves the current state of the terminal. This function has no parameters. Tab completion for commands. Completions for commands can be created with the To create completions for a command is simple.
+The callback will be passed 3 parameters: In most cases, the completer just uses In order to return your results, it has to go within a “completion group.”
+Then you return a table of completion groups and a prefix. The prefix will
+usually just be the Hilbish allows one to mix completion menus of different types, so
+a grid menu and a list menu can be used and complete and display at the same time.
+A completion group is a table with these keys: The requirements of the Otherwise if it is a Which looks like this: Like most parts of Hilbish, it’s made to be extensible and
+customizable. The default handler for completions in general can
+be overwritten to provide more advanced completions if needed.
+This usually doesn’t need to be done though, unless you know
+what you’re doing. The default completion handler provides 3 things:
+binaries (with a plain name requested to complete, those in
+$PATH), files, or command completions. It will try to run a handler
+for the command or fallback to file completions. To overwrite it, just assign a function to Last updated Dec 26, 2023 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 ….) 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
+. 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. Of course! This is a modern shell. Hilbish provides a way for users
+to write tab completion for any command and/or the whole shell.
+Inline hinting and syntax highlighting are also available. Last updated Dec 26, 2023 Hilbish has a wide range of features to enhance the user’s experience
+new ones are always being added. If there is something missing here or
+something you would like to see, please start a discussion
+or comment on any existing ones which match your request. Last updated Dec 26, 2023 Hilbish features a simple notification system which can be
+used by other plugins and parts of the shell to notify the user
+of various actions. This is used via the A The There are a few simple use cases of this notification/messaging system.
+It could also be used as some “inter-shell” messaging system (???) but
+is intended to display to users. An example is notifying users of completed jobs/commands ran in the background.
+Any Hilbish-native command (think the upcoming Greenhouse pager) can display
+it. Simple customizable options. Opts are simple toggle or value options a user can set in Hilbish.
+As toggles, there are things like Opts are accessed from the The autocd opt makes it so that lone directories attempted to be executed are
+instead set as the shell’s directory. Example: Sets whether command history will be saved or not. The greeting is the message that Hilbish shows on startup
+(the one which says Welcome to Hilbish). This can be set to either true/false to enable/disable or a custom greeting string. The message of the day shows the current major.minor version and
+includes a small range of things added in the current release. This can be set to Toggles the functionality of fuzzy history searching, usable
+via the menu in Ctrl-R. Fuzzy searching is an approximate searching
+method, which means results that match closest will be shown instead
+of an exact match. If this is enabled, when a background job is finished,
+a notification
+will be sent. Last updated Dec 26, 2023 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 like
+Fennel as the interactive script runner. Runner mode can also be used to handle specific kinds of input before
+evaluating like normal, which is how Link.hsh
+handles links. The “runner mode” of Hilbish is customizable via You can also set it to a function, which will be called everytime Hilbish
+needs to run interactive input. For more detail, see the API documentation The A runner function is expected to return a table with the following values: These are the “low level” functions for the These functions should be preferred over the previous ones. Last updated Dec 26, 2023 To start Hilbish, open a terminal. If Hilbish has been installed and is not the
+default shell, you can simply run There are a few ways to make Hilbish your default shell. A simple way is
+to make it your user/login shell. To do that, simply run 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. Some shells (like zsh) have an rc file, like This will replace the shell with Hilbish, set $SHELL to Hilbish and launch it as a login shell. 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 To edit your user configuration, you can copy that file to As the directory is usually 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 Thrown right before a command is executed. Thrown after the user’s ran command is finished. Thrown if the command attempted to execute was not found.
+This can be used to customize the text printed when a command is not found.
+Example: Thrown when the user attempts to run a file that is not executable
+(like a text file, or Unix binary without +x permission). Sent when Hilbish is going to exit. This signal returns no variables. Sent when the Vim mode of Hilbish is changed (like from insert to normal mode).
+This can be used to change the prompt and notify based on Vim mode. Sent when the user cancels their command input with Ctrl-C This signal returns no variables. Thrown when a notification
+is sent. Signals are global events emitted with the Bait
+module.
+For more detail on how to use these signals, you may check the Bait page. Note: Thrown when Hilbish receive the SIGINT signal,
+aka when Ctrl-C is pressed. This signal returns no variables. Thrown when the terminal is resized. This signal returns no variables. Thrown when SIGUSR1 is sent to Hilbish. This signal returns no variables. Thrown when SIGUSR2 is sent to Hilbish. This signal returns no variables. Last updated Dec 26, 2023 Hilbish is a hyper-extensible shell mainly intended for interactive use.
+To enhance the interactive experience, Hilbish comes with a wide range
+of features and sane defaults, including a nice looking prompt,
+advanced completion menus and history search. Here documents some of the features of Hilbish and the Lua API. (This has mainly been replaced by hilbish.jobs
+). Hilbish has pretty standard job control. It’s missing one or two things,
+but works well. One thing which is different from other shells
+(besides Hilbish) itself is the API for jobs, and of course it’s in Lua.
+You can add jobs, stop and delete (disown) them and even get output. The job interface refers to (Note that in the list here, they’re called from A job object is a piece of You can still have a job object for a disowned job,
+it just won’t be working anywhere. :^) Lunacolors is an ANSI color/styling library for Lua. It is included
+by default in standard Hilbish distributions to provide easy styling
+for things like prompts and text. For simple usage, a single color or style is enough. For example,
+you can just use In other usage, you may want to use a format string instead of having
+multiple nested functions for different styles. This is where the format
+function comes in. You can used named keywords to style a section of text. The list of arguments are:
+Colors: For the colors, there are background and bright variants. The background
+color variants have a suffix of A bit after creation, we have the outside nature. Little plants, seeds,
+growing to their final phase: a full plant. A lot of Hilbish itself is
+written in Go, but there are parts made in Lua, being most builtins
+( Hilbish’s Lua core module is called Currently, This has been moved to the Vim actions are essentially just when a user uses a Vim keybind.
+Things like yanking and pasting are Vim actions.
+This is not an “offical Vim thing,” just a Hilbish thing. The Here is documentation for what the table of args will hold for an
+appropriate Vim action. Hilbish has a Vim binding input mode accessible for use.
+It can be enabled with the This is documentation for everything relating to it. 🌺 Hilbish is the new Moon-powered interactive shell for Lua fans! 🌺 Hilbish is the new Moon-powered interactive shell for Lua fans! 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,
diff --git a/versions/ci-website-fixes/index.xml b/versions/ci-website-fixes/index.xml
index 25fb690..e8951da 100644
--- a/versions/ci-website-fixes/index.xml
+++ b/versions/ci-website-fixes/index.xml
@@ -1,4 +1,11 @@
- 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
diff --git a/versions/ci-website-fixes/sitemap.xml b/versions/ci-website-fixes/sitemap.xml
index a9e8f3e..f67b08d 100644
--- a/versions/ci-website-fixes/sitemap.xml
+++ b/versions/ci-website-fixes/sitemap.xml
@@ -1 +1 @@
- The release with full changelogs and prebuilt binaries can be seen at the v2.2.0 tag.
+ The release with full changelogs and prebuilt binaries can be seen at the v2.2.0 tag.
Welcome to a very long awaited release of Hilbish, and on Christmas. Just think of it as a long preparing, late Christmas gift. :) This release does not contain a whole lot of changes, but it is a new release with enhancements and bug fixes!
Documentation As is a trend, the documentation has been improved by ONE HUNDRED TIMES. Happy birthday Hilbish! As of last month, Hilbish is now 2 years old. Unfortunately I missed the official date, but I will still make a more focused post on the date (19st).
I decided to fix up this website and Hilbish’s logo, so that can be thought of as something for the 2 years milestone?
diff --git a/versions/ci-website-fixes/tags/index.xml b/versions/ci-website-fixes/tags/index.xml
index 00360f5..c11b97f 100644
--- a/versions/ci-website-fixes/tags/index.xml
+++ b/versions/ci-website-fixes/tags/index.xml
@@ -1 +1 @@
-Hilbish v2.0 Release
+Documentation When querying about the problems people have with Hilbish, one of the issues was its poor documentation." name=description>
+Hilbish v2.0 Release
by sammyettev2.1 Release
+Adding the return types for all functions that need them Documenting Hilbish types like job objects and timers properly." name=description>
+v2.1 Release
by sammyettev2.1.1 Release
+Bug Fixes Validation checks for command input When running this version, you may have noticed an odd message that sometimes comes up when running commands." name=description>
+v2.1.1 Release
by sammyettev2.1.2 Release
+A real release will come possibly in a few days or next week, so stay tuned for the good and feature-filled release of v2.2!" name=description>
+v2.1.2 Release
by sammyettev2.2 Release
+Documentation As is a trend, the documentation has been improved by ONE HUNDRED TIMES." name=description>
+v2.2 Release
by sammyetteWelcome to the Hilbish blog
+Welcome to the Hilbish blog
by sammyettev2.2 Release
v2.2 Release
Improving Hilbish's Branding
Module bait
Introduction
+
events
system, many actions in Hilbish emit events.
+Unlike Node.js, Hilbish events are global. So make sure to
+pick a unique name!catch
it.
+You can act on events via callback functions.1bait.catch('command.exit', function(code)
+2 running = false
+3 doPrompt(code ~= 0)
+4 doNotifyPrompt()
+5end)
+
command.exit
event is thrown,
+this function will set the user prompt.Functions
+
catch(name, cb) Catches an event. This function can be used to act on events. catchOnce(name, cb) Catches an event, but only once. This will remove the hook immediately after it runs for the first time. hooks(name) -> table Returns a table of functions that are hooked on an event with the corresponding name
.release(name, catcher) Removes the catcher
for the event with name
.throw(name, …args) Throws a hook with name
with the provided args
.bait.catch(name, cb)
+
Parameters
+
string
name
The name of the hook.function
cb
The function that will be called when the hook is thrown.Example
+
1bait.catch('hilbish.exit', function()
+2 print 'Goodbye Hilbish!'
+3end)
+
bait.catchOnce(name, cb)
+
Parameters
+
string
name
The name of the eventfunction
cb
The function that will be called when the event is thrown.bait.hooks(name) -> table
+
name
.Parameters
+
string
name
The name of the hookbait.release(name, catcher)
+
catcher
for the event with name
.
For this to work, catcher
has to be the same function used to catch
an event, like one saved to a variable.Parameters
+
string
name
Name of the event the hook is onfunction
catcher
Hook function to removeExample
+
1local hookCallback = function() print 'hi' end
+2
+3bait.catch('event', hookCallback)
+4
+5-- a little while later....
+6bait.release('event', hookCallback)
+7-- and now hookCallback will no longer be ran for the event.
+
bait.throw(name, ...args)
+
name
with the provided args
.Parameters
+
string
name
The name of the hook.any
args
(This type is variadic. You can pass an infinite amount of parameters with this type.)
The arguments to pass to the hook.Example
+
1bait.throw('greeting', 'world')
+2
+3-- This can then be listened to via
+4bait.catch('gretting', function(greetTo)
+5 print('Hello ' .. greetTo)
+6end)
+
Module commander
Introduction
+
1local commander = require 'commander'
+2
+3commander.register('hello', function(args, sinks)
+4 sinks.out:writeln 'Hello world!'
+5end)
+
hello
is created
+that will print Hello world!
to output. One question you may
+have is: What is the sinks
parameter?sinks
parameter is a table with 3 keys: input
, out
, and err
.
+There is an in
alias to input
, but it requires using the string accessor syntax (sinks['in']
)
+as in
is also a Lua keyword, so input
is preferred for use.
+All of them are a Sink.
+In the future, sinks.in
will be removed.in
is the standard input.
+You may use the read functions on this sink to get input from the user.out
is standard output.
+This is usually where command output should go.err
is standard error.
+This sink is for writing errors, as the name would suggest.Functions
+
deregister(name) Removes the named command. Note that this will only remove Commander-registered commands. register(name, cb) Adds a new command with the given name
. When Hilbish has to run a command with a name,registry() -> table Returns all registered commanders. Returns a list of tables with the following keys: commander.deregister(name)
+
Parameters
+
string
name
Name of the command to remove.commander.register(name, cb)
+
name
. When Hilbish has to run a command with a name,
it will run the function providing the arguments and sinks.Parameters
+
string
name
Name of the commandfunction
cb
Callback to handle command invocationExample
+
1-- When you run the command `hello` in the shell, it will print `Hello world`.
+2-- If you run it with, for example, `hello Hilbish`, it will print 'Hello Hilbish'
+3commander.register('hello', function(args, sinks)
+4 local name = 'world'
+5 if #args > 0 then name = args[1] end
+6
+7 sinks.out:writeln('Hello ' .. name)
+8end)
+
Module fs
Introduction
+
fs
+library offers more functions and will work on any operating system Hilbish does.Functions
+
abs(path) -> string Returns an absolute version of the path
.basename(path) -> string Returns the “basename,” or the last part of the provided path
. If path is empty,cd(dir) Changes Hilbish’s directory to dir
.dir(path) -> string Returns the directory part of path
. If a file path likeglob(pattern) -> matches (table) Match all files based on the provided pattern
.join(…path) -> string Takes any list of paths and joins them based on the operating system’s path separator. mkdir(name, recursive) Creates a new directory with the provided name
.fpipe() -> File, File Returns a pair of connected files, also known as a pipe. readdir(path) -> table[string] Returns a list of all files and directories in the provided path. stat(path) -> {} Returns the information about a given path
.Static module fields
+
pathSep The operating system’s path separator. fs.abs(path) -> string
+
path
.
This can be used to resolve short paths like ..
to /home/user
.Parameters
+
string
path
fs.basename(path) -> string
+
path
. If path is empty,.
will be returned.Parameters
+
string
path
Path to get the base name of.fs.dir(path) -> string
+
path
. If a file path like~/Documents/doc.txt
then this function will return ~/Documents
.Parameters
+
string
path
Path to get the directory for.fs.glob(pattern) -> matches (table)
+
pattern
.
For the syntax’ refer to Go’s filepath.Match function: https://pkg.go.dev/path/filepath#MatchParameters
+
string
pattern
Pattern to compare files with.Example
+
1--[[
+ 2 Within a folder that contains the following files:
+ 3 a.txt
+ 4 init.lua
+ 5 code.lua
+ 6 doc.pdf
+ 7]]--
+ 8local matches = fs.glob './*.lua'
+ 9print(matches)
+10-- -> {'init.lua', 'code.lua'}
+
fs.join(...path) -> string
+
Parameters
+
string
path
(This type is variadic. You can pass an infinite amount of parameters with this type.)
Paths to join togetherExample
+
1-- This prints the directory for Hilbish's config!
+2print(fs.join(hilbish.userDir.config, 'hilbish'))
+3-- -> '/home/user/.config/hilbish' on Linux
+
fs.mkdir(name, recursive)
+
name
.
With recursive
, mkdir will create parent directories.Parameters
+
string
name
Name of the directoryboolean
recursive
Whether to create parent directories for the provided nameExample
+
1-- This will create the directory foo, then create the directory bar in the
+2-- foo directory. If recursive is false in this case, it will fail.
+3fs.mkdir('./foo/bar', true)
+
fs.fpipe() -> File, File
+
The type returned is a Lua file, same as returned from io
functions.Parameters
+
fs.readdir(path) -> table[string]
+
Parameters
+
string
dir
fs.stat(path) -> {}
+
path
.
The returned table contains the following values:
name (string) - Name of the path
size (number) - Size of the path in bytes
mode (string) - Unix permission mode in an octal format string (with leading 0)
isDir (boolean) - If the path is a directoryParameters
+
string
path
Example
+
1local inspect = require 'inspect'
+ 2
+ 3local stat = fs.stat '~'
+ 4print(inspect(stat))
+ 5--[[
+ 6Would print the following:
+ 7{
+ 8 isDir = true,
+ 9 mode = "0755",
+10 name = "username",
+11 size = 12288
+12}
+13]]--
+
Module hilbish.aliases
Introduction
+
Functions
+
add(alias, cmd) This is an alias (ha) for the hilbish.alias
+function. delete(name) Removes an alias. list() -> table[string, string] Get a table of all aliases, with string keys as the alias and the value as the command. resolve(alias) -> string? Resolves an alias to its original command. Will thrown an error if the alias doesn’t exist. hilbish.aliases.add(alias, cmd)
+
Parameters
+
hilbish.aliases.list() -> table[string, string]
+
Parameters
+
Example
+
1hilbish.aliases.add('hi', 'echo hi')
+2
+3local aliases = hilbish.aliases.list()
+4-- -> {hi = 'echo hi'}
+
Module hilbish.completion
Introduction
+
Functions
+
bins(query, ctx, fields) -> entries (table), prefix (string) Return binaries/executables based on the provided parameters. call(name, query, ctx, fields) -> completionGroups (table), prefix (string) Calls a completer function. This is mainly used to call a command completer, which will have a name
files(query, ctx, fields) -> entries (table), prefix (string) Returns file matches based on the provided parameters. handler(line, pos) This function contains the general completion handler for Hilbish. This function handles hilbish.completion.bins(query, ctx, fields) -> entries (table), prefix (string)
+
This function is meant to be used as a helper in a command completion handler.Parameters
+
string
query
string
ctx
table
fields
Example
+
1-- an extremely simple completer for sudo.
+ 2hilbish.complete('command.sudo', function(query, ctx, fields)
+ 3 table.remove(fields, 1)
+ 4 if #fields[1] then
+ 5 -- return commands because sudo runs a command as root..!
+ 6
+ 7 local entries, pfx = hilbish.completion.bins(query, ctx, fields)
+ 8 return {
+ 9 type = 'grid',
+10 items = entries
+11 }, pfx
+12 end
+13
+14 -- ... else suggest files or anything else ..
+15end)
+
hilbish.completion.call(name, query, ctx, fields) -> completionGroups (table), prefix (string)
+
name
in the form of command.name
, example: command.git
.
You can check the Completions doc or doc completions
for info on the completionGroups
return value.Parameters
+
string
name
string
query
string
ctx
table
fields
hilbish.completion.files(query, ctx, fields) -> entries (table), prefix (string)
+
This function is meant to be used as a helper in a command completion handler.Parameters
+
string
query
string
ctx
table
fields
hilbish.completion.handler(line, pos)
+
completion of everything, which includes calling other command handlers, binaries, and files.
This function can be overriden to supply a custom handler. Note that alias resolution is required to be done in this function.Parameters
+
string
line
The current Hilbish command linenumber
pos
Numerical position of the cursorExample
+
1-- stripped down version of the default implementation
+ 2function hilbish.completion.handler(line, pos)
+ 3 local query = fields[#fields]
+ 4
+ 5 if #fields == 1 then
+ 6 -- call bins handler here
+ 7 else
+ 8 -- call command completer or files completer here
+ 9 end
+10end
+
Module hilbish.editor
Introduction
+
Functions
+
getLine() -> string Returns the current input line. getVimRegister(register) -> string Returns the text that is at the register. insert(text) Inserts text into the Hilbish command line. getChar() -> string Reads a keystroke from the user. This is in a format of something like Ctrl-L. setVimRegister(register, text) Sets the vim register at register
to hold the passed text.hilbish.editor.getLine() -> string
+
Parameters
+
hilbish.editor.getVimRegister(register) -> string
+
Parameters
+
string
register
hilbish.editor.getChar() -> string
+
Parameters
+
Module hilbish.history
Introduction
+
Functions
+
add(cmd) Adds a command to the history. all() -> table Retrieves all history as a table. clear() Deletes all commands from the history. get(index) Retrieves a command from the history based on the index
.size() -> number Returns the amount of commands in the history. hilbish.history.all() -> table
+
Parameters
+
hilbish.history.clear()
+
Parameters
+
hilbish.history.get(index)
+
index
.Parameters
+
number
index
Module hilbish.jobs
Introduction
+
Functions
+
add(cmdstr, args, execPath) Creates a new job. This function does not run the job. This function is intended to be all() -> table[@Job] Returns a table of all job objects. disown(id) Disowns a job. This simply deletes it from the list of jobs without stopping it. get(id) -> @Job Get a job object via its ID. last() -> @Job Returns the last added job to the table. hilbish.jobs.add(cmdstr, args, execPath)
+
used by runners, but can also be used to create jobs via Lua. Commanders cannot be ran as jobs.Parameters
+
string
cmdstr
String that a user would write for the jobtable
args
Arguments for the commands. Has to include the name of the command.string
execPath
Binary to use to run the command. Needs to be an absolute path.Example
+
1hilbish.jobs.add('go build', {'go', 'build'}, '/usr/bin/go')
+
hilbish.jobs.all() -> table[Job]
+
Parameters
+
hilbish.jobs.disown(id)
+
Parameters
+
number
id
hilbish.jobs.get(id) -> Job
+
Parameters
+
hilbish.jobs.last() -> Job
+
Parameters
+
Types
+
Job
+
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. Methods
+
background()
+
foreground()
+
start()
+
stop()
+
Module hilbish.module
Introduction
+
require
call like Lua C modules, and the
+search paths can be changed with the paths
property here.func(*rt.Runtime) rt.Value
.rt
in this case refers to the Runtime type at
+https://pkg.go.dev/github.com/arnodel/golua@master/runtime#Runtime1package main
+2
+3import (
+4 rt "github.com/arnodel/golua/runtime"
+5)
+6
+7func Loader(rtm *rt.Runtime) rt.Value {
+8 return rt.StringValue("hello world!")
+9}
+
go build -buildmode=plugin plugin.go
.
+If you attempt to require and print the result (print(require 'plugin')
), it will show “hello world!”Functions
+
load(path) Loads a module at the designated path
.Static module fields
+
paths A list of paths to search when loading native modules. This is in the style of Lua search paths and will be used when requiring native modules. Example: ?.so;?/?.so
Module hilbish.runner
Introduction
+
err
.)exitCode
(number): A numerical code to indicate the exit result.input
(string): The user input. This will be used to add
+to the history.err
(string): A string to indicate an interal error for the runner.
+It can be set to a few special values for Hilbish to throw the right hooks and have a better looking message:[command]: not-found
will throw a command.not-found hook based on what [command]
is.[command]: not-executable
will throw a command.not-executable hook.continue
(boolean): Whether to prompt the user for more input. 1local fennel = require 'fennel'
+ 2
+ 3hilbish.runnerMode(function(input)
+ 4 local ok = pcall(fennel.eval, input)
+ 5 if ok then
+ 6 return {
+ 7 input = input
+ 8 }
+ 9 end
+10
+11 return hilbish.runner.sh(input)
+12end)
+
Functions
+
setMode(cb) This is the same as the hilbish.runnerMode
function.lua(cmd) Evaluates cmd
as Lua input. This is the same as using dofile
sh(cmd) Runs a command in Hilbish’s shell script interpreter. hilbish.runner.setMode(cb)
+
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.Parameters
+
function
cb
hilbish.runner.lua(cmd)
+
cmd
as Lua input. This is the same as using dofile
or load
, but is appropriated for the runner interface.Parameters
+
string
cmd
Module hilbish.timers
Introduction
+
hilbish.interval
and hilbish.timeout
(doc
+accessible with doc hilbish
, or Module hilbish
on the Website).1local t = hilbish.timers.create(hilbish.timers.TIMEOUT, 5000, function()
+2 print 'hello!'
+3end)
+4
+5t:start()
+6print(t.running) // true
+
Functions
+
create(type, time, callback) -> @Timer Creates a timer that runs based on the specified time
.get(id) -> @Timer Retrieves a timer via its ID. Static module fields
+
INTERVAL Constant for an interval timer type TIMEOUT Constant for a timeout timer type hilbish.timers.create(type, time, callback) -> Timer
+
time
.Parameters
+
number
type
What kind of timer to create, can either be hilbish.timers.INTERVAL
or hilbish.timers.TIMEOUT
number
time
The amount of time the function should run in milliseconds.function
callback
The function to run for the timer.Types
+
Timer
+
Object properties
+
type What type of timer it is running If the timer is running duration The duration in milliseconds that the timer will run Methods
+
start()
+
stop()
+
Module hilbish.userDir
Introduction
+
Static module fields
+
config The user’s config directory data The user’s directory for program data Module hilbish
Introduction
+
Functions
+
alias(cmd, orig) Sets an alias, with a name of cmd
to another command.appendPath(dir) Appends the provided dir to the command path ( $PATH
)complete(scope, cb) Registers a completion handler for the specified scope. cwd() -> string Returns the current directory of the shell. exec(cmd) Replaces the currently running Hilbish instance with the supplied command. goro(fn) Puts fn
in a Goroutine.highlighter(line) Line highlighter handler. hinter(line, pos) The command line hint handler. It gets called on every key insert to inputMode(mode) Sets the input mode for Hilbish’s line reader. interval(cb, time) -> @Timer Runs the cb
function every specified amount of time
.multiprompt(str) Changes the text prompt when Hilbish asks for more input. prependPath(dir) Prepends dir
to $PATH.prompt(str, typ) Changes the shell prompt to the provided string. read(prompt) -> input (string) Read input from the user, using Hilbish’s line editor/input reader. run(cmd, streams) -> exitCode (number), stdout (string), stderr (string) Runs cmd
in Hilbish’s shell script interpreter.runnerMode(mode) Sets the execution/runner mode for interactive Hilbish. timeout(cb, time) -> @Timer Executed the cb
function after a period of time
.which(name) -> string Checks if name
is a valid command.Static module fields
+
ver The version of Hilbish goVersion The version of Go that Hilbish was compiled with user Username of the user host Hostname of the machine dataDir Directory for Hilbish data files, including the docs and default modules interactive Is Hilbish in an interactive shell? login Is Hilbish the login shell? vimMode Current Vim input mode of Hilbish (will be nil if not in Vim input mode) exitCode Exit code of the last executed command hilbish.alias(cmd, orig)
+
cmd
to another command.Parameters
+
string
cmd
Name of the aliasstring
orig
Command that will be aliasedExample
+
1-- With this, "ga file" will turn into "git add file"
+2hilbish.alias('ga', 'git add')
+3
+4-- Numbered substitutions are supported here!
+5hilbish.alias('dircount', 'ls %1 | wc -l')
+6-- "dircount ~" would count how many files are in ~ (home directory).
+
hilbish.appendPath(dir)
+
$PATH
)Parameters
+
string|table
dir
Directory (or directories) to append to pathExample
+
1hilbish.appendPath '~/go/bin'
+2-- Will add ~/go/bin to the command path.
+3
+4-- Or do multiple:
+5hilbish.appendPath {
+6 '~/go/bin',
+7 '~/.local/bin'
+8}
+
hilbish.complete(scope, cb)
+
A scope
is expected to be command.<cmd>
,
replacing command.git
).
The documentation for completions, under Features/Completions or doc completions
provides more details.Parameters
+
string
scope
function
cb
Example
+
1-- This is a very simple example. Read the full doc for completions for details.
+ 2hilbish.complete('command.sudo', function(query, ctx, fields)
+ 3 if #fields == 0 then
+ 4 -- complete for commands
+ 5 local comps, pfx = hilbish.completion.bins(query, ctx, fields)
+ 6 local compGroup = {
+ 7 items = comps, -- our list of items to complete
+ 8 type = 'grid' -- what our completions will look like.
+ 9 }
+10
+11 return {compGroup}, pfx
+12 end
+13
+14 -- otherwise just be boring and return files
+15
+16 local comps, pfx = hilbish.completion.files(query, ctx, fields)
+17 local compGroup = {
+18 items = comps,
+19 type = 'grid'
+20 }
+21
+22 return {compGroup}, pfx
+23end)
+
hilbish.cwd() -> string
+
Parameters
+
hilbish.exec(cmd)
+
This can be used to do an in-place restart.Parameters
+
string
cmd
hilbish.goro(fn)
+
fn
in a Goroutine.
This can be used to run any function in another thread at the same time as other Lua code.
NOTE: THIS FUNCTION MAY CRASH HILBISH IF OUTSIDE VARIABLES ARE ACCESSED.
This is a limitation of the Lua runtime.Parameters
+
function
fn
hilbish.highlighter(line)
+
This is mainly for syntax highlighting, but in reality could set the input
of the prompt to display anything. The callback is passed the current line
and is expected to return a line that will be used as the input display.
Note that to set a highlighter, one has to override this function.Parameters
+
string
line
Example
+
1--This code will highlight all double quoted strings in green.
+2function hilbish.highlighter(line)
+3 return line:gsub('"%w+"', function(c) return lunacolors.green(c) end)
+4end
+
hilbish.hinter(line, pos)
+
determine what text to use as an inline hint. It is passed the current
line and cursor position. It is expected to return a string which is used
as the text for the hint. This is by default a shim. To set hints,
override this function with your custom handler.Parameters
+
string
line
number
pos
Position of cursor in line. Usually equals string.len(line)Example
+
1-- this will display "hi" after the cursor in a dimmed color.
+2function hilbish.hinter(line, pos)
+3 return 'hi'
+4end
+
hilbish.inputMode(mode)
+
emacs
is the default. Setting it to vim
changes behavior of input to be
Vim-like with modes and Vim keybinds.Parameters
+
string
mode
Can be set to either emacs
or vim
hilbish.interval(cb, time) -> Timer
+
cb
function every specified amount of time
.
This creates a timer that ticking immediately.Parameters
+
function
cb
number
time
Time in milliseconds.hilbish.multiprompt(str)
+
This will show up when text is incomplete, like a missing quoteParameters
+
string
str
Example
+
1--[[
+ 2imagine this is your text input:
+ 3user ~ ∆ echo "hey
+ 4
+ 5but there's a missing quote! hilbish will now prompt you so the terminal
+ 6will look like:
+ 7user ~ ∆ echo "hey
+ 8--> ...!"
+ 9
+10so then you get
+11user ~ ∆ echo "hey
+12--> ...!"
+13hey ...!
+14]]--
+15hilbish.multiprompt '-->'
+
hilbish.prompt(str, typ)
+
There are a few verbs that can be used in the prompt text.
These will be formatted and replaced with the appropriate values.%d
- Current working directory%u
- Name of current user%h
- Hostname of deviceParameters
+
string
str
string
typ?
Type of prompt, being left or right. Left by default.Example
+
1-- the default hilbish prompt without color
+2hilbish.prompt '%u %d ∆'
+3-- or something of old:
+4hilbish.prompt '%u@%h :%d $'
+5-- prompt: user@hostname: ~/directory $
+
hilbish.read(prompt) -> input (string)
+
This is a separate instance from the one Hilbish actually uses.
Returns input
, will be nil if Ctrl-D is pressed, or an error occurs.Parameters
+
string
prompt?
Text to print before input, can be empty.hilbish.run(cmd, streams) -> exitCode (number), stdout (string), stderr (string)
+
cmd
in Hilbish’s shell script interpreter.
The streams
parameter specifies the output and input streams the command should use.
For example, to write command output to a sink.
As a table, the caller can directly specify the standard output, error, and input
streams of the command with the table keys out
, err
, and input
respectively.
As a boolean, it specifies whether the command should use standard output or return its output streams.Parameters
+
string
cmd
table|boolean
streams
Example
+
1
+ 2// This code is the same as `ls -l | wc -l`
+ 3local fs = require 'fs'
+ 4local pr, pw = fs.pipe()
+ 5hilbish.run('ls -l', {
+ 6 stdout = pw,
+ 7 stderr = pw,
+ 8})
+ 9
+10pw:close()
+11
+12hilbish.run('wc -l', {
+13 stdin = pr
+14})
+
hilbish.runnerMode(mode)
+
This determines whether Hilbish wll try to run input as Lua
and/or sh or only do one of either.
Accepted values for mode are hybrid (the default), hybridRev (sh first then Lua),
sh, and lua. It also accepts a function, to which if it is passed one
will call it to execute user input instead.
Read about runner mode
+for more information.Parameters
+
string|function
mode
hilbish.timeout(cb, time) -> Timer
+
cb
function after a period of time
.
This creates a Timer that starts ticking immediately.Parameters
+
function
cb
number
time
Time to run in milliseconds.hilbish.which(name) -> string
+
name
is a valid command.
Will return the path of the binary, or a basename if it’s a commander.Parameters
+
string
name
Types
+
Sink
+
Methods
+
autoFlush(auto)
+
flush()
+
read() -> string
+
readAll() -> string
+
write(str)
+
writeln(str)
+
API
Module terminal
Introduction
+
Functions
+
restoreState() Restores the last saved state of the terminal saveState() Saves the current state of the terminal. setRaw() Puts the terminal into raw mode. size() Gets the dimensions of the terminal. Returns a table with width
and height
terminal.restoreState()
+
Parameters
+
terminal.saveState()
+
Parameters
+
Completions
hilbish.complete
+function. See the link for how to use it.query
(string): The text that the user is currently trying to complete.
+This should be used to match entries.ctx
(string): Contains the entire line. Use this if
+more text is needed to be parsed for context.fields
(string): The ctx
split up by spaces.fields
to check the amount
+and query
on what to match entries on.query
.type
(string): type of completion menu, either grid
or list
.items
(table): a list of items.items
table is different based on the
+type
. If it is a grid
, it can simply be a table of strings.list
then each entry can
+either be a string or a table.
+Example: 1local cg = {
+ 2 items = {
+ 3 'list item 1',
+ 4 ['--command-flag-here'] = {'this does a thing', '--the-flag-alias'}
+ 5 },
+ 6 type = 'list'
+ 7}
+ 8local cg2 = {
+ 9 items = {'just', 'a bunch', 'of items', 'here', 'hehe'},
+10 type = 'grid'
+11}
+12
+13return {cg, cg2}, prefix
+
Completion Handler
+
hilbish.completion.handler
like so:1-- line is the entire line as a string
+2-- pos is the position of the cursor.
+3function hilbish.completion.handler(line, pos)
+4 -- do things
+5end
+
Frequently Asked Questions
Is Hilbish POSIX compliant?
+
Windows Support?
+
Why?
+
Does it have “autocompletion” or “tab completion”
+
Features
Notification
Get notified of shell actions.hilbish.message
interface.message
is defined as a table with the following properties:icon
: A unicode/emoji icon for the notification.title
: The title of the messagetext
: Message text/bodychannel
: The source of the message. This should be a
+unique and easily readable text identifier.summary
: A short summary of the notification and message.
+If this is not present and you are using this to display messages,
+you should take part of the text
instead.hilbish.message
interface provides the following functions:send(message)
: Sends a message and emits the hilbish.notification
+signal. DO NOT emit the hilbish.notification
signal directly, or
+the message will not be stored by the message handler.read(idx)
: Marks message at idx
as read.delete(idx)
: Removes message at idx
.readAll()
: Marks all messages as read.clear()
: Deletes all messages.Options
autocd
or history saving. As values,
+there is the motd
which the user can either change to a custom string or disable.hilbish.opts
table. Here they can either
+be read or modifiedautocd
+Value:
boolean
+Default:
false
+1~/Directory
+2∆ ~
+3~
+4∆ Downloads
+5~/Downloads
+6∆ ../Documents
+7~/Documents
+8∆
+
history
+Value:
boolean
+Default:
true
+greeting
+Value:
boolean
or string
+motd
+Value:
boolean
+Default:
true
+false
to disable the message.fuzzy
+Value:
boolean
+Default:
false
+notifyJobFinish
+Value:
boolean
+Default:
true
+Runner Mode
Customize the interactive script/command runner.hilbish.runnerMode
,
+which determines how Hilbish will run user input. By default, this is
+set to hybrid
which is the previously mentioned behaviour of running Lua
+first then going to shell script. If you want the reverse order, you can
+set it to hybridRev
and for isolated modes there is sh
and lua
+respectively.hilbish.runner
interface is an alternative to using hilbish.runnerMode
+and also provides the shell script and Lua runner functions that Hilbish itself uses.exitCode
(number): Exit code of the commandinput
(string): The text input of the user. This is used by Hilbish to append extra input, in case
+more is requested.err
(string): A string that represents an error from the runner.
+This should only be set when, for example, there is a syntax error.
+It can be set to a few special values for Hilbish to throw the right
+hooks and have a better looking message.<command>: not-found
will throw a command.not-found
hook
+based on what <command>
is.<command>: not-executable
will throw a command.not-executable
hook.continue
(boolean): Whether Hilbish should prompt the user for no inputFunctions
+
hilbish.runner
interface.hilbish.runnerMode
input
in Hilbish’s sh interpreterinput
as Lua codesetMode
, but works with runners managed
+via the functions below.runner
+argument is either a function or a table with a run callback.add
but requires passing a table and
+overwrites if the name
d runner already exists.cmd
with a runner. If runnerName
isn’t passed,
+the current runner mode is used.Getting Started
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
+
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
+
Run after login shell
+
.zlogin
, which is ran when the shell session
+is a login shell. In that file, you can run Hilbish. Example:1exec hilbish -S -l
+
Configuration
+
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.hilbish.userDir.config .. '/hilbish/init.lua'
,
+which follows XDG on Linux and MacOS, and is located in %APPDATA% on Windows.~/.config
on Linux, you can run this command to copy it:cp /usr/share/hilbish/.hilbishrc.lua ~/.config/hilbish/init.lua
doc
command. This also works as
+general documentation for other things.Command
command.preexec
+
Variables
+
string
input
The raw string that the user typed. This will include the text
+without changes applied to it (argument substitution, alias expansion,
+etc.)string
cmdStr
The command that will be directly executed by the current runner.command.exit
+
Variables
+
number
code
The exit code of what was executed.string
cmdStr
The command or code that was executedcommand.not-found
+
1local bait = require 'bait'
+ 2-- Remove any present handlers on `command.not-found`
+ 3
+ 4local notFoundHooks = bait.hooks 'command.not-found'
+ 5for _, hook in ipairs(notFoundHooks) do
+ 6 bait.release('command.not-found', hook)
+ 7end
+ 8
+ 9-- then assign custom
+10bait.catch('command.not-found', function(cmd)
+11 print(string.format('The command "%s" was not found.', cmd))
+12end)
+
Variables
+
string
cmdStr
The name of the command.command.not-executable
+
Variables
+
string
cmdStr
The name of the command.Hilbish
hilbish.exit
+
Variables
+
hilbish.vimMode
+
Variables
+
string
modeName
The mode that has been set.
+Can be these values: insert
, normal
, delete
or replace
hilbish.cancel
+
Variables
+
hilbish.notification
+
Variables
+
table
notification
The notification. The properties are defined in the link above.hilbish.vimAction
-> actionName, args > Sent when the user does a “vim action,” being something
+like yanking or pasting text. See doc vim-mode actions
for more info.Signals
job
refers to a job object. You can check doc jobs
for more
+detail.job.start
-> job > Thrown when a new background job starts.job.done
-> job > Thrown when a background jobs exits.Signal
signal.sigint
+
Variables
+
signal.resize
+
Variables
+
signal.sigusr1
+
Variables
+
signal.sigusr2
+
Variables
+
Introduction
Job Interface
+
hilbish.jobs
.Functions
+
hilbish.jobs
, so
+a listing of foo
would mean hilbish.jobs.foo
)all()
-> {jobs}: Returns a table of all jobs.last()
-> job: Returns the last added job.get(id)
-> job: Get a job by its ID.add(cmdstr, args, execPath)
-> job: Adds a new job to the job table.
+Note that this does not run the command; You have to start it manually.
+cmdstr
is the user’s input for the job, args
is a table of arguments
+for the command. It includes arg0 (don’t set it as entry 0 in the table)
+and execPath
is an absolute path for the command executable.disown(id)
: Removes a job by ID from the job table.Job Object
+
userdata
. All the functions of a job require
+you to call them with a colon, since they are methods for the job object.
+Example: hilbish.jobs.last():foreground()
+Which will foreground the last job.Properties
+
cmd
: command stringrunning
: boolean whether the job is runningid
: unique id for the jobpid
: process id for the jobexitCode
: exit code of the job
+In ordinary cases you’d prefer to use the id
instead of pid
.
+The id
is unique to Hilbish and is how you get jobs with the
+hilbish.jobs
interface. It may also not describe the job entirely.Functions
+
stop()
: Stops the job.start()
: Starts the job.foreground()
: Set the job as the current running foreground process, or
+run it in the foreground after it has been suspended.background()
: Run the job in the background after it has been suspended.Lunacolors
lunacolors.blue 'Hello world'
and that’ll return
+blue text which you can print. This includes styles like bold,
+underline, etc.Bg
and bright has a prefix of bright
.
+Note that appropriate camel casing has to be applied to them. So bright
+blue would be brightBlue
and background cyan would be cyanBg
.Nature
doc
, cd
, cdr), completions, and other things.nature
.
+It runs after Hilbish’s Go core does.Nature Modules
+
nature
provides 1 intended public module: nature.dirs
.
+It is a simple API for managing recent directories and old
+current working directory.hilbish.timers
API doc (accessible by doc api hilbish.timers
)Actions
hilbish.vimAction
hook is thrown whenever a Vim action occurs.
+It passes 2 arguments: the action name, and an array (table) of args
+relating to it.yank
: register, yankedText
+The first argument for the yank action is the register yankedText goes to.paste
: register, pastedText
+The first argument for the paste action is the register pastedText is taken from.Vim Mode
hilbish.inputMode
function (check doc hilbish
).Something Unique.
Extensible, scriptable, configurable: All in Lua. ✨Something Unique.
Extensible, scriptable, configurable: All in Lua. ✨Simple and Easy Scripting
Official Binaries
+
Official Binaries
v2.2 Release
v2.2 Release
Improving Hilbish's Branding