From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 9851 invoked from network); 13 Apr 2021 19:41:45 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 13 Apr 2021 19:41:45 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20200801; t=1618342905; b=tGxZd5gudlsidrmW9yjnTMSoU8VYs+xgtMo88h+jy+MbF/mS3otHTXnNyLI+P6Uf3TXsy/Rp6V +lWlOSHJzdoQzGLud7aoD/nw56YAMPs38Tgty9vZoPvKqEOeBKjcd8FooSlPsUaZn4pKKy7JEu MsGRU+0b9+u92qg0Vi5p05RgJeCxaQvVL7ieQGxBQFwNp4aOXP70auIucSbPzMU1xHpvEVyNMX TSU6MOSZroB0tBrE7x+8ENnIpa07DHZTyzH62nDj0oInbuuOamN8YltPWnwbFz7SXNtxnKLEfJ CW3oruqjyWcbJyR72AZuVyEDvBfXUuBCycvgiN/LG0L2mQ==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-lf1-f43.google.com) smtp.remote-ip=209.85.167.43; dkim=pass header.d=gmail.com header.s=20161025 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20200801; t=1618342905; bh=vKH27rQOgS5ksVLEZFdPZE9RMt8wwg/P6ONHVwNLzaA=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:To:Date:Message-ID:Subject:MIME-Version:Content-Type:From: DKIM-Signature:DKIM-Signature; b=aHF5E4tGAIjqF/EM03+hNcsTXXHF8zOJFWrqbiI3AV0J/N2IckDzf79c0IaePZrLgpvMVuIvgk rc9zv1x+5KBfRVHAHf4F34e7SqH86+JK2ff+XxxDv8LvEUcu5jzq/p1m2Tp8fCxehlTK5eZga1 lnrewR+v5x23+8JJB5FmZig2H1XwyxwFOBBmqmWAnVQ8Dje9i2kldfdROouIPvKrgJkFlcoNUs tpWcu+EDZ32R+RAljlb8guCQzaCi4nOGiTzzxDRcm0aw9sYq4Cc7ASWE3mMridl8BDocYzPoGq MDt2fxQP8h3FCHwEc5TB9UwzDbgrDplvs6y6KoGxIFSSlA==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20200801; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:To:Date:Message-Id:Subject: Mime-Version:Content-Type:From:Reply-To:Cc:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References; bh=BE9jeZEgPrnOs13cmN3RPEcTLjUpAOJSVx3GjdT39is=; b=sywwFSCf1H/eLItyZYDzJoVrl5 jSKTE8TiI8/3wYHbFyv3Qjtmojyxc7Olzm1nUz9heIMOI0IcMtXWFLp32XVx90cKZM97QknSUQVDD 6g2IYGfGFI9vHjvpXgalAqNv48k4UIUH07eCN4xErg+Qj4qCvLW45sL2nI2fUzbvgy6JLsGmL3JKa 7kO7jQVtrVilM5VUP0Z3OICptjVwkCTVQ2Bjb8dzw1rr+uPgXZZVQlK/fDmyB5qNv92remd+bpiS5 8ISeXi0xPB9Lzb2MlC++AetboCzpXSmzlaUPfHNV/Jy+QHdtfpAI3+8vmqocGzWe31/T+md4VNw7x KZgWHjlQ==; Received: from authenticated user by zero.zsh.org with local id 1lWOur-000FTG-KS; Tue, 13 Apr 2021 19:41:41 +0000 Authentication-Results: zsh.org; iprev=pass (mail-lf1-f43.google.com) smtp.remote-ip=209.85.167.43; dkim=pass header.d=gmail.com header.s=20161025 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none Received: from mail-lf1-f43.google.com ([209.85.167.43]:43747) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1lWOuJ-000FEY-S7; Tue, 13 Apr 2021 19:41:08 +0000 Received: by mail-lf1-f43.google.com with SMTP id r8so29076058lfp.10 for ; Tue, 13 Apr 2021 12:41:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:mime-version:subject:message-id:date:to; bh=BE9jeZEgPrnOs13cmN3RPEcTLjUpAOJSVx3GjdT39is=; b=HzyTKShJb7Q8G7oRfXwyFhTJFRbWT7cARWCrRy4+8rhByYjjoSL9V84MAPqCR/mp/w 6VHIJdcN0JEqTYxh0diL97kOOkzi9YMDNcZIb8KEtVeG/nNwOxh/IQbwLYXSjQ8U1J68 OkxSohEiJPz9lGMBJPD1C9qPnfkX6CRLauaPPRaaoD7WksXxYsLCnXHuUocfmbg6aVgs 7ibNydrQDvmdhSy1kelPF9gYq57u39XnD4uPNfF/QoN5GxepndxPLOgRjsICXW3YT2+A c3AE9AVMQaPdYXsOD/r0JjrllRSj6oi5kwHXVQDHxYEJmQ3P4f3ZI32KyxwAMRxDn3yb 6bdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:mime-version:subject:message-id:date:to; bh=BE9jeZEgPrnOs13cmN3RPEcTLjUpAOJSVx3GjdT39is=; b=bikIvi4zKVernZu+Jo5fH2ZUpRzlRWL4dcLc2DjXYddxlwgySMJhswTqi9LCug7qoP ZrF5tOoiVCvD6t6fr7hP9LWL3mVxJcKMjOpRNz/G4XRDoUa835EnH6eXNAn7/QUEMtW2 vNlIAHwucT4Jt+yBJiRkAiTQKI461+8ajzAT0/h/zwAtSDHyoGa2cxZYsQOAOBT3l4Xj GGruhoKM9wA2mcez7vufs0oj7NxhSn/ERsRtMlQzvskpbKwmNVRkEULhRtXwcFDeD7ti +EQnyd7RkzWppUjputVYCsLFmyXEqcefqkpAPzvoyGEZv9pdP5hdWqr1iV2KbfXud6Dt Ga2w== X-Gm-Message-State: AOAM533ELbki8GDy4nFDqt22gxbdXNOS8ghodIVgHuj/yiehFC4WkgJu OLhBHMHbiCTwOdwWoGtC3Pw8EXUsBUZZjA== X-Google-Smtp-Source: ABdhPJwPzFynJ8f2/HDOM35bp92sqHgsf905+mPPCrSNbprhvg0LIeagdKOS9zXw1OqCevBH/sWibA== X-Received: by 2002:a05:6512:32a4:: with SMTP id q4mr23311077lfe.32.1618342866795; Tue, 13 Apr 2021 12:41:06 -0700 (PDT) Received: from [192.168.1.15] (hag-tkubng22-50df3e-132.dhcp.inet.fi. [80.223.62.132]) by smtp.gmail.com with ESMTPSA id a30sm734307lfi.235.2021.04.13.12.41.05 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 13 Apr 2021 12:41:06 -0700 (PDT) From: Marlon Content-Type: multipart/mixed; boundary="Apple-Mail=_D0DCFA62-3D1E-42C8-80C3-F379297F0545" Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.60.0.2.21\)) Subject: [RFC][PATCH] `newuser` prompt theme Message-Id: Date: Tue, 13 Apr 2021 22:41:03 +0300 To: Zsh hackers list X-Mailer: Apple Mail (2.3654.60.0.2.21) X-Seq: 48542 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: --Apple-Mail=_D0DCFA62-3D1E-42C8-80C3-F379297F0545 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii This is a new prompt theme that is intended to be used in a rewrite of = `zsh-newuser-install` (see 47955 and descendants), but it should work = well as a standalone theme, too. It includes an update to `promptinit` = to handle ZLE hooks. --Apple-Mail=_D0DCFA62-3D1E-42C8-80C3-F379297F0545 Content-Disposition: attachment; filename=0001-Add-newuser-prompt-theme.txt Content-Type: text/plain; x-unix-mode=0644; name="0001-Add-newuser-prompt-theme.txt" Content-Transfer-Encoding: quoted-printable =46rom eaa9bebe782489434ecb1d2841da4ee6cb03dcd3 Mon Sep 17 00:00:00 2001 From: Marlon Richert Date: Tue, 13 Apr 2021 20:46:20 +0300 Subject: [PATCH] Add `newuser` prompt theme --- Functions/Prompts/prompt_newuser_setup | 197 +++++++++++++++++++++++++ Functions/Prompts/promptinit | 164 ++++++++++---------- 2 files changed, 284 insertions(+), 77 deletions(-) create mode 100644 Functions/Prompts/prompt_newuser_setup diff --git a/Functions/Prompts/prompt_newuser_setup = b/Functions/Prompts/prompt_newuser_setup new file mode 100644 index 000000000..a4167a8c8 --- /dev/null +++ b/Functions/Prompts/prompt_newuser_setup @@ -0,0 +1,197 @@ +autoload -Uz add-zle-hook-widget add-zsh-hook vcs_info +readonly -gHA _prompt_newuser_formats=3D( + start:chpwd $'\n%B%F{blue}%~%b%f/\n' + start:left $'%(?,%F{green},%F{red}%v%k\n%B%S)%#%b%f%s ' + start:right '%B%F{blue}%n%b%f%k@%F{magenta}%m%f' + start:staged '%B%F{green}+%b%f' + start:unstaged '%B%F{red}*%b%f' + start:action '%B%F{red}%a%%b%f' + start:branch '%B%F{cyan}%b%%b%f' + start:repo '|%B%F{blue}%r%%b%f' + cont:indent ' ' + cont:left '' + cont:right '%F{red}%^%f' +) +readonly -ga sysexits=3D( + USAGE + DATAERR + NOINPUT + NOUSER + NOHOST + UNAVAILABLE + SOFTWARE + OSERR + OSFILE + CANTCREAT + IOERR + TEMPFAIL + PROTOCOL + NOPERM + CONFIG +) + +prompt_newuser_help() { + print -r -- \ +"To customize your prompt, copy-paste any of the following to your = .zshrc file +and edit it in there: + + # Start prompt: + zstyle ':prompt:*:start' left = ${(q+)_prompt_newuser_formats[start:left]} + zstyle ':prompt:*:start' right = ${(q+)_prompt_newuser_formats[start:right]} + + # Prepended to left side of start prompt if we changed dirs: + zstyle ':prompt:*:start' chpwd = ${(q+)_prompt_newuser_formats[start:chpwd]} + + # Replaces right side of start prompt when in a repo: + zstyle ':prompt:*:start' unstaged = ${(q+)_prompt_newuser_formats[start:unstaged]} + zstyle ':prompt:*:start' staged = ${(q+)_prompt_newuser_formats[start:staged]} + zstyle ':prompt:*:start' branch = ${(q+)_prompt_newuser_formats[start:branch]} + zstyle ':prompt:*:start' action = ${(q+)_prompt_newuser_formats[start:action]} + zstyle ':prompt:*:start' repo = ${(q+)_prompt_newuser_formats[start:repo]} + + # Continuation prompt: + zstyle ':prompt:*:cont' left = ${(q+)_prompt_newuser_formats[cont:left]} + zstyle ':prompt:*:cont' right = ${(q+)_prompt_newuser_formats[cont:right]} + + # Used to indent left side of continuation prompt: + zstyle ':prompt:*:cont' indent = ${(q+)_prompt_newuser_formats[cont:indent]} + +For an explanation of the % codes, see +http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html and the = end of = +http://zsh.sourceforge.net/Doc/Release/User-Contributions.html#vcs_005fin= fo-Configuration" +} + +prompt_newuser_format() { + local ctx=3D$1 arg fmt out + shift + for arg; do + zstyle -s :prompt:newuser:$ctx $arg fmt || + fmt=3D"$_prompt_newuser_formats[${ctx}:$arg]" + out+=3D"$fmt" + done + print -r -- "$out" +} + +prompt_newuser_chpwd() { + emulate -L zsh + unset vcs_info_msg_0_ + PS1=3D"$( prompt_newuser_format start chpwd left )" +} + +prompt_newuser_precmd() { + local exitstatus=3D$? + emulate -L zsh + + psvar[1]=3D + case $exitstatus in + <128-> ) + psvar[1]=3D"SIG$signals[exitstatus-127] " + ;| + <64-78> ) + psvar[1]=3D"EX_$sysexits[exitstatus-63] " + ;| + <1-> ) + psvar[1]+=3D"($exitstatus)" + esac + + if ! [[ -v vcs_info_msg_0_ ]]; then + zstyle ':vcs_info:*' check-for-staged-changes yes + vcs_info + if [[ -n $vcs_info_msg_0_ ]]; then + RPS1=3D"$vcs_info_msg_0_" + else + RPS1=3D"$( prompt_newuser_format start right )" + fi + fi +} + +prompt_newuser_line-init() { + emulate -L zsh + + case $CONTEXT in + start ) + local -i fd=3D-1 + exec {fd}< <( + zstyle ':vcs_info:*' check-for-changes yes + vcs_info + print -rNC1 -- "$PWD" "${vcs_info_msg_0_}" + ) + zle -Fw "$fd" prompt_newuser_async + ;; + cont ) + local fmt=3D"$( prompt_newuser_format cont indent )" + local -a indent=3D( '%('{1..$(( COLUMNS / ${(m)#fmt} = ))}"_,$fmt,)" ) + PS2=3D"${(j::)indent}$( prompt_newuser_format cont left )" + RPS2=3D"$( prompt_newuser_format cont right )" + ;; + esac +} + +prompt_newuser_async() { + emulate -L zsh + { + zle -F "$1" + + [[ $2 !=3D (|hup) ]] && + return + + () { + local pwd null + IFS=3D$'\0' read -ru "$1" pwd vcs_info_msg_0_ null + + [[ $pwd =3D=3D $PWD ]] + } "$@" || return + + if [[ -n $vcs_info_msg_0_ ]]; then + RPS1=3D"$vcs_info_msg_0_" + else + RPS1=3D"$( prompt_newuser_format start right )" + fi + zle .reset-prompt + + } always { + exec {1}<&- + } +} + +prompt_newuser_line-finish() { + emulate -L zsh + PS1=3D"$( prompt_newuser_format start left )" +} + +prompt_newuser_setup() { + prompt_opts=3D( cr percent sp ) + + zstyle -e ':vcs_info:*' formats ' + reply=3D( "%u%c$( prompt_newuser_format start branch repo )" ) + ' + zstyle -e ':vcs_info:*' actionformats ' + reply=3D( "%u%c$( prompt_newuser_format start action repo )" ) + ' + zstyle -e ':vcs_info:*' stagedstr ' + reply=3D( "$( prompt_newuser_format start staged )" ) + ' + zstyle -e ':vcs_info:*' unstagedstr ' + reply=3D( "$( prompt_newuser_format start unstaged )" ) + ' + PS4=3D$'# ?=3D%(?,%F{green},%B%F{red}%S)%?%b%f%s e=3D%e = %F{green}%1N%f:%I %(1_,%F{yellow}%K{black}%_%f%k ,)' + SPROMPT=3D'Correct %B%F{red}%U%R%b%f%u to %B%F{green}%r%b%f? = [%Sy%ses|%Sn%so|%Se%sdit|%Sa%sbort] ' + PROMPT_EOL_MARK=3D'%S%F{cyan}%#%s%f' + zle_highlight=3D( + isearch:fg=3Dblack,bg=3Dyellow + special:fg=3Dcyan,bold + region:bg=3Dblue + suffix:bg=3Dblue + paste:none + ) + zle -N prompt_newuser_async + + add-zsh-hook chpwd prompt_newuser_chpwd + add-zsh-hook precmd prompt_newuser_precmd + add-zle-hook-widget line-init prompt_newuser_line-init + add-zle-hook-widget line-finish prompt_newuser_line-finish + + prompt_newuser_chpwd +} + +prompt_newuser_setup "$@" diff --git a/Functions/Prompts/promptinit b/Functions/Prompts/promptinit index 37d69f100..6d3c5272c 100644 --- a/Functions/Prompts/promptinit +++ b/Functions/Prompts/promptinit @@ -14,6 +14,8 @@ prompt_themes=3D() promptinit () { emulate -L zsh setopt extendedglob + autoload -Uz add-zsh-hook add-zle-hook-widget + local ppath=3D'' name theme local -a match mbegin mend =20 @@ -32,9 +34,6 @@ promptinit () { fi done =20 - # To manipulate precmd and preexec hooks... - autoload -Uz add-zsh-hook - # Variables common to all prompt styles prompt_newline=3D$'\n%{\r%}' } @@ -113,80 +112,91 @@ Use prompt -h for help on specific = themes.' ;; esac case "$opt" in - c) if [[ -n $prompt_theme ]]; then - print -n "Current prompt theme" - (( $#prompt_theme > 1 )) && print -n " with parameters" - print " is:\n $prompt_theme" - else - print "Current prompt is not a theme." - fi - return - ;; - h) if [[ -n "$2" && -n $prompt_themes[(r)$2] ]]; then - if functions prompt_$2_setup >/dev/null; then - zstyle -t :prompt-theme cleanup - # The next line is a bit ugly. It (perhaps unnecessarily) - # runs the prompt theme setup function to ensure that if - # the theme has a _help function that it's been autoloaded. - prompt_$2_setup - fi - if functions prompt_$2_help >/dev/null; then - print "Help for $2 theme:\n" - prompt_$2_help - else - print "No help available for $2 theme." - fi - print "\nType \`prompt -p $2' to preview the theme, \`prompt = $2'" - print "to try it out, and \`prompt -s $2' to use it in future = sessions." - else - print "$usage" - fi - ;; - l) print Currently available prompt themes: - print $prompt_themes - return - ;; - p) preview=3D( $prompt_themes ) - (( $#* > 1 )) && preview=3D( "$@[2,-1]" ) - for theme in $preview; do - [[ "$theme" =3D=3D "$prompt_theme[*]" ]] && continue - prompt_preview_safely "$=3Dtheme" - done - print -P "%b%f%k" - ;; - s) print "Set and save not yet implemented. Please ensure your = ~/.zshrc" - print "contains something similar to the following:\n" - print " autoload -Uz promptinit" - print " promptinit" - print " prompt $*[2,-1]" - shift - ;& - *) if [[ "$1" =3D=3D 'random' ]]; then - local random_themes - if (( $#* =3D=3D 1 )); then - random_themes=3D( $prompt_themes ) - else - random_themes=3D( "$@[2,-1]" ) - fi - local i=3D$(( ( $RANDOM % $#random_themes ) + 1 )) - argv=3D( "${=3Drandom_themes[$i]}" ) - fi - if [[ -z "$1" || -z $prompt_themes[(r)$1] ]]; then - print "$usage" - return - fi + c ) + if [[ -n $prompt_theme ]]; then + print -n "Current prompt theme" + (( $#prompt_theme > 1 )) && print -n " with parameters" + print " is:\n $prompt_theme" + else + print "Current prompt is not a theme." + fi + return + ;; + h ) + if [[ -n "$2" && -n $prompt_themes[(r)$2] ]]; then + if functions prompt_$2_setup >/dev/null; then + zstyle -t :prompt-theme cleanup + # The next line is a bit ugly. It (perhaps unnecessarily) + # runs the prompt theme setup function to ensure that if + # the theme has a _help function that it's been autoloaded. + prompt_$2_setup + fi + if functions prompt_$2_help >/dev/null; then + print "Help for $2 theme:\n" + prompt_$2_help + else + print "No help available for $2 theme." + fi + print "\nType \`prompt -p $2' to preview the theme, \`prompt = $2'" + print "to try it out, and \`prompt -s $2' to use it in future = sessions." + else + print "$usage" + fi + ;; + l ) + print Currently available prompt themes: + print $prompt_themes + return + ;; + p ) + preview=3D( $prompt_themes ) + (( $#* > 1 )) && preview=3D( "$@[2,-1]" ) + for theme in $preview; do + [[ "$theme" =3D=3D "$prompt_theme[*]" ]] && continue + prompt_preview_safely "$=3Dtheme" + done + print -P "%b%f%k" + ;; + s ) + print "Set and save not yet implemented. Please ensure your = ~/.zshrc" + print "contains something similar to the following:\n" + print " autoload -Uz promptinit" + print " promptinit" + print " prompt $*[2,-1]" + shift + ;& + * ) + if [[ "$1" =3D=3D 'random' ]]; then + local random_themes + if (( $#* =3D=3D 1 )); then + random_themes=3D( $prompt_themes ) + else + random_themes=3D( "$@[2,-1]" ) + fi + local i=3D$(( ( $RANDOM % $#random_themes ) + 1 )) + argv=3D( "${=3Drandom_themes[$i]}" ) + fi + if [[ -z "$1" || -z $prompt_themes[(r)$1] ]]; then + print "$usage" + return + fi =20 - # Reset some commonly altered bits to the default - local hook - for hook in chpwd precmd preexec periodic zshaddhistory zshexit; = do - add-zsh-hook -D "${hook}" "prompt_*_${hook}" - done - typeset -ga zle_highlight=3D( ${zle_highlight:#default:*} ) - (( ${#zle_highlight} )) || unset zle_highlight + # Reset some commonly altered bits to the default + local hook + for hook in chpwd precmd preexec periodic zshaddhistory zshexit \ + zsh_directory_name; do + add-zsh-hook -D "$hook" "prompt_*_$hook" + done + for hook in isearch-exit isearch-update line-pre-redraw line-init = \ + line-finish history-line-set keymap-select; do + add-zle-hook-widget -D "$hook" "prompt_*_$hook" + done + typeset -ga zle_highlight=3D( ${zle_highlight:#default:*} ) + (( ${#zle_highlight} )) || unset zle_highlight =20 - zstyle -t :prompt-theme cleanup - prompt_$1_setup "$@[2,-1]" && prompt_theme=3D( "$@" ) - ;; + zstyle -t :prompt-theme cleanup + prompt_$1_setup "$@[2,-1]" && prompt_theme=3D( "$@" ) + ;; esac } =20 @@ -269,11 +279,11 @@ prompt_preview_theme () { (( ${#prompt_opts} )) && setopt noprompt{bang,cr,percent,sp,subst} = "prompt${^prompt_opts[@]}" [[ -n ${precmd_functions[(r)prompt_${1}_precmd]} ]] && - prompt_${1}_precmd + prompt_${1}_precmd [[ -o promptcr ]] && print -n $'\r'; : print -P "${PS1}command arg1 arg2 ... argn" [[ -n ${preexec_functions[(r)prompt_${1}_preexec]} ]] && - prompt_${1}_preexec + prompt_${1}_preexec } =20 [[ -o kshautoload ]] || promptinit "$@" --=20 2.31.0 --Apple-Mail=_D0DCFA62-3D1E-42C8-80C3-F379297F0545--