zsh-workers
 help / color / mirror / code / Atom feed
From: "Bart Schaefer" <schaefer@candle.brasslantern.com>
To: Anthony Heading <aheading@jpmorgan.com>
Cc: zsh-workers@math.gatech.edu
Subject: Re: Tag functions with shell options?
Date: Tue, 2 Jul 1996 14:31:10 -0700	[thread overview]
Message-ID: <960702143114.ZM5210@candle.brasslantern.com> (raw)
In-Reply-To: Anthony Heading <aheading@jpmorgan.com> "Re: Tag functions with shell options?" (Jul  2,  8:53pm)

On Jul 2,  8:53pm, Anthony Heading wrote:
} Subject: Re: Tag functions with shell options?
}
} The lack of context was sort-of deliberate, since I
} suspected any interest would be in the wider picture, rather than my
} particular petty problems.  It seemed simply an example of something
} it would be nice to support elegantly.

This introduces a whole class of problems, which is most obvious in the
case when you *do not* know the names of the functions that should have
their local options (or whatever) changed.  In that case you almost end
up needing something like Perl's "package", so that you can do e.g.:

    package admin
    . /etc/profile
    for f in $(whence -FP admin)
    do
	typeset -fo ${f}=(shwordsplit globassign bsdecho nobgnice);;
    done

Where I'm assuming a slew of new features:
1.  `package foo' groups all functions, aliases, etc. in the package
    named `foo' until the next `package' is executed
2.  `whence -F' lists the names (but NOT definitions) of functions
    [Aside:  Why doesn't `typeset +f' do that already?]
3.  `whence -P foo' lists from the package `foo'
4.  `typeset -o' is equivalent to `setopt' (and `+o' to `unsetopt')
5.  `typeset -fo foo=(options...)' sets local options for `foo', as
    if `foo' began with `setopt localoptions options...'
6.  Zoltan's (or was it Zefram's?) change to make `setopt nofoo' be
    equivalent to `unsetopt foo'

} > it seems to me that a much simpler implementation of sws_fn is:
} [wrapping the function, and then aliasing the wrapper to the original]
} 
} > The only drawback to this is that other functions that may already have
} > been defined won't see the alias -- but presumably those functions will
} > themselves be given the sws_fn treatment, so it's moot.
} 
} Hmm. Don't understand the first point, but I'll experiment.

Example:

    yfn () {
	echo Y
    }
    zfn () {
	echo Z
    }

    xfn1 () {
	yfn
    }

    alias yfn=zfn

    xfn2 () {
	yfn
    }

Now:

    zsh% xfn1
    Y
    zsh% xfn2
    Z

Because the alias for yfn was introduced *after* xfn1 was defined, xfn1
still references the "real" yfn, rather than the alias.  The presumption
is that if you're going to use

    sws_fn yfn

Then you are also going to use

    sws_fn xfn1
    sws_fn xfn2

So that it doesn't matter what "yfn" means inside of xfn*.

-- 
Bart Schaefer                             Brass Lantern Enterprises
http://www.well.com/user/barts            http://www.nbn.com/people/lantern

New male in /home/schaefer:
>N  2 Justin William Schaefer  Sat May 11 03:43  53/4040  "Happy Birthday"



  reply	other threads:[~1996-07-02 21:36 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1996-07-02 12:05 Anthony Heading
1996-07-02 13:36 ` Zefram
1996-07-02 14:12   ` Anthony Heading
1996-07-02 15:17     ` Zefram
1996-07-02 15:37 ` Peter Stephenson
1996-07-02 16:57   ` Anthony Heading
1996-07-02 19:07     ` Bart Schaefer
1996-07-02 19:53       ` Anthony Heading
1996-07-02 21:31         ` Bart Schaefer [this message]
1996-07-02 22:27           ` Anthony Heading

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=960702143114.ZM5210@candle.brasslantern.com \
    --to=schaefer@candle.brasslantern.com \
    --cc=aheading@jpmorgan.com \
    --cc=schaefer@nbn.com \
    --cc=zsh-workers@math.gatech.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).