Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm
Precedence: bulk
X-No-Archive: yes
List-Id: Zsh Workers List <zsh-workers.zsh.org>
List-Post: <mailto:zsh-workers@zsh.org>
List-Help: <mailto:zsh-workers-help@zsh.org>
X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on f.primenet.com.au
X-Spam-Level: 
X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_DKIM_INVALID
	autolearn=ham autolearn_force=no version=3.4.0
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=brasslantern-com.20150623.gappssmtp.com; s=20150623;
        h=from:message-id:date:in-reply-to:comments:references:to:subject
         :mime-version:content-type;
        bh=X4+zMgNkQv52v9VNwNKbGBOETE7pYuK8bUOF+jS04bk=;
        b=0Ypee1c5ocrE9Mni5TkN/fKZFX0U0cmSUeJYRvZvMbFZWYgCC2FpitvYl6Gpp5Dn1D
         mpmfjSKidtLE5Kuk/Swj8lnHiKOMmWWncJsZTCUEZcHP6iFoACAew3S3oNdy9e4nUEPw
         wK1uN7f+9ytiNl0+zxOL+/giodWL+bf/cAvNC3jL+B3zJDRq+V4CUrJ9lxjXAMw4ovhv
         Yrs2FHcA4DAeloVh2AgiKNoerN3M38mRsBLYtTIxxJ7nD4AIXTCqbErjQaDNRIvwTipN
         qccDx4rX49V3pXNLGA8pvDlt2xYQu2IRGI/DB2m5sX8FMCZzFE1nm6PbFgi0LVPFwDMk
         +qjA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20130820;
        h=x-gm-message-state:from:message-id:date:in-reply-to:comments
         :references:to:subject:mime-version:content-type;
        bh=X4+zMgNkQv52v9VNwNKbGBOETE7pYuK8bUOF+jS04bk=;
        b=lJtrCxYzhkTRa2ms57iq8qoS4/hFGq3xMcfVSSzM0GuvVGTZqaP6NWncGheCvc7Shr
         K+ODMF3EFrxqfJtioe0dA6j05DoU5f6EQU3Km9Q+f4qANG8lOZ5qpfuX8vKbYKilT5HH
         tB4tvpR46s8h7vecpviisPSmibcan+w6XbDOCCR+AlTCbWveeui3clQw4vb/OPXu26YY
         ZOFkg7LoffhN92bLKYkvl1UgsBVFwwlHQkUtZKS0odXsXQiOt8EXr2kS3dn2bR0piZJp
         872eC542OYZuqVC2rYI4vk9xl1sYGUNTIR6F6swIT1p5DFZWoZmd/Szk+PNbtPnw5mYl
         d5uA==
X-Gm-Message-State: AG10YOQnV9SIkKNwIYYZ5shm35gWKUUBFwRQkLsj0BcygRZqJB398ZVZFBub6D3v+BcZ2w==
X-Received: by 10.98.72.72 with SMTP id v69mr14198599pfa.100.1453579218875;
        Sat, 23 Jan 2016 12:00:18 -0800 (PST)
From: Bart Schaefer <schaefer@brasslantern.com>
Message-Id: <160123120055.ZM14828@torch.brasslantern.com>
Date: Sat, 23 Jan 2016 12:00:55 -0800
In-Reply-To: <160123112004.ZM14739@torch.brasslantern.com>
Comments: In reply to Bart Schaefer <schaefer@brasslantern.com>
        "Re: Proof of concept mainstream plugin manager" (Jan 23, 11:20am)
References: <CAKc7PVByfo51GcVkb_kYgO2D3cWYrcq-p4v8gmyfsaeWU=2new@mail.gmail.com> 
	<160122173705.ZM11491@torch.brasslantern.com> 
	<CAKc7PVCywh3fVsvFOUP3Bi27-8o1w30_E73rs8c+Zd4sOqtT8w@mail.gmail.com> 
	<CAKc7PVChdTs4WzKf+amXJ9Y7zOpQVSEsVm6pmHK3FcCQy5k-Xw@mail.gmail.com> 
	<CAKc7PVD-AAQ2TDQ_V06Sh15xT9=n5u+cU1WXRAk4kGAi16DqPA@mail.gmail.com> 
	<CAKc7PVCXvW0PCV_pREMBqvWvVL02qFmnvc+PMcdDArrCuDMjpg@mail.gmail.com> 
	<160123093602.ZM14454@torch.brasslantern.com> 
	<160123112004.ZM14739@torch.brasslantern.com>
X-Mailer: OpenZMail Classic (0.9.2 24April2005)
To: Zsh hackers list <zsh-workers@zsh.org>
Subject: Re: Proof of concept mainstream plugin manager
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
X-Seq: zsh-workers 37747

On Jan 23, 11:20am, I wrote:
}
}      eval "function $func {
}        unfunction $func
}        local FPATH=${(q)PLUGIN_DIR}"'":${FPATH}"'"
}        autoload $opts $func
}        $func
}      }"

The last line of course needs to be 

    $func "$@"

If that's the approach, it might be useful to do something like this:

    _reload_and_run () {
      local fpath_prefix="$1" autoload_opts="$2" func="$3"
      shift 3
      unfunction "$func"
      local FPATH="$fpath_prefix":"${FPATH}"
      builtin autoload $=autoload_opts "$func"
      "$func" "$@"
    }

    shadow-autoload () {
      local -a opts
      local func
      zparseopts -a opts -D ${(s::):-TUXkmtzw}
      if (( $opts[(I)(-|+)X] ))
      then
        print -u2 "builtin autoload required for $opts"
        return 1
      fi
      if (( $opts[(I)-w] ))
      then
        builtin autoload $opts "$@"
        return
      fi
      for func
      do
        eval "function $func { 
          _reload_and_run ${(q)PLUGIN_DIR} ${(qq)opts} $func "'"$@"
        }'
      done
    }

