From b84abe4590bfdc002f131cc183caec0316861942 Mon Sep 17 00:00:00 2001 From: Armaan Bhojwani <3fb650a9-b47e-4604-a282-1dd91953b2ee@anonaddy.me> Date: Sun, 29 Nov 2020 17:52:45 -0500 Subject: [PATCH] add transient prompt, update license format * Add a transient prompt feature, as inspired by romkatv and powerlevel10k * Rename all variables to begin with ADMONE_ * Formatting/README updates * Add email to license information * Changed divider style in file * Added romkatv comment to README --- LICENSE | 2 +- README.md | 8 ++-- admone.zsh | 109 ++++++++++++++++++++++++++++++++--------------------- 3 files changed, 71 insertions(+), 48 deletions(-) diff --git a/LICENSE b/LICENSE index 68ab45b..511ed4e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ Admone - a tolerable Zsh prompt -Copyright © 2020 Armaan Bhojwani +Copyright © 2020 Armaan Bhojwani Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/README.md b/README.md index 0931a26..860acd9 100644 --- a/README.md +++ b/README.md @@ -13,10 +13,10 @@ Configuration is done by modifying the variables set at the start of the script. - No dependency on OhMyZSH - Quick to load - 2 lines - - Git intergration + - Git integration - Easily extensible - Bracketed sections - - Vi-mode intergration + - Vi-mode integration ## Name ``` @@ -26,6 +26,6 @@ admonish, remind, prompt; suggest, advise, raise; persuade, urge; warn, caution ``` ## License -Admone is MIT licensed by Armaan Bhojwani +Admone is MIT licensed by [Armaan Bhojwani](https://armaanb.net), [email](mailto:code@armaanb.net) -Code is heavily inspired by [Pierre-Albéric TROUPLIN's prompt](https://github.com/palb91/dotfiles/blob/master/zsh/conf.d/00_prompt.zsh) and [this gist by romkatv](https://gist.github.com/romkatv/2a107ef9314f0d5f76563725b42f7cab) +Code is heavily inspired by [Pierre-Albéric TROUPLIN's prompt](https://github.com/palb91/dotfiles/blob/master/zsh/conf.d/00_prompt.zsh), [this gist by romkatv](https://gist.github.com/romkatv/2a107ef9314f0d5f76563725b42f7cab), and [this comment by romkatv](https://github.com/romkatv/powerlevel10k/issues/888#issuecomment-657969840) diff --git a/admone.zsh b/admone.zsh index a9f0781..700bfa2 100644 --- a/admone.zsh +++ b/admone.zsh @@ -1,47 +1,55 @@ +# Admone Zsh prompt +# Copyright Armaan Bhojwani 2020 +# MIT licensed, see the LICENSE file for more information. +# Git repo at + ####################################################################### -# Admone Zsh prompt. Copyright Armaan Bhojwani. MIT licensed, see the # -# LICENSE file or https://www.opensource.org/licenses/MIT for more # -# information. Git repo at https://codeberg.org/armaan/admone # +# USER CONFIGURATIONS ####################################################################### -# -# USER CONFIGURATIONS -# - -ADMONE_PROMPT_CHAR="➤" - # ADMONE_PROMPT_CHAR="❯❯❯" - # ADMONE_PROMPT_CHAR="$" - # ADMONE_PROMPT_CHAR="%" - # ADMONE_PROMPT_CHAR=">" - # ADMONE_PROMPT_CHAR="➢" - # ADMONE_PROMPT_CHAR="➪" -ADMONE_PRE_UPPER="╭" -ADMONE_PRE_LOWER="╰" - # ADMONE_PRE_UPPER="┌" - # ADMONE_PRE_LOWER="└" -ADMONE_BLOCK_SEPARATOR="─" - # ADMONE_BLOCK_SEPARATOR="∙" -ADMONE_BLOCK_LEFT="[" -ADMONE_BLOCK_RIGHT="]" - # ADMONE_BLOCK_LEFT="(" - # ADMONE_BLOCK_RIGHT=")" -ADMONE_SHOW_0_EXIT_CODE="0" -ADMONE_INCLUDE="admone-pwd;admone-vcs;admone-exit-code" -ADMONE_FORMAT_LOWER="%B%F{%(?.cyan.red)}" +PROMPT_CHAR="➤" + # PROMPT_CHAR="❯❯❯" + # PROMPT_CHAR="$" + # PROMPT_CHAR="%" + # PROMPT_CHAR=">" + # PROMPT_CHAR="➢" + # PROMPT_CHAR="➪" +PRE_UPPER="╭" +PRE_LOWER="╰" + # PRE_UPPER="┌" + # PRE_LOWER="└" +BLOCK_SEPARATOR="─" + # BLOCK_SEPARATOR="∙" +BLOCK_LEFT="[" +BLOCK_RIGHT="]" + # BLOCK_LEFT="(" + # BLOCK_RIGHT=")" +SHOW_0_EXIT_CODE="0" +INCLUDE="admone-pwd;admone-vcs;admone-exit-code" +FORMAT_LOWER="%B%F{%(?.cyan.red)}" + +TRANSIENT_PROMPT="1" # This is buggy +SHORT_PROMPT="➤" +FORMAT_SHORT="%B%F{%(?.cyan.red)}" zstyle ':vcs_info:git:*' formats '%b%u%c' zstyle ':vcs_info:git:*' actionformats '%b|%a%u%c' zstyle ':vcs_info:*' unstagedstr ' *' zstyle ':vcs_info:*' stagedstr ' +' +####################################################################### +# Functions +####################################################################### + admone-pwd() { echo "%F{blue}%~%f" } admone-vcs() { echo "%F{green}${vcs_info_msg_0_}%f" + VCS="1" } admone-exit-code() { - ([[ $ADMONE_SHOW_0_EXIT_CODE == "1" ]] && echo "%(?,%F{cyan}%?%f,%F{red}%?%f)") || + ([[ $SHOW_0_EXIT_CODE == "1" ]] && echo "%(?,%F{cyan}%?%f,%F{red}%?%f)") || echo "%(?,,%F{red}%?%f)" } admone-date() { @@ -59,10 +67,8 @@ admone-time() { } ####################################################################### - -# # BACKEND -# +####################################################################### # Cursor shape depends on vi mode function zle-keymap-select zle-line-init zle-line-finish { @@ -82,18 +88,18 @@ function zle-keymap-select zle-line-init zle-line-finish { set-prompt() { # Reset prompts - upper="${ADMONE_PRE_UPPER}" - lower="${ADMONE_PRE_LOWER}${ADMONE_FORMAT_LOWER}${ADMONE_PROMPT_CHAR}%f%b " + upper="${PRE_UPPER}" + lower="${PRE_LOWER}${FORMAT_LOWER}${PROMPT_CHAR}%f%b " # Add in functions as defined above - NUM_FUNCS="$(echo $ADMONE_INCLUDE | grep -o ';' | wc -l)" + NUM_FUNCS="$(echo $INCLUDE | grep -o ';' | wc -l)" - THE_COMMAND="$(echo $ADMONE_INCLUDE | cut -d ';' -f 1)" - upper+="$ADMONE_BLOCK_LEFT$($THE_COMMAND)$ADMONE_BLOCK_RIGHT" + THE_COMMAND="$(echo $INCLUDE | cut -d ';' -f 1)" + upper+="$BLOCK_LEFT$($THE_COMMAND)$BLOCK_RIGHT" for (( i = 0; i < $NUM_FUNCS; i++ )); do - THE_COMMAND="$(echo $ADMONE_INCLUDE | cut -d ';' -f $(($i + 2)))" - upper+="$ADMONE_BLOCK_SEPARATOR$ADMONE_BLOCK_LEFT$($THE_COMMAND)$ADMONE_BLOCK_RIGHT" + THE_COMMAND="$(echo $INCLUDE | cut -d ';' -f $(($i + 2)))" + upper+="$BLOCK_SEPARATOR$BLOCK_LEFT$($THE_COMMAND)$BLOCK_RIGHT" done # Add line above @@ -102,17 +108,34 @@ set-prompt() { PROMPT=$upper$'\n'$lower } + # Set everything! -if [[ ! $(echo $ADMONE_INCLUDE | grep -q "vcs") ]]; then +if [[ $TRANSIENT_PROMPT == "1" ]]; then + SHORT_PROMPT=$FORMAT_SHORT$SHORT_PROMPT%f' ' + + set-transient-prompt() { + if [[ $PROMPT != $SHORT_PROMPT ]]; then + PROMPT=$SHORT_PROMPT + zle .reset-prompt + fi + } + + zle-line-finish() { + set-transient-prompt + } + + trap 'set-transient-prompt; return 130' INT +fi + +if [[ $VCS = "1" ]]; then zstyle ':vcs_info:*' check-for-changes true autoload -Uz add-zsh-hook vcs-info add-zsh-hook precmd vcs_info - add-zsh-hook precmd set-prompt -else - autoload -Uz add-zsh-hook - add-zsh-hook precmd set-prompt fi +autoload -Uz add-zsh-hook +add-zsh-hook precmd set-prompt + zle -N zle-line-init zle -N zle-line-finish zle -N zle-keymap-select -- 2.39.2