From: Silas Silva <silasdb@gmail.com>
To: zsh-users@zsh.org
Subject: Completion for man (_man) patch to support -M
Date: Thu, 21 Oct 2010 13:15:14 -0200 [thread overview]
Message-ID: <20101021151504.GA24694@bsoares.omnisys.int.com.br> (raw)
[-- Attachment #1: Type: text/plain, Size: 1310 bytes --]
Hi all,
I was studying the completion system and, since I would like to add
support for -M for the _man completion, I've done it. Dirty and ugly
patch is attached.
Anyway, here comes some inline considerations:
+ if (( $words[(I)-M] == (( $CURRENT - 1 )) )); then
+ _directories && return 0
+ fi
+
Here I wanted to check if the cursor position (where the user will hit
tab) will be just after the -M option. If true, it complete for
directories and exit. Is it right? Is there any better way to make
that check?
First I tried to use the _arguments function, but I realized that
_arguments is just an easy layer for what happens behind the scenes and
_man (and other completion functions) use the "behind the scenes" way to
make things work.
+ if (( $words[(I)-M] )); then
+ local opt
+ opt=$words[(( $words[(I)-M]+1 ))]
+ _manpath=($_manpath $opt)
+ fi
+
_man sets a local MANPATH to make man look for man pages in the right
places. If the user set a man path with -M, I want it to be added to
the _manpath variable.
I'm just not sure if it is the better way to do it. opt holds the
option passed to the -M flag, but (( $words[(I)-M]+1 )) looks ugly?
If it is all right, can it be pulled upstream?
Thank you very much!
--
Silas Silva
[-- Attachment #2: man--M.diff --]
[-- Type: text/plain, Size: 717 bytes --]
--- _man.orig 2010-10-21 12:48:02.000000000 -0200
+++ _man 2010-10-21 12:44:37.000000000 -0200
@@ -3,6 +3,10 @@
_man() {
local dirs expl mrd awk
+ if (( $words[(I)-M] == (( $CURRENT - 1 )) )); then
+ _directories && return 0
+ fi
+
if [[ $service == man ]] && (( $words[(I)-l] + $words[(I)--local-file] )); then
_files || return 0
fi
@@ -21,6 +25,12 @@
(( $#_manpath )) ||
_manpath=( /usr/man(-/) /(opt|usr)/(pkg|dt|share|X11R6|local)/(cat|)man(-/) )
+ if (( $words[(I)-M] )); then
+ local opt
+ opt=$words[(( $words[(I)-M]+1 ))]
+ _manpath=($_manpath $opt)
+ fi
+
# `sman' is the SGML manual directory for Solaris 7.
# 1M is system administrator commands on SVR4
next reply other threads:[~2010-10-21 15:15 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-21 15:15 Silas Silva [this message]
2010-10-21 19:29 ` Peter Stephenson
2010-10-21 22:19 ` Silas Silva
2010-10-22 14:11 ` Greg Klanderman
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=20101021151504.GA24694@bsoares.omnisys.int.com.br \
--to=silasdb@gmail.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).