zsh-users
 help / color / mirror / code / Atom feed
From: Bart Schaefer <schaefer@brasslantern.com>
To: Zsh Users <zsh-users@zsh.org>
Subject: Re: 'whence' question
Date: Wed, 05 Nov 2014 20:43:30 -0800	[thread overview]
Message-ID: <141105204330.ZM2973@torch.brasslantern.com> (raw)
In-Reply-To: <20141105180035.22f6e9b1@pwslap01u.europe.root.pri>

On Nov 5,  6:00pm, Peter Stephenson wrote:
} Subject: Re: 'whence' question
}
} On Wed, 05 Nov 2014 18:49:23 +0100
} Oliver Kiddle <okiddle@yahoo.co.uk> wrote:
} > Looking at the source, it seems that whence doesn't support both -a and
} > -m together though it doesn't produce an error.
} 
} You're right: I think *that's* a bug.

Hmm.  This is more complicated than it at first appears.

The -a option is O(n*c) where n is $#path and c is $#argv, because it
merely has to glue the two arrays together and test whether each of
the resulting strings is an executable file path.  (I discount the
cost of one hash lookup for each hash table.)

The -m option currently is O(h*c) where h is the size of all the hash
tables, plus (one time only) the cost of filling the command table if
it hasn't already been.

To do "whence -am" the "right way" would also be approximately O(h*c)
because we have to compare every file in every directory in $path to
the list of patterns (and h is a fair estimate of that number of
files).  However, I'm not sure what the "right way" *is*, because:

The pattern accepted by the -m option is not a glob, it's a pattern of
the string-matching variety.  If we were to simply glue each of the
arguments onto the end of each $path directory and glob the resulting
cross-product, the wrong results could be returned.  Furthermore, for
e.g. cygwin, the filled hash table has dealt with mapping "foo.exe"
onto "foo" with the suffix case-insensitive, so even a string match
against the file names across $path could be wrong.

Having just written that, it occurs to me that perhaps the "right way"
is the equivalent of this? --

	whence -a ${(k)commands[(I)pattern]}


  reply	other threads:[~2014-11-06  4:43 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-05 18:33 Ray Andrews
2014-11-05 17:49 ` Oliver Kiddle
2014-11-05 18:00   ` Peter Stephenson
2014-11-06  4:43     ` Bart Schaefer [this message]
2014-11-06 21:45       ` Ray Andrews
2014-11-06 21:53         ` Bart Schaefer
2014-11-06 23:15           ` Ray Andrews
2014-11-06 22:54             ` Bart Schaefer
2014-11-05 19:15   ` Ray Andrews
2014-11-05 17:50 ` Peter Stephenson

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=141105204330.ZM2973@torch.brasslantern.com \
    --to=schaefer@brasslantern.com \
    --cc=zsh-users@zsh.org \
    /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).