From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19732 invoked from network); 10 Apr 2000 03:49:06 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 10 Apr 2000 03:49:06 -0000 Received: (qmail 17793 invoked by alias); 10 Apr 2000 03:48:58 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 10601 Received: (qmail 17765 invoked from network); 10 Apr 2000 03:48:56 -0000 From: "Bart Schaefer" Message-Id: <1000410034852.ZM5603@candle.brasslantern.com> Date: Mon, 10 Apr 2000 03:48:51 +0000 X-Mailer: Z-Mail (5.0.0 30July97) To: zsh-workers@sunsite.auc.dk Subject: Compinstall, zcompile, and my .zshrc MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I've presently got my .zshrc chopped up into about a dozen smaller files all of which are read in turn from the "real" .zshrc via the `.' builtin. Partly this is to have localized files for setting cdpath and the like in different places where I use zsh (work, home, sourceforge (though I have yet to actually copy it there), etc.); partly its to organize all the cruft that's been creeping into my .zshrc in random places over the last ten years and leave out the stuff I don't need anymore. Those dozen files are all in ~/.zsh/. Now, as I sit here contemplating putting all this back together, two things come to mind: First, I'd like to run compinstall, but I'd like to have it put its output somewhere other than .zshrc or .compinstall. For that matter, I'd like to tell it to get its *input* from somewhere other than .zshrc. And shouldn't it read an existing .compinstall file if there is one, either in preference to or as well as .zshrc? Second, it'd be nice if I could do something like zcompile .zshrc.zwc .zshrc .zsh/* but I'm 100% certain that's not going to produce the result I want. For one thing, `. .zsh/foo' executed from the code in .zshrc.zwc is going to look for .zsh/foo{,.zwc}, not discover that .zsh/foo is already compiled into the current file. For another, I don't know how the `.' command decides that xxx.zwc is the compiled form of xxx, but I wouldn't expect it to use a multi-file archive that way. (Hmm, trying it, though, seems to show that it *will* use a multi-file archive, but that only works for the very first file in such an archive.) I could almost make this work by putting .zshrc.zwc in $fpath and making all the other files be autoloaded functions, but function semantics are not quite the same as `.' -- for example, I can't use `typeset -g' if I want any of these files to be usable by older versions of zsh, but -g is necessary to set parameters (e.g. `typeset -U cdpath') within a function. There's one other thing I've just started worrying about with zcompile. Normally in my .zshrc I could do something like this: [[ $ZSH_VERSION > 3.1.6 ]] && alias typeset='typeset -g' and now all later uses of typeset would get the -g option, because the code for .zshrc is actually executing as it's read. But if I zcompile my .zshrc, the wordcode for the rest of the file beyond that point does NOT have that alias expanded. That's a serious drawback for compilation of scripts, and particularly of .z* init files; it should probably be called out explicitly in the docs. -- Bart Schaefer Brass Lantern Enterprises http://www.well.com/user/barts http://www.brasslantern.com