From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15206 invoked by alias); 4 Apr 2013 14:56:11 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 31203 Received: (qmail 29063 invoked from network); 4 Apr 2013 14:56:09 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_HI, SPF_HELO_PASS autolearn=ham version=3.3.2 Received-SPF: none (ns1.primenet.com.au: domain at samsung.com does not designate permitted sender hosts) X-AuditID: cbfec7f5-b7fd76d000007247-8b-515d922a6316 Date: Thu, 04 Apr 2013 15:46:01 +0100 From: Peter Stephenson To: Zsh Hackers' List Subject: PATCH: _etags Message-id: <20130404154601.10b81432@pwslap01u.europe.root.pri> Organization: Samsung Cambridge Solution Centre X-Mailer: Claws Mail 3.7.9 (GTK+ 2.22.0; i386-redhat-linux-gnu) MIME-version: 1.0 Content-type: text/plain; charset=US-ASCII Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrEJMWRmVeSWpSXmKPExsVy+t/xy7pak2IDDU5c0bE42PyQyYHRY9XB D0wBjFFcNimpOZllqUX6dglcGcuONDAWXJOomPSjuIHxlXAXIyeHhICJRMOeEywQtpjEhXvr 2UBsIYGljBLrv9t0MXIB2cuZJL71TGIHSbAIqEq0H5rBCGKzCRhKTN00G8jm4BAR0JZo/ygG EhYGmjPzTw/YTF4Be4nnm/4wgdj8AvoSV/9+YoLYZS8x88oZRogaQYkfk++B1TMLaEls3tbE CmHLS2xe85Z5AiPfLCRls5CUzUJStoCReRWjaGppckFxUnqukV5xYm5xaV66XnJ+7iZGSDh9 3cG49JjVIUYBDkYlHt6V/jGBQqyJZcWVuYcYJTiYlUR4j7bEBgrxpiRWVqUW5ccXleakFh9i ZOLglGpg1Pj2f+OXk01bbl/pfbTUvuTCRMmtK/q3BtkWhvl9m/nh14bz+XoHdvpnPPk4UWX3 TW7VlwsebG+e2pbGONetWOxG+SsV5xXbmTUr2U6svMIikZl323iXfG1cWbmb1I0W91DG6HAG 9h9XNBeJSoW1vHm393YR0/Gr6zfaC57iu8niLvJuTYNNpBJLcUaioRZzUXEiAAyW4r8FAgAA Parsing etags --help for languages is a bit fraught, but I'm stuck there. Discovered "git diff --cached". It's even possible I may be able to submit this... diff --git a/Completion/Unix/Command/.distfiles b/Completion/Unix/Command/.distfiles index abb5de7..9ce81f6 100644 --- a/Completion/Unix/Command/.distfiles +++ b/Completion/Unix/Command/.distfiles @@ -57,6 +57,7 @@ _elm _enscript _env _espeak +_etags _fakeroot _feh _fetchmail diff --git a/Completion/Unix/Command/_etags b/Completion/Unix/Command/_etags new file mode 100644 index 0000000..d1644fd --- /dev/null +++ b/Completion/Unix/Command/_etags @@ -0,0 +1,63 @@ +#compdef etags + +integer ret=1 +local context state line expl +typeset -A opt_args + +_arguments \ + '(-a --append)'{-a,--append}'[append tag entries]' \ + '--packages-only[only generate tags for Ada packages]' \ + '--declarations[C etc.: tags for function declarations]' \ + '(-D --no-defines)'{-D,--no-defines}'[No tags for preprocessor definitions]' \ + {-i-,--include=}'[Tag file should include another]:tag file:_files' \ + {-l-,--language=}'[Specify language]:language:->lang' \ + '--no-globals[No tag entries for global variables]' \ + '--no-members[No tag entries for structure members]' \ + {-r-,--regex=}'[Specify regular expression]:regular expression:->regex' \ + {-R,--no-regex}'[No regular expressions for tags]' \ + '(-I --ignore-indentation)'{-I,--ignore-indentation}'[Closing brace in first col may not be start of func]' \ + '(-o --output)'{-o-,--output=}'[Specify output file]:file:_files' \ + '--parse-stdin=[Specify file name for stdin]:file name:_files' \ + '(-V --version)'{-V,--version}'[Output version]' \ + '(-h --help)'{-h,--help}'[Output help]' \ + '*:file to tag:_files' \ + && ret=0 + +case $state in + (lang) + local -a langs + langs=(${${${${(f)"$(etags --help)"}:#^ [^[:blank:]]##[[:blank:]]##([[:alnum:].]*|)}# }%%[[:blank:]]*}) + _wanted languages expl language compadd -a langs && ret=0 + ;; + + (regex) + if compset -P @; then + _files && ret=0 + elif [[ -n $PREFIX ]]; then + local sep=$PREFIX[1] + [[ $sep = [\\*?#] ]] && sep="\\$sep" + local -a match mbegin mend + if compset -P "$sep*$sep*$sep"; then + local mods=smi + mods=${mods//[${PREFIX}]} + if [[ -n $mods ]]; then + compset -P '*' + local -a modarr + [[ $mods = *i* ]] && modarr+=("i:ignore case") + [[ $mods = *m* ]] && modarr+=("m:allow multi-line matches") + [[ $mods = *s* ]] && modarr+=("s:multi-line, dot matches newline") + _describe -t modifiers modifier modarr && ret=0 + fi + elif compset -P "$sep*$sep"; then + _message "tagname" && ret=0 + else + compset -P "$sep" + _message "tag regexp" && ret=0 + fi + else + _message "regexp separator or @ for file" && ret=0 + fi + ;; +esac + +return ret -- Peter Stephenson Principal Software Engineer Tel: +44 (0)1223 434724 Samsung Cambridge Solution Centre St John's House, St John's Innovation Park, Cowley Road, Cambridge, CB4 0DS, UK