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

Re: autoload

On 09/17/2015 10:52 PM, Bart Schaefer wrote:
It's not a mystery.  Try this:

     zsh -nf /usr/share/zsh/functions/Completion/Base.zwc
Ah, so the error is really from some other file. I assumed it was some sort of
second parsing or something.  Nice if the called file was identified tho.
Anyway at least that's clear.

If we now throw zcompile into the mix, the -z / -k options to autoload
are ignored in favor of the -z / -k options to zcompile.  However, the
rule about the file name having to be the same as the function name
doesn't change.  Further "autoload -w" still doesn't define anything;
it just uses the index table in the zcompiled file to grab the list
of names to mark for later processing.
This could be made clearer in the docs.
} Strangely there seems to be no trouble with multiple functions in one
} file except in the case of 'miscfunctions' so I have to source it
} separately. (The other multiple functions are all help functions only
} called by the main function in each file. I don't know why that makes
} a difference, but it does.)

Does what I just wrote, above, help?  In the "miscfunctions" case, the
name of the file matches NONE of the names of the functions inside it;
they can't be autoloaded.  The name of the file has to match the name
of AT LEAST ONE function inside the file, *OR* the entire file has to
be that single function (as if it were a script).
I see.  Nuts, there's nothing about that in the docs is there?

...  The contents of fpath at the
instant of execution ALWAYS takes precedence; there is no "never get
this function from anywhere except [here]" in the autoload scheme.

As always Bart you make things as clear as they can be, but it sure is obtuse. I long for:

    $ autoload --just_DO_IT  Source.zwc

... that is functionally identical to:

    $ for aa in /aWorking/Zsh/Source/*; do source $aa; done

( Of course that's after having done:)

     $ zcompile --just_DO_IT  Source.zwc  /aWorking/Zsh/Source/*

... but much faster--all functions are pre-digested to word code and ready for action, only not loaded into memory until/unless actually called. 'zcompile --just_DO_IT' is smart enough to create function names after filenames in the case of scripts, and of course named functions are named functions. No need for wandering around in $fpath, the names of all the functions found in '.../Source' (regardless of the name of any file except in the case of scripts) and their definition .zwc are tabled for instant access so the user can consider them as having been sourced already, it's just much faster and trimmer. (Speed is the point of all this, right?) "zcompile -t --just_DO_IT Source.zwc" returns the list of all *functions* found or created (from scripts) in 'Source.zwc'.

Never mind, like completion, this is not for mortals to dabble in. My 'for' loop does it all in one line and there's no gotchas. Transparency is not a zsh virtue.

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