widgets: codespace enrichment with colors in ^G
- Cache codespace repo and branch from gh cs list - Inline fallback fetch when cache is missing - Color codespace names in teal, branches in amber (non-default only) - SSH hosts in teal Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -83,9 +83,11 @@ _dots_load_keybindings() {
|
|||||||
local ssh_log="${XDG_DATA_HOME:-$HOME/.local/share}/ssh/log"
|
local ssh_log="${XDG_DATA_HOME:-$HOME/.local/share}/ssh/log"
|
||||||
local cs_cache="$_dots_cache_dir/codespaces"
|
local cs_cache="$_dots_cache_dir/codespaces"
|
||||||
|
|
||||||
# Refresh codespace cache in background if stale (>5 min)
|
# Background refresh if cache is stale (>5 min)
|
||||||
if [[ ! -f "$cs_cache" ]] || [[ -n "$(find "$cs_cache" -mmin +5 2>/dev/null)" ]]; then
|
if [[ -f "$cs_cache" ]] && [[ -n "$(find "$cs_cache" -mmin +5 2>/dev/null)" ]]; then
|
||||||
{ gh cs list --json name -q '.[].name' 2>/dev/null | sed 's/^/cs:/' > "$cs_cache.tmp" && mv "$cs_cache.tmp" "$cs_cache"; } &!
|
{ gh cs list --json name,repository,gitStatus \
|
||||||
|
-q '.[] | "cs:\(.name)\t\(.repository)\t\(.gitStatus.ref // "")"' \
|
||||||
|
2>/dev/null > "$cs_cache.tmp" && mv "$cs_cache.tmp" "$cs_cache"; } &!
|
||||||
fi
|
fi
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -94,12 +96,46 @@ _dots_load_keybindings() {
|
|||||||
fi
|
fi
|
||||||
awk '/^Host / && !/\*/ {print $2}' ~/.ssh/config ~/.ssh/config.d/* 2>/dev/null
|
awk '/^Host / && !/\*/ {print $2}' ~/.ssh/config ~/.ssh/config.d/* 2>/dev/null
|
||||||
awk '{print $1}' ~/.ssh/known_hosts 2>/dev/null | tr ',' '\n' | sed 's/\[//;s/\]:.*//'
|
awk '{print $1}' ~/.ssh/known_hosts 2>/dev/null | tr ',' '\n' | sed 's/\[//;s/\]:.*//'
|
||||||
[[ -f "$cs_cache" ]] && cat "$cs_cache"
|
if [[ -f "$cs_cache" ]]; then
|
||||||
} | awk '!seen[$0]++'
|
cat "$cs_cache"
|
||||||
|
else
|
||||||
|
gh cs list --json name,repository,gitStatus \
|
||||||
|
-q '.[] | "cs:\(.name)\t\(.repository)\t\(.gitStatus.ref // "")"' \
|
||||||
|
2>/dev/null | tee "$cs_cache"
|
||||||
|
fi
|
||||||
|
} | awk -F'\t' '
|
||||||
|
BEGIN {
|
||||||
|
teal = "\033[38;2;44;180;148m"
|
||||||
|
white = "\033[97m"
|
||||||
|
amber = "\033[38;2;248;140;20m"
|
||||||
|
rst = "\033[0m"
|
||||||
|
}
|
||||||
|
{
|
||||||
|
if ($1 ~ /^cs:/ && NF > 1) { repo[$1] = $2; br[$1] = $3 }
|
||||||
|
if (!seen[$1]++) { order[++n] = $1 }
|
||||||
|
}
|
||||||
|
END {
|
||||||
|
for (i = 1; i <= n; i++) {
|
||||||
|
k = order[i]
|
||||||
|
if (k ~ /^cs:/) {
|
||||||
|
name = substr(k, 4)
|
||||||
|
r = repo[k]; b = br[k]
|
||||||
|
printf "%scs:%s%s%s%s", white, rst, teal, name, rst
|
||||||
|
if (r != "") printf " %s", r
|
||||||
|
if (b != "" && b != "main" && b != "master")
|
||||||
|
printf " %s%s%s", amber, b, rst
|
||||||
|
printf "\n"
|
||||||
|
} else {
|
||||||
|
printf "%s%s%s\n", teal, k, rst
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'
|
||||||
}
|
}
|
||||||
_dots_ssh_widget() {
|
_dots_ssh_widget() {
|
||||||
local target
|
local target
|
||||||
target="$(_dots_ssh_hosts | fzf)" || { zle reset-prompt; return; }
|
target="$(_dots_ssh_hosts | fzf --ansi --no-preview)" || { zle reset-prompt; return; }
|
||||||
|
target="$(printf '%s' "$target" | sed $'s/\033\\[[0-9;]*m//g' | awk '{print $1}')"
|
||||||
if [[ "$target" == cs:* ]]; then
|
if [[ "$target" == cs:* ]]; then
|
||||||
BUFFER="cs ${target#cs:}"
|
BUFFER="cs ${target#cs:}"
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user