90 lines
2.5 KiB
Lua
90 lines
2.5 KiB
Lua
|
local wezterm = require("wezterm")
|
||
|
|
||
|
wezterm.on("update-right-status", function(window, pane)
|
||
|
-- Each element holds the text for a cell in a "powerline" style << fade
|
||
|
local cells = {}
|
||
|
|
||
|
-- Figure out the cwd and host of the current pane.
|
||
|
-- This will pick up the hostname for the remote host if your
|
||
|
-- shell is using OSC 7 on the remote host.
|
||
|
local cwd_uri = pane:get_current_working_dir()
|
||
|
if cwd_uri then
|
||
|
cwd_uri = cwd_uri:sub(8)
|
||
|
local slash = cwd_uri:find("/")
|
||
|
local cwd = ""
|
||
|
local hostname = ""
|
||
|
if slash then
|
||
|
hostname = cwd_uri:sub(1, slash - 1)
|
||
|
-- Remove the domain name portion of the hostname
|
||
|
local dot = hostname:find("[.]")
|
||
|
if dot then
|
||
|
hostname = hostname:sub(1, dot - 1)
|
||
|
end
|
||
|
-- and extract the cwd from the uri
|
||
|
cwd = cwd_uri:sub(slash)
|
||
|
|
||
|
table.insert(cells, cwd)
|
||
|
table.insert(cells, hostname)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
-- I like my date/time in this style: "Wed Mar 3 08:14"
|
||
|
local date = wezterm.strftime("%a %b %-d %H:%M")
|
||
|
table.insert(cells, date)
|
||
|
|
||
|
-- An entry for each battery (typically 0 or 1 battery)
|
||
|
for _, b in ipairs(wezterm.battery_info()) do
|
||
|
table.insert(cells, string.format("%.0f%%", b.state_of_charge * 100))
|
||
|
end
|
||
|
|
||
|
-- WIP key table code - not yet used
|
||
|
local name = window:active_key_table()
|
||
|
if name then
|
||
|
name = "TABLE: " .. name
|
||
|
end
|
||
|
|
||
|
-- The powerline < symbol
|
||
|
local LEFT_ARROW = utf8.char(0xe0b3)
|
||
|
-- The filled in variant of the < symbol
|
||
|
local SOLID_LEFT_ARROW = utf8.char(0xe0b2)
|
||
|
|
||
|
-- Color palette for the backgrounds of each cell
|
||
|
local colors = {
|
||
|
"#3c1361",
|
||
|
"#52307c",
|
||
|
"#663a82",
|
||
|
"#7c5295",
|
||
|
"#b491c8",
|
||
|
}
|
||
|
|
||
|
-- Foreground color for the text across the fade
|
||
|
local text_fg = "#c0c0c0"
|
||
|
|
||
|
-- The elements to be formatted
|
||
|
local elements = {}
|
||
|
-- How many cells have been formatted
|
||
|
local num_cells = 0
|
||
|
|
||
|
-- Translate a cell into elements
|
||
|
function push(text, is_last)
|
||
|
local cell_no = num_cells + 1
|
||
|
table.insert(elements, { Foreground = { Color = text_fg } })
|
||
|
table.insert(elements, { Background = { Color = colors[cell_no] } })
|
||
|
table.insert(elements, { Text = " " .. text .. " " })
|
||
|
if not is_last then
|
||
|
table.insert(elements, { Foreground = { Color = colors[cell_no + 1] } })
|
||
|
table.insert(elements, { Text = SOLID_LEFT_ARROW })
|
||
|
end
|
||
|
num_cells = num_cells + 1
|
||
|
end
|
||
|
|
||
|
table.insert(elements, { Foreground = { Color = colors[num_cells + 1] } })
|
||
|
table.insert(elements, { Text = SOLID_LEFT_ARROW })
|
||
|
while #cells > 0 do
|
||
|
local cell = table.remove(cells, 1)
|
||
|
push(cell, #cells == 0)
|
||
|
end
|
||
|
|
||
|
window:set_right_status(wezterm.format(elements))
|
||
|
end)
|