mirror of
https://github.com/Hilbis/Hilbish
synced 2025-04-16 02:23:22 +00:00
79 lines
2.4 KiB
Lua
79 lines
2.4 KiB
Lua
-- @module hilbish
|
|
local bait = require 'bait'
|
|
local snail = require 'snail'
|
|
|
|
hilbish.snail = snail.new()
|
|
bait.catch('hilbish.cd', function(path)
|
|
hilbish.snail:dir(path)
|
|
end)
|
|
--- Runs `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.
|
|
--- #example
|
|
--- -- This code is the same as `ls -l | wc -l`
|
|
--- local fs = require 'fs'
|
|
--- local pr, pw = fs.pipe()
|
|
--- hilbish.run('ls -l', {
|
|
--- stdout = pw,
|
|
--- stderr = pw,
|
|
--- })
|
|
--- pw:close()
|
|
--- hilbish.run('wc -l', {
|
|
--- stdin = pr
|
|
--- })
|
|
--- #example
|
|
-- @param cmd string
|
|
-- @param streams table|boolean
|
|
-- @returns number, string, string
|
|
function hilbish.run(cmd, streams)
|
|
local sinks = {}
|
|
|
|
if type(streams) == 'boolean' then
|
|
if not streams then
|
|
sinks = {
|
|
out = hilbish.sink.new(),
|
|
err = hilbish.sink.new(),
|
|
input = io.stdin
|
|
}
|
|
end
|
|
elseif type(streams) == 'table' then
|
|
sinks = streams
|
|
end
|
|
|
|
local out = hilbish.snail:run(cmd, {sinks = sinks})
|
|
local returns = {out}
|
|
|
|
if type(streams) == 'boolean' and not streams then
|
|
table.insert(returns, sinks.out:readAll())
|
|
table.insert(returns, sinks.err:readAll())
|
|
end
|
|
|
|
return table.unpack(returns)
|
|
end
|
|
|
|
--- Sets the execution/runner mode for interactive Hilbish.
|
|
--- **NOTE: This function is deprecated and will be removed in 3.0**
|
|
--- Use `hilbish.runner.setCurrent` instead.
|
|
--- 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](../features/runner-mode) for more information.
|
|
-- @param mode string|function
|
|
function hilbish.runnerMode(mode)
|
|
if type(mode) == 'string' then
|
|
hilbish.runner.setCurrent(mode)
|
|
elseif type(mode) == 'function' then
|
|
hilbish.runner.set('_', {
|
|
run = mode
|
|
})
|
|
hilbish.runner.setCurrent '_'
|
|
else
|
|
error('expected runner mode type to be either string or function, got', type(mode))
|
|
end
|
|
end
|