diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-03-14 22:12:30 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-03-14 22:40:12 +0800 |
| commit | 72f80ea51f25256d0c463c2f3dc3d8670cfc4634 (patch) | |
| tree | b200a3ab1a4c718034458863570a064b52bafdcd /scripts/deploy/legacy_zsh_support/jvcs.plugin.zsh | |
| parent | 54b5567d6f1b1adaa6ada6a26faba0c5c492b7f3 (diff) | |
Add shell completions for new jvn CLI
Diffstat (limited to 'scripts/deploy/legacy_zsh_support/jvcs.plugin.zsh')
| -rw-r--r-- | scripts/deploy/legacy_zsh_support/jvcs.plugin.zsh | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/scripts/deploy/legacy_zsh_support/jvcs.plugin.zsh b/scripts/deploy/legacy_zsh_support/jvcs.plugin.zsh new file mode 100644 index 0000000..ff3f213 --- /dev/null +++ b/scripts/deploy/legacy_zsh_support/jvcs.plugin.zsh @@ -0,0 +1,156 @@ +# ████████ ████████ +# ██▒▒▒▒▒▒▒▒██ ██▒▒▒▒▒▒▒▒██ +# ██ ▒▒██ ██▒▒ ██ █████ ██ ██ ██████ █████ +# ██ ▒▒████████▒▒ ██ ▒▒▒██ ██ ██ ██████ ██████ +# ██ ▒▒▒▒▒▒▒▒ ██ ██ ██ ██ ███▒▒▒█ █▒▒▒▒█ +# ██ ██ ██ ██ ██ ███ ▒ ████ ▒ +# ██ ██ ██ ██ ██ ███ ▒████ +# ██ ████ ████ ██ ██ ▒██ ██▒ ███ ▒▒▒██ +# ██ ████ ████ ██ █ ██ ██ ██ ███ █ ██ ██ +# ██ ████ ████ ██ █ ██ ▒████▒ ▒██████ ██████ +# ██ ▒▒▒▒ ▒▒▒▒ █ ██ ▒████ ▒██▒ ██████ ▒████▒ +# ██ ██ ██ ▒▒▒▒ ▒▒ ▒▒▒▒▒▒ ▒▒▒▒ +# ██ ██████████ ██ +# ██ ██ JustEnoughVCS CommandLine +# ████████████████████████████████ Zsh Plugin +# ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ + +autoload -Uz add-zsh-hook + +################## +### APPEARANCE ### +################## + +JVCS_VIEW='NORMAL' +JVCS_PREFIX='[' +JVCS_SPLIT='/' +JVCS_SUFFIX=']' + +################### +### THEME READS ### +################### + +JVCS_PROMPT_SEGMENT='' + +###################### +### INTERNAL STATE ### +###################### + +JVCS_DISPLAY='' +JVCS_WS='' +JVCS_ACCOUNT='' +JVCS_SHEET='' +JVCS_UPSTREAM='' + +################### +### STATE LAYER ### +################### + +jvcs_read_state() { + if command -v jv &>/dev/null; then + JVCS_WS="$(jv _workspace_dir 2>/dev/null)" + JVCS_ACCOUNT="$(jv _account 2>/dev/null)" + JVCS_SHEET="$(jv _sheet 2>/dev/null)" + JVCS_UPSTREAM="$(jv _upstream 2>/dev/null)" + else + JVCS_WS='' + JVCS_ACCOUNT='' + JVCS_SHEET='' + JVCS_UPSTREAM='' + fi +} + +################## +### VIEW LAYER ### +################## + +jvcs_compute_view() { + # Must be in a Workspace, otherwise do not display + if [[ -z "$JVCS_WS" ]]; then + JVCS_DISPLAY='' + return + fi + JVCS_DISPLAY='1' +} + +#################### +### RENDER LAYER ### +#################### + +jvcs_render_prompt() { + # Only set prompt segment if display is enabled + if [[ -n "$JVCS_DISPLAY" ]]; then + case "$JVCS_VIEW" in + FULL) + JVCS_PROMPT_SEGMENT="%{$fg[white]%}${JVCS_PREFIX}${JVCS_UPSTREAM}${JVCS_SPLIT}${JVCS_ACCOUNT}${JVCS_SPLIT}${JVCS_SHEET}${JVCS_SUFFIX} %{$reset_color%}" + ;; + NORMAL) + JVCS_PROMPT_SEGMENT="%{$fg[white]%}${JVCS_PREFIX}${JVCS_ACCOUNT}${JVCS_SPLIT}${JVCS_SHEET}${JVCS_SUFFIX} %{$reset_color%}" + ;; + SHORT) + JVCS_PROMPT_SEGMENT="%{$fg[white]%}${JVCS_PREFIX}${JVCS_SHEET}${JVCS_SUFFIX} %{$reset_color%}" + ;; + *) + JVCS_PROMPT_SEGMENT='' + ;; + esac + else + JVCS_PROMPT_SEGMENT='' + fi +} + +#################### +### ORCHESTRATOR ### +#################### + +jvcs_update() { + jvcs_read_state + jvcs_compute_view + jvcs_render_prompt +} + +############# +### HOOKS ### +############# + +JVCS_NEED_REFRESH=0 + +jvcs_preexec() { + case "$1" in + jv\ status | \ + jv\ use* | \ + jv\ as* | \ + jv\ exit | \ + jv\ sheet\ use* | \ + jv\ sheet\ sheet\ exit | \ + jv\ account\ as*) + JVCS_NEED_REFRESH=1 + ;; + esac +} + +jvcs_precmd() { + [[ "$JVCS_NEED_REFRESH" -eq 1 ]] || return + JVCS_NEED_REFRESH=0 + jvcs_update +} + +jvcs_chpwd() { + jvcs_update +} + +add-zsh-hook preexec jvcs_preexec +add-zsh-hook precmd jvcs_precmd +add-zsh-hook chpwd jvcs_chpwd + +############################### +### FALLBACK INITIALIZATION ### +############################### + +jvcs_precmd_init() { + [[ -n "${JVCS_INITIALIZED:-}" ]] && return + JVCS_INITIALIZED=1 + jvcs_update +} + +add-zsh-hook precmd jvcs_precmd_init |
