From b0d7b4d3bf42de3e7bd4def2d40047c7cd236c18 Mon Sep 17 00:00:00 2001 From: javalsai Date: Tue, 2 Jun 2026 10:18:59 +0200 Subject: [PATCH] fixes(0.1.1) - 0-indexing in zsh (see std::sensible) - hope declare -g doesnt propagate to env, same scope as functions - fix fallback interpreter exit behavior --- src/lib.sh | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/src/lib.sh b/src/lib.sh index eb33026..e32fcef 100644 --- a/src/lib.sh +++ b/src/lib.sh @@ -2,9 +2,9 @@ std::bootstrap() { [ -n "${STD_VERSION:-}" ] && std::panic "\`std\` ($STD_VERSION) already loaded, can\'t load version $1" - export STD_VERSION=$1 + declare -g STD_VERSION=$1 } -std::bootstrap 0.1.0 +std::bootstrap 0.1.1 INTERPRETER=$(ps -p $$ | awk '$1 != "PID" {print $(NF)}') : "${INTERPRETER:=bash}" @@ -24,6 +24,34 @@ std::interpreter::is-ksh() { [[ "$(std::interpreter::name)" == ksh ]] } +## +# Adds sensible behavior for some stuff, not called by default because it messes with terms. +# +# Consider enabling it locally with `eval "$(std::sensible)"` +# +# You can pass `global` as the first argument to set settings globally. +## +std::sensible() { + local interpreter + interpreter=$(std::interpreter::name) + case $interpreter in + bash) + ;; + zsh) + # stuff like 0-indexing + if [[ "${1:-}" == "global" ]]; then + echo emulate sh + else + echo emulate -L sh + fi + ;; + *) + echo "Not sure how to get sourced path for $interpreter" >&2 + exit 1 + ;; + esac +} + std::mod::get-self-path() { local interpreter interpreter=$(std::interpreter::name) @@ -39,7 +67,8 @@ std::mod::get-self-path() { eval 'realpath -e "$(dirname "${.sh.file}")"' ;; *) - echo "Not sure how to get sourced path for $interpreter" + echo "Not sure how to get sourced path for $interpreter" >&2 + exit 1 ;; esac }