* Re: _man only uses $manpath
@ 1999-09-17 9:45 Sven Wischnowsky
1999-09-17 11:22 ` Adam Spiers
1999-09-17 12:54 ` Clint Adams
0 siblings, 2 replies; 7+ messages in thread
From: Sven Wischnowsky @ 1999-09-17 9:45 UTC (permalink / raw)
To: zsh-workers
Oliver Kiddle wrote:
> Sven Wischnowsky wrote:
> > Andrej Borsenkow wrote:
> > > On Thu, 16 Sep 1999, Adam Spiers wrote:
> > > > Sounds like we need some way of intelligently figuring out a solution
> > > > for both scenarios. Does `man -w' return an error of some sort on
> > > > your system which we could test for?
> > > Well, exit code != 0. I have no idea, how reliable it is (different
> > > versions etc)
> >
> > Same here for Digital Unix. Maybe we should test $OSTYPE?
>
> The only man I can find which does support -w or --path is the GNU one.
> The exit code of != 0 seems fine on the systems I've looked at provided
> stderr is redirected.
>
> What are you trying to achieve with man -w - find a default manpath to
> use if $manpath is unset? As far as I can tell man -w only gives you the
> location of a specific man page which isn't entirely useful for finding
> a default manpath as the default can (and often will) contain more than
> one directory. The only way I know of finding the default manpath is by
> running the man binary through strings. Maybe we could use a for loop to
> guess possible man directories and check them.
Yes, a la `_x_color'.
Bye
Sven
--
Sven Wischnowsky wischnow@informatik.hu-berlin.de
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: _man only uses $manpath 1999-09-17 9:45 _man only uses $manpath Sven Wischnowsky @ 1999-09-17 11:22 ` Adam Spiers 1999-09-17 12:43 ` Oliver Kiddle 1999-09-17 12:54 ` Clint Adams 1 sibling, 1 reply; 7+ messages in thread From: Adam Spiers @ 1999-09-17 11:22 UTC (permalink / raw) To: zsh-workers Sven Wischnowsky (wischnow@informatik.hu-berlin.de) wrote: > Oliver Kiddle wrote: > > What are you trying to achieve with man -w - find a default manpath to > > use if $manpath is unset? As far as I can tell man -w only gives you the > > location of a specific man page which isn't entirely useful for finding > > a default manpath as the default can (and often will) contain more than > > one directory. No, the GNU man displays all the man paths it will use if invoked as `man -w': -w or --path Don't actually display the man pages, but do print the location(s) of the files that would be format- ted or displayed. If no argument is given: display (on stdout) the list of directories that is searched by man for man pages. If manpath is a link to man, then "manpath" is equivalent to "man --path". -W Like -w, but print file names one per line, without additional information. This is useful in shell commands like man -aW man | xargs ls -l > > The only way I know of finding the default manpath is by > > running the man binary through strings. In the GNU case, you can just grep /etc/man.config for `^MANPATH '. > > Maybe we could use a for loop to > > guess possible man directories and check them. > > Yes, a la `_x_color'. I'd rather keep guessing as a last resort. Maybe try man -w and check the exit code, then if [[ -r /etc/man.config ]]; then ... ? ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: _man only uses $manpath 1999-09-17 11:22 ` Adam Spiers @ 1999-09-17 12:43 ` Oliver Kiddle 0 siblings, 0 replies; 7+ messages in thread From: Oliver Kiddle @ 1999-09-17 12:43 UTC (permalink / raw) To: Adam Spiers; +Cc: zsh-workers Adam Spiers wrote: > > No, the GNU man displays all the man paths it will use if invoked as > `man -w': It seems that GNU man itself varies. The GNU man on the debian linux system I have access to at work prints: What manual page do you want? in response to -w with no argument and has no -W option. Note that it does return an exit code of 1 though so we can still use man -w if we check the exit code. > In the GNU case, you can just grep /etc/man.config for `^MANPATH '. That must be specific to your linux distribution as opposed to GNU man. > I'd rather keep guessing as a last resort. Maybe try man -w and check > the exit code, then > if [[ -r /etc/man.config ]]; then That's probably the best approach as long as we don't find a system that breaks it. Oliver Kiddle ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: _man only uses $manpath 1999-09-17 9:45 _man only uses $manpath Sven Wischnowsky 1999-09-17 11:22 ` Adam Spiers @ 1999-09-17 12:54 ` Clint Adams 1999-09-17 13:04 ` Clint Adams 1 sibling, 1 reply; 7+ messages in thread From: Clint Adams @ 1999-09-17 12:54 UTC (permalink / raw) To: Sven Wischnowsky; +Cc: zsh-workers > Yes, a la `_x_color'. Just to complicate things further, man_db (as used by Debian) uses an /etc/manpath.config that looks like this: MANDATORY_MANPATH /usr/man MANDATORY_MANPATH /usr/share/man MANDATORY_MANPATH /usr/X11R6/man MANDATORY_MANPATH /usr/local/man #--------------------------------------------------------- # set up PATH to MANPATH mapping # ie. what man tree holds man pages for what binary directory. # # *PATH* -> *MANPATH* # MANPATH_MAP /bin /usr/share/man MANPATH_MAP /usr/bin /usr/share/man MANPATH_MAP /sbin /usr/share/man MANPATH_MAP /usr/sbin /usr/share/man MANPATH_MAP /usr/local/bin /usr/local/man MANPATH_MAP /usr/local/sbin /usr/local/man MANPATH_MAP /usr/X11R6/bin /usr/X11R6/man MANPATH_MAP /usr/bin/X11 /usr/X11R6/man MANPATH_MAP /usr/games /usr/share/man MANPATH_MAP /opt/bin /opt/man MANPATH_MAP /opt/sbin /opt/man #--------------------------------------------------------- # *MANPATH* -> *CATPATH* # MANDB_MAP /usr/man /var/cache/man/fsstnd MANDB_MAP /usr/share/man /var/cache/man MANDB_MAP /usr/local/man /var/cache/man/local MANDB_MAP /usr/X11R6/man /var/cache/man/X11R6 MANDB_MAP /opt/man /var/cache/man/opt ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: _man only uses $manpath 1999-09-17 12:54 ` Clint Adams @ 1999-09-17 13:04 ` Clint Adams 1999-09-17 14:27 ` PATCH: " Oliver Kiddle 0 siblings, 1 reply; 7+ messages in thread From: Clint Adams @ 1999-09-17 13:04 UTC (permalink / raw) To: Clint Adams; +Cc: Sven Wischnowsky, zsh-workers > MANDATORY_MANPATH /usr/man > MANDATORY_MANPATH /usr/share/man > MANDATORY_MANPATH /usr/X11R6/man > MANDATORY_MANPATH /usr/local/man And if you want that as a colon-delimited list, you can run the manpath binary. ^ permalink raw reply [flat|nested] 7+ messages in thread
* PATCH: Re: _man only uses $manpath 1999-09-17 13:04 ` Clint Adams @ 1999-09-17 14:27 ` Oliver Kiddle 1999-09-17 14:44 ` Peter Stephenson 0 siblings, 1 reply; 7+ messages in thread From: Oliver Kiddle @ 1999-09-17 14:27 UTC (permalink / raw) To: zsh-workers Clint Adams wrote: > And if you want that as a colon-delimited list, you can run > the manpath binary. As far as I can tell, running manpath will always work where man -w will and in other cases such as debian where man -w doesn't so we can use that. I've attached a basic patch which tries running manpath and failing that, uses filename expansion to generate a reasonable guessed manpath. No doubt we'll shortly find that everyone can think of many more directories which can be in the default manpath. I couldn't think of a much better way to check the directories other than determining that they are existing directories. A for loop can be used if someone can think of a suitable check. I'm not convinced that it is worth it to parse files in /etc for any system where a the manpath command exists so I haven't bothered with it. As an aside, can the filename generation below be put all in one word: it seems that I can't nest brackets with | and can't do things like (|/) without getting a zsh: bad pattern error. Oliver Kiddle *** _man.old Fri Sep 17 14:39:09 1999 --- _man Fri Sep 17 15:08:42 1999 *************** *** 14,19 **** --- 14,22 ---- approx="(#a${_comp_correct})" fi + [ "$manpath" ] || manpath=$(manpath 2>/dev/null) || \ + manpath=( /usr/man(-/N) /(opt|usr)/(dt|share|X11R6|local)/(cat|)man(-/N) ) + if [[ $words[2] = (<->*|ln) ]]; then rep=( $manpath/(man|cat)${words[2]}/${~approx}$PREFIX${~star}$SUFFIX.<->*(N:t:r) ) ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: PATCH: Re: _man only uses $manpath 1999-09-17 14:27 ` PATCH: " Oliver Kiddle @ 1999-09-17 14:44 ` Peter Stephenson 0 siblings, 0 replies; 7+ messages in thread From: Peter Stephenson @ 1999-09-17 14:44 UTC (permalink / raw) To: zsh-workers Oliver Kiddle wrote: > As an aside, can the filename generation below be put all in one word: > it seems that I can't nest brackets with | and can't do things like (|/) > without getting a zsh: bad pattern error. > + manpath=( /usr/man(-/N) /(opt|usr)/(dt|share|X11R6|local)/(cat|)man(-/N) ) If you read the manual, you'll see that / in () isn't supposed to work, with one exception which you can use here --- it's not exactly what you want, because it will match those names to any depth: /(opt|usr)/(dt|share|X11R6|local/)#(cat|)man(-/N) There are actually two problems here. The first is that the test for the existence of a file segment in a closure is bungled. The patch below is supposed to fix this. I can't see how the code as it is can be right. (This wouldn't show up in this case, actually; only in the rare case where you have a fixed string in (.../)#, as I did when testing the following, which is presumably why no-one has ever noticed.) The second is more subtle. (.../)# behaves like **/, not ***/, in that it won't follow links, so if /usr/local is a link (as it is here, which is why I'm writing this at all) it won't be included. That's deliberate, since **/, and not ***/, is the abbreviation for (*/)#. But it's rather inconvenient. I can't think of a really clean fix. --- Src/glob.c.sfp Tue Sep 14 13:43:43 1999 +++ Src/glob.c Fri Sep 17 16:33:47 1999 @@ -476,7 +476,7 @@ if (!errflag && !(q->closure && !strcmp(str, "."))) { addpath(str); - if (!closure || statfullpath("", NULL, 1)) + if (!closure || !statfullpath("", NULL, 1)) scanner((q->closure) ? q : q->next); pathbuf[pathpos = oppos] = '\0'; } -- Peter Stephenson <pws@ibmth.df.unipi.it> Tel: +39 050 844536 WWW: http://www.ifh.de/~pws/ Dipartimento di Fisica, Via Buonarroti 2, 56127 Pisa, Italy ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~1999-09-17 15:20 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 1999-09-17 9:45 _man only uses $manpath Sven Wischnowsky 1999-09-17 11:22 ` Adam Spiers 1999-09-17 12:43 ` Oliver Kiddle 1999-09-17 12:54 ` Clint Adams 1999-09-17 13:04 ` Clint Adams 1999-09-17 14:27 ` PATCH: " Oliver Kiddle 1999-09-17 14:44 ` Peter Stephenson
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).