Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Re-loading files loaded via "autoload"

On 8/11/21, Zach Riggle <zachriggle@xxxxxxxxx> wrote:
> Hello all!
> Thanks in advance for my spam.  I recently spent some time spelunking
> in the Zsh docs for how to get an "autoload"ed module (sorry if the
> terminology is incorrect) to be re-loaded.
> It appears this is possible, but not well documented.
> Specifically, "unfunction" or "unset -f" work to permit the "autoload
> foo" to run again, and re-define the various functions declared in the
> module.
> What's the appropriate venue to ask for documentation updates, since
> this should likely be in the documentation for [1].
> # Homework
> I looked at the documentation page for autoloading functions [1] as
> well as the page for the autoload builtin itself [2].
> As always, SEARCHING the man page / info page / HTML pages are
> difficult, because it's not possible to scope the search results to
> "just this section here" so searching for "remove" or "reload" shows
> lots of unrelated hits.
> Because "autoload" has its own page, the behavior of unfunction /
> unset -f should probably be documented there.
> [1]: https://zsh.sourceforge.io/Doc/Release/Functions.html#Functions
> [2]: https://zsh.sourceforge.io/Doc/Release/Shell-Builtin-Commands.html
> Zach Riggle

It is implied in some places that you can do this, but perhaps it is
worth mentioning explicitly somewhere?

eg, we have this, which mentions it in a comment of the example code:
       It is also possible to create a function that is not  marked
as  autoloaded,
       but which loads its own definition by searching fpath, by using
`autoload -X'
       within a shell function.  For example, the following are equivalent:

              myfunc() {
                autoload -X
              myfunc args...


              unfunction myfunc   # if myfunc was defined
              autoload myfunc
              myfunc args...

But then this introductory paragraph for the autoload builtin:
              If name consists of an absolute path, the function is
defined to  load
              from  the  file  given (searching as usual for dump
files in the given
              location).  The name of the function is  the  basename

makes no mention of the fact that this is not true if 'name' is
already a defined function, and it also doesn't seem to mention it in
any of the subsequent paragraphs.

Mikael Magnusson

Messages sorted by: Reverse Date, Date, Thread, Author