First commit
This commit is contained in:
commit
847c9e64c0
51 changed files with 4058 additions and 0 deletions
64
.config/hilbish/starship.lua
Executable file
64
.config/hilbish/starship.lua
Executable file
|
@ -0,0 +1,64 @@
|
|||
-- Starship.rs support for Hilbish
|
||||
-- Supports the following features:
|
||||
-- * exit codes
|
||||
-- * command duration (kind of - it usually works but is not 100% perfect)
|
||||
-- * number of jobs
|
||||
-- * continuation prompt (which some shells like fish don't even support!)
|
||||
-- * anything else inherently handled by starship (git, username, etc)
|
||||
|
||||
local bait = require 'bait'
|
||||
local hilbish = require 'hilbish'
|
||||
|
||||
local M = {}
|
||||
|
||||
M.execTime = {}
|
||||
|
||||
function M.doPrompt(status, num_jobs, num_secs)
|
||||
-- Since lua by default only has second-resolution with its os.time() function,
|
||||
-- we need to multiply by 1000 to get milliseconds elapsed.
|
||||
-- This, of course, means we don't actually get millisecond-level resolution, but whatever - we work with what we got.
|
||||
local time_ms = num_secs * 1000
|
||||
|
||||
local cmd = "starship prompt --status " .. status .. " --jobs " .. num_jobs .. " --cmd-duration " .. time_ms
|
||||
local res = io.popen(cmd)
|
||||
hilbish.prompt(res:read("*all"))
|
||||
end
|
||||
|
||||
function M.doCommandExit(code, cmdStr)
|
||||
local cur_time = os.time()
|
||||
local time_elapsed = 0
|
||||
|
||||
if cmdStr ~= nil then
|
||||
if M.execTime[cmdStr] ~= nil then
|
||||
time_elapsed = cur_time - M.execTime[cmdStr]
|
||||
end
|
||||
M.execTime[cmdStr] = nil
|
||||
end
|
||||
|
||||
local jobs = hilbish.jobs.all()
|
||||
M.doPrompt(code, #jobs, time_elapsed)
|
||||
end
|
||||
|
||||
function M.doCommandPreExec(input)
|
||||
if input ~= nil then
|
||||
M.execTime[input] = os.time()
|
||||
end
|
||||
end
|
||||
|
||||
function M.setup()
|
||||
local cmd = "starship prompt --continuation"
|
||||
local res = io.popen(cmd)
|
||||
hilbish.multiprompt(res:read("*all"))
|
||||
|
||||
M.doPrompt(0, 0, 0)
|
||||
|
||||
bait.catch("command.preexec", function(input, _)
|
||||
M.doCommandPreExec(input)
|
||||
end)
|
||||
|
||||
bait.catch('command.exit', function(code, cmdStr)
|
||||
M.doCommandExit(code, cmdStr)
|
||||
end)
|
||||
end
|
||||
|
||||
return M
|
Loading…
Add table
Add a link
Reference in a new issue