diff --git a/_zinit b/_zinit index 8a9a88f0..3dd876dc 100644 --- a/_zinit +++ b/_zinit @@ -57,6 +57,10 @@ __zinit_commands(){ 'update:Upgrade outdated plugins and snippets using the same options they were originally installed with' 'version:Print the version numbers of Zinit to standard output' 'zstatus:Overall Zinit status' + 'xhop:Deploy a code snippet that jumps back' + 'xclone:Git clone with animated progress bar' + 'xgh-clone:GitHub clone with fancy progress, only user/repo required' + 'xcon:A build console with support for opening files on errors' ) _describe -t commands 'zinit commands' commands } # ]]] diff --git "a/functions/z4\303\267def-action-func" "b/functions/z4\303\267def-action-func" new file mode 100644 index 00000000..31af75af --- /dev/null +++ "b/functions/z4\303\267def-action-func" @@ -0,0 +1,58 @@ +#!/usr/bin/env zsh +z4÷def-action-func(){ + builtin emulate -L zsh -o extendedglob \ + -o warncreateglobal -o typesetsilent \ + -o nopromptsubst + + local TMP_PATH + foreach TMP_PATH ($ZINIT[PLUGINS_DIR]/*[[:alnum:]](N.,/,@) + $ZINIT[SNIPPETS_DIR]/*[[:alnum:]_÷-]~*/(http(|s)|ftp(s|)|scp|file)--*(N.,/,@) + $ZINIT[SNIPPETS_DIR]/(http(|s)|ftp(|s)|scp|file)--*/*[[:alnum:]_÷-](N.,/,@)) + if [[ $TMP_PATH == $ZINIT[SNIPPETS_DIR](/*)# ]];then + local PID=${${TMP_PATH##$ZINIT[SNIPPETS_DIR]\/}//(#b)(http(s|)|ftp(|s)|file|scp)--/$match[1]://} + PID=${${PID//--//}:t} + else + local PID=${${TMP_PATH:t}//---//} + fi + local IDAS=${${TMP_PATH:t}//---//} + functions[@$PID]=" + local OP=\$1 pos=(\"\$@[2,-1]\") ICE ICEV icest=() + if [[ -f ${(qqq)TMP_PATH%/}/._zinit/id-as ]];then + local IDAS=\$(<${(qqq)TMP_PATH%/}/._zinit/id-as) + [[ -z \$IDAS || \$IDAS == auto ]]&&IDAS=$PID + else + local IDAS=${(qqq)IDAS} + fi + case \$OP in + (cd|) + \${OP:-cd} -- ${(qqq)TMP_PATH} + ;; + (load) + local -A ICE + .zinit-load-ices \$IDAS + foreach ICE ICEV (\"\${(@kv)ICE}\") + icest+=(\$ICE\$ICEV) + end + #print -- zinit \"\$icest[@]\" for @\$IDAS + zinit \"\$icest[@]\" for @\$IDAS + ;; + (unload) + zinit unload \$IDAS \"\$pos[@]\" + ;; + (update|status) + zinit \$OP \$IDAS \"\$pos[@]\" + ;; + (dispose) + zinit delete -y \$IDAS + ;; + (run|*) + [[ \$OP == run ]]&&OP= + ( + builtin cd -q -- ${(qqq)TMP_PATH} + builtin eval \$OP \"\$pos[@]\" + ) + ;; + esac + " + end +} \ No newline at end of file diff --git "a/functions/z4\303\267def-gl-alias" "b/functions/z4\303\267def-gl-alias" new file mode 100644 index 00000000..00d05651 --- /dev/null +++ "b/functions/z4\303\267def-gl-alias" @@ -0,0 +1,13 @@ +#!/usr/bin/env zsh +z4÷def-gl-alias(){ + +alias -g '[[:WRONGSTR:]]'='([[:cntrl:][:space:][:INCOMPLETE:][:INVALID:]]#|*[[:INCOMPLETE:][:INVALID:]]*|[[:cntrl:]]#|[^[:print:][:alnum:]]#)' + +alias -g '[[:iNVALIDST:]]'='*[[:INCOMPLETE:][:INVALID:]]*' +alias -g '[[:IDSTR:]]'='(<->|[A-Za-z_][A-Za-z_0-9]#)' +alias -g '[[:PRINTSTR:]]'='([[:print:][:alnum:]]#)' +alias -g '[[:EMPTYSTR:]]'="[[:space:][:INCOMPLETE:][:INVALID:]$'\e\1'-$'\036']#" +alias -g '[[:EMINVSTR:]]'="([[:space:][:INCOMPLETE:][:INVALID:]$'\e\1'-$'\036'-g:(<->|[A-Za-z_][A-Za-z_0-9]#)]#|*[[:INCOMPLETE:][:INVALID:]]*)" +alias -g '[[:FUNCSTR:]]'="[[:space:]]#(function[[:space:]]##|)(#b)((#B)*)(#B)[[:space:]]#\([[:space:]]#\)([[:space:]]#\{|)*" + +} \ No newline at end of file diff --git "a/functions/z4\303\267populate-dynamic-dir" "b/functions/z4\303\267populate-dynamic-dir" new file mode 100644 index 00000000..e9694f7e --- /dev/null +++ "b/functions/z4\303\267populate-dynamic-dir" @@ -0,0 +1,102 @@ +#!/usr/bin/env zsh +z4÷populate-dynamic-dir(){ + builtin emulate -L zsh -o extendedglob \ + -o warncreateglobal -o typesetsilent \ + -o nopromptsubst + + z4_zdn_widget(){z4_directory_name_generic "$@";} + add-zsh-hook -U zsh_directory_name z4_zdn_widget + z4_dir_suffix() { + [[ $1 = 1 ]] || return + + if [[ $LBUFFER[-1] != ']' ]]; then + if [[ $KEYS = [$'] \t\n/']## ]]; then + if [[ $LBUFFER[-1] == ':' ]];then + LBUFFER="$LBUFFER[1,-2]" + fi + LBUFFER+=${${${KEYS:#*\]*}:+\]}:-${kEYS//\]/}} + elif [[ $KEYS = (*[^[:print:]]*|[[:blank:]\;\&\|@]) ]]; then + LBUFFER="$LBUFFER[1,-2]"\] + fi + fi + } + + typeset -Ag z4_zdn_top=() z4_zdn_level1=() z4_gitdir_zdn_level1=() \ + z4_zdn_zplug_level1=(:default: z4_zdn_level1) \ + z4_zdn_zsnip_level1=(:default: z4_zdn_level1) + zstyle ":zdn:z4_zdn_widget:" mapping z4_zdn_top + z4_zdn_top+=( + # Zinit4's system diectories + z $ZINIT[BIN_DIR]/:z4_gitdir_zdn_level1 + z4 $ZINIT[BIN_DIR]/:z4_gitdir_zdn_level1 + zbin $ZINIT[BIN_DIR]/:z4_gitdir_zdn_level1 + z4bin $ZINIT[BIN_DIR]/:z4_gitdir_zdn_level1 + zcompl $ZINIT[COMPLETIONS_DIR] + z4compl $ZINIT[COMPLETIONS_DIR] + zsnip $ZINIT[SNIPPETS_DIR]/:z4_zdn_zsnip_level1 + z4snip $ZINIT[SNIPPETS_DIR]/:z4_zdn_zsnip_level1 + zplug $ZINIT[PLUGINS_DIR]/:z4_zdn_zplug_level1 + z4plug $ZINIT[PLUGINS_DIR]/:z4_zdn_zplug_level1 + ztheme $ZINIT[THEME_DIR] + z4theme $ZINIT[THEME_DIR] + zcache $ZSH_CACHE_DIR + z4cache $ZSH_CACHE_DIR + + bin $HOME/.local/bin + cfg ${XDG_CONFIG_HOME:-$HOME/.config} + cache ${XDG_CACHE_HOME:-$HOME/.cache} + data ${XDG_DATA_HOME:-$HOME/.local/share} + + # Z-Prefix's words + zp $ZPFX + ZP $ZPFX + zpfx $ZPFX + ZPFX $ZPFX + + # Default + #:default: /:z4_zdn_level1 + ) + + z4_zdn_top+=( + zfun /(usr|)${ZINIT[BINPATH]%%[^\/]#\/[^\/]#}share/zsh/$ZSH_VERSION/functions(NY1) + zlib /(usr|)${ZINIT[BINPATH]%%[^\/]#\/[^\/]#}lib(|64)/zsh/$ZSH_VERSION(NY1) + ) + + z4_zdn_top[zfun]+="/:zsh_dir_level" + + typeset -A -g zsh_dir_level1=( + cal Calendar ex Example ftpe MIME pro Prompts vcs VCS_Info + chpwd Chpwd exc Exceptions vari Misc zftp Zftp + cpctl Compctl math Math user Newuser tcp TCP zle Zle + ) + + local -a tmp + tmp=($ZINIT[SNIPPETS_DIR]/*[[:alnum:]_÷-]~*/(http(|s)|ftp(s|)|scp|file)--*(N.,/,@) $ZINIT[SNIPPETS_DIR]/(http(|s)|ftp(|s)|scp|file)--*/*[[:alnum:]_÷-](N.,/,@)) + : ${tmp[@]//(#b)(*)/${z4_zdn_top[${${${match[1]//(http(s|)|ftp(|s)|file|scp)--/proto://}//--//}:t}]::=$match[1]}} + : ${tmp[@]//(#b)(*)/${z4_zdn_zsnip_level1[${${${match[1]//(http(s|)|ftp(|s)|file|scp)--/proto://}//--//}:t}]::=$match[1]}} + + tmp=($ZINIT[PLUGINS_DIR]/*[[:alnum:]](N.,/,@)) + : ${tmp[@]//(#b)(*)/${z4_zdn_top[${${match[1]:t}//---//}]::=$match[1]}} + : ${tmp[@]//(#b)(*)/${z4_zdn_zplug_level1[${${match[1]:t}//---//}]::=${match[1]:t}}} + + z4_zdn_level1+=( + share share + lib lib + libexec libexec + bin bin + func functions + # scripts scripts + docs docs + src src + contrib contrib + ) + + z4_gitdir_zdn_level1+=( + share share + lib lib + libexec libexec + func functions + scripts scripts + doc doc + ) +} \ No newline at end of file diff --git a/libexec/fetch b/libexec/fetch deleted file mode 100644 index 3337f976..00000000 --- a/libexec/fetch +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env zsh -# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4;-*- -# Copyright (c) 2023 Sebastian Gniazdowski -# -libexec/fetch() { - 0=${${ZERO:-${(%):-%x}}:A} - source $0:h:h/share/preamble.inc.zsh - - local -a opts; local -A Opts - int/iq::parse-opts "C: -dir: p -progress q -quiet" Opts opts "$@"||\ - {iqerr incorrect options given to {cmd}fetch{%}; return 7} - set -- "$reply[@]" - int/iq::opt-cascade Opts -C --dir -p --progress -q --quiet - int/iq::reset - - int/iq::get-file "$opts[@]" -- "$@" - - return $? -} -# vim:ft=zsh:sw=4:sts=4:et diff --git a/zinit-install.zsh b/zinit-install.zsh index 2e262485..278e1485 100644 --- a/zinit-install.zsh +++ b/zinit-install.zsh @@ -2517,6 +2517,11 @@ for its found {file}meson.build{pre} input file}:-because {flag}m{pre} \ } } } # ]]] +# FUNCTION: ∞zinit-func-dyn-dir-hook [[[ +∞zinit-func-dyn-dir-hook() { + z4÷populate-dynamic-dir + z4÷def-action-func +} # ]]] # FUNCTION: ∞zinit-atpull-e-hook [[[ ∞zinit-atpull-e-hook() { (( ${+ICE[atpull]} )) || return 0 diff --git a/zinit.zsh b/zinit.zsh index 1aa3ad57..b086fd7d 100644 --- a/zinit.zsh +++ b/zinit.zsh @@ -136,7 +136,6 @@ zstatus|\ xhop|\ xclone|\ xgh-clone|\ -xfetch|\ x-tract|\ xcon" @@ -3312,176 +3311,18 @@ if [[ -e ${${ZINIT[BIN_DIR]}}/zmodules/Src/zdharma/zplugin.so ]] { @zinit-register-hook "make''" hook:\!atclone-post ∞zinit-make-hook # atclone-post. @zinit-register-hook "compile-plugin" hook:atclone-post ∞zinit-compile-plugin-hook +@zinit-register-hook "func-and-dyn-dir" hook:atclone-post ∞zinit-func-dyn-dir-hook # create so that for sure no warncreateglobal warning is issued typeset -g REPLY MATCH reply=() match=() mbegin=() mend=() typeset -gi MEND MBEGIN -(){ - emulate -L zsh -o extendedglob - foreach ZINIT_TMP ($ZINIT[PLUGINS_DIR]/*[[:alnum:]](N.,/,@) -$ZINIT[SNIPPETS_DIR]/*[[:alnum:]_÷-]~*/(http(|s)|ftp(s|)|scp|file)--*(N.,/,@) -$ZINIT[SNIPPETS_DIR]/(http(|s)|ftp(|s)|scp|file)--*/*[[:alnum:]_÷-](N.,/,@)) - if [[ $ZINIT_TMP == $ZINIT[SNIPPETS_DIR](/*)# ]];then - local PID=${${ZINIT_TMP##$ZINIT[SNIPPETS_DIR]\/}//(#b)(http(s|)|ftp(|s)|file|scp)--/$match[1]://} - PID=${${PID//--//}:t} - else - local PID=${${ZINIT_TMP:t}//---//} - fi - local IDAS=${${ZINIT_TMP:t}//---//} - functions[@$PID]=" - local OP=\$1 pos=(\"\$@[2,-1]\") ICE ICEV icest=() - if [[ -f ${(qqq)ZINIT_TMP%/}/._zinit/id-as ]];then - local IDAS=\$(<${(qqq)ZINIT_TMP%/}/._zinit/id-as) - [[ -z \$IDAS || \$IDAS == auto ]]&&IDAS=$PID - else - local IDAS=${(qqq)IDAS} - fi - case \$OP in - (cd|) - \${OP:-cd} -- ${(qqq)ZINIT_TMP} - ;; - (load) - local -A ICE - .zinit-load-ices \$IDAS - foreach ICE ICEV (\"\${(@kv)ICE}\") - icest+=(\$ICE\$ICEV) - end - #print -- zinit \"\$icest[@]\" for @\$IDAS - zinit \"\$icest[@]\" for @\$IDAS - ;; - (unload) - zinit unload \$IDAS \"\$pos[@]\" - ;; - (update|status) - zinit \$OP \$IDAS \"\$pos[@]\" - ;; - (dispose) - zinit delete -y \$IDAS - ;; - (run|*) - [[ \$OP == run ]]&&OP= - ( - builtin cd -q -- ${(qqq)ZINIT_TMP} - builtin eval \$OP \"\$pos[@]\" - ) - ;; - esac - " - end -} - - -alias -g '[[:WRONGSTR:]]'='([[:cntrl:][:space:][:INCOMPLETE:][:INVALID:]]#|*[[:INCOMPLETE:][:INVALID:]]*|[[:cntrl:]]#|[^[:print:][:alnum:]]#)' - -alias -g '[[:iNVALIDST:]]'='*[[:INCOMPLETE:][:INVALID:]]*' -alias -g '[[:IDSTR:]]'='(<->|[A-Za-z_][A-Za-z_0-9]#)' -alias -g '[[:PRINTSTR:]]'='([[:print:][:alnum:]]#)' -alias -g '[[:EMPTYSTR:]]'="[[:space:][:INCOMPLETE:][:INVALID:]$'\e\1'-$'\036']#" -alias -g '[[:EMINVSTR:]]'="([[:space:][:INCOMPLETE:][:INVALID:]$'\e\1'-$'\036'-g:(<->|[A-Za-z_][A-Za-z_0-9]#) -]#|*[[:INCOMPLETE:][:INVALID:]]*)" -alias -g '[[:FUNCSTR:]]'="[[:space:]]#(function[[:space:]]##|)(#b)((#B)*)(#B)[[:space:]]#\([[:space:]]#\)([[:space:]]#\{|)*" -zinit null light-mode autoload'z4_directory_name_generic' \ +zinit null light-mode autoload'z4_directory_name_generic;z4÷populate-dynamic-dir;z4÷def-action-func;z4÷def-gl-alias' \ for %$ZINIT[BIN_DIR] -z4_zdn_widget(){z4_directory_name_generic "$@";} -add-zsh-hook -U zsh_directory_name z4_zdn_widget -z4_dir_suffix() { - [[ $1 = 1 ]] || return - - if [[ $LBUFFER[-1] != ']' ]]; then - if [[ $KEYS = [$'] \t\n/']## ]]; then - if [[ $LBUFFER[-1] == ':' ]];then - LBUFFER="$LBUFFER[1,-2]" - fi - LBUFFER+=${${${KEYS:#*\]*}:+\]}:-${kEYS//\]/}} - elif [[ $KEYS = (*[^[:print:]]*|[[:blank:]\;\&\|@]) ]]; then - LBUFFER="$LBUFFER[1,-2]"\] - fi - fi -} -(){ - -setopt localoptions extendedglob -typeset -Ag z4_zdn_top z4_zdn_level1 z4_gitdir_zdn_level1 \ - z4_zdn_zplug_level1=(:default: z4_zdn_level1) \ - z4_zdn_zsnip_level1=(:default: z4_zdn_level1) -zstyle ":zdn:z4_zdn_widget:" mapping z4_zdn_top -z4_zdn_top+=( - # Zinit4's system diectories - z $ZINIT[BIN_DIR]/:z4_gitdir_zdn_level1 - z4 $ZINIT[BIN_DIR]/:z4_gitdir_zdn_level1 - zbin $ZINIT[BIN_DIR]/:z4_gitdir_zdn_level1 - z4bin $ZINIT[BIN_DIR]/:z4_gitdir_zdn_level1 - zcompl $ZINIT[COMPLETIONS_DIR] - z4compl $ZINIT[COMPLETIONS_DIR] - zsnip $ZINIT[SNIPPETS_DIR]/:z4_zdn_zsnip_level1 - z4snip $ZINIT[SNIPPETS_DIR]/:z4_zdn_zsnip_level1 - zplug $ZINIT[PLUGINS_DIR]/:z4_zdn_zplug_level1 - z4plug $ZINIT[PLUGINS_DIR]/:z4_zdn_zplug_level1 - ztheme $ZINIT[THEME_DIR] - z4theme $ZINIT[THEME_DIR] - zcache $ZSH_CACHE_DIR - z4cache $ZSH_CACHE_DIR - - bin $HOME/.local/bin - cfg ${XDG_CONFIG_HOME:-$HOME/.config} - cache ${XDG_CACHE_HOME:-$HOME/.cache} - data ${XDG_DATA_HOME:-$HOME/.local/share} - - # Z-Prefix's words - zp $ZPFX - ZP $ZPFX - zpfx $ZPFX - ZPFX $ZPFX - - # Default - #:default: /:z4_zdn_level1 -) - -z4_zdn_top+=( - zfun /(usr|)${ZINIT[BINPATH]%%[^\/]#\/[^\/]#}share/zsh/$ZSH_VERSION/functions(NY1) - zlib /(usr|)${ZINIT[BINPATH]%%[^\/]#\/[^\/]#}lib(|64)/zsh/$ZSH_VERSION(NY1) -) - -z4_zdn_top[zfun]+="/:zsh_dir_level" - -typeset -A -g zsh_dir_level1=( -cal Calendar ex Example ftpe MIME pro Prompts vcs VCS_Info -chpwd Chpwd exc Exceptions vari Misc zftp Zftp -cpctl Compctl math Math user Newuser tcp TCP zle Zle -) - -ZINIT_TMP=($ZINIT[SNIPPETS_DIR]/*[[:alnum:]_÷-]~*/(http(|s)|ftp(s|)|scp|file)--*(N.,/,@) $ZINIT[SNIPPETS_DIR]/(http(|s)|ftp(|s)|scp|file)--*/*[[:alnum:]_÷-](N.,/,@)) -: ${ZINIT_TMP[@]//(#b)(*)/${z4_zdn_top[${${${match[1]//(http(s|)|ftp(|s)|file|scp)--/proto://}//--//}:t}]::=$match[1]}} -: ${ZINIT_TMP[@]//(#b)(*)/${z4_zdn_zsnip_level1[${${${match[1]//(http(s|)|ftp(|s)|file|scp)--/proto://}//--//}:t}]::=$match[1]}} - -ZINIT_TMP=($ZINIT[PLUGINS_DIR]/*[[:alnum:]](N.,/,@)) -: ${ZINIT_TMP[@]//(#b)(*)/${z4_zdn_top[${${match[1]:t}//---//}]::=$match[1]}} -: ${ZINIT_TMP[@]//(#b)(*)/${z4_zdn_zplug_level1[${${match[1]:t}//---//}]::=${match[1]:t}}} - -z4_zdn_level1+=( - share share - lib lib - libexec libexec - bin bin - func functions -# scripts scripts - docs docs - src src - contrib contrib -) - -z4_gitdir_zdn_level1+=( - share share - lib lib - libexec libexec - func functions - scripts scripts - doc doc -) - -} +z4÷populate-dynamic-dir +z4÷def-action-func +z4÷def-gl-alias ZINIT_TMP=$0:h zinit null light-mode autoload"$(IFS=';';q=($ZINIT_TMP/libexec/*[a-zA-Z0-9_]);print -rl -- "${${q[@]:t2}[*]}"\;;q=($ZINIT_TMP/functions/*[a-zA-Z0-9_]);print -rl -- "${${q[@]:t}[*]}")" \