diff options
Diffstat (limited to 'scripts/deploy/legacy_zsh_support')
| -rw-r--r-- | scripts/deploy/legacy_zsh_support/how_to_install.md | 61 | ||||
| -rwxr-xr-x | scripts/deploy/legacy_zsh_support/install.sh | 3 | ||||
| -rw-r--r-- | scripts/deploy/legacy_zsh_support/jvcs.plugin.zsh | 156 |
3 files changed, 220 insertions, 0 deletions
diff --git a/scripts/deploy/legacy_zsh_support/how_to_install.md b/scripts/deploy/legacy_zsh_support/how_to_install.md new file mode 100644 index 0000000..343ea7b --- /dev/null +++ b/scripts/deploy/legacy_zsh_support/how_to_install.md @@ -0,0 +1,61 @@ +# How to Install + +Before installing, please ensure: + +* [Oh My Zsh](https://ohmyz.sh/) is installed. +* Your current shell is **Zsh**. + +--- + +## Install the Zsh Plugin + +In your terminal, run: + +```bash +./install.sh +``` + +This script will install JVCS's Zsh support files locally and prepare the prompt segment definitions for use by your theme. + +--- + +## Configure Your Zsh Theme + +Open your current Zsh theme file (e.g., `~/.oh-my-zsh/themes/xxx.zsh-theme`) and paste the following content in an appropriate location: + +```bash +# ----------------------------------------------------- # +# DISPLAY_LEVEL +# FULL = 127.0.0.1:25331/account/sheet +# NORMAL = account/sheet +# SHORT = sheet +JVCS_VIEW='NORMAL' + +# Customizable prompt segment elements +JVCS_PREFIX='[' +JVCS_SPLIT='/' +JVCS_SUFFIX=']' + +# JVCS_PROMPT_SEGMENT default style: +# [your_account/your_sheet] + +# Append JVCS prompt segment +PROMPT+='${JVCS_PROMPT_SEGMENT}' +# ----------------------------------------------------- # +``` + +After saving, reload your terminal, or run: + +```bash +source ~/.zshrc +``` + +--- + +## Notes + +* `JVCS_VIEW` controls the view level displayed in the prompt. +* `JVCS_PREFIX / SPLIT / SUFFIX` are used to customize the appearance. +* `JVCS_PROMPT_SEGMENT` is only responsible for displaying the status and does not execute any logic. + +No further configuration is required. diff --git a/scripts/deploy/legacy_zsh_support/install.sh b/scripts/deploy/legacy_zsh_support/install.sh new file mode 100755 index 0000000..aa92952 --- /dev/null +++ b/scripts/deploy/legacy_zsh_support/install.sh @@ -0,0 +1,3 @@ +#!/bin/zsh +cd "$(dirname "$0")" +cp jvcs.plugin.zsh ~/.oh-my-zsh/custom/plugins/jvcs/jvcs.plugin.zsh 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 |
