Using the TAGS facility in Emacs for R/S functions

Jeff Mincy jeff at
Thu Jan 31 16:36:39 CET 2002

On Mon, 28 Jan 2002, timh at wrote:

> In case it helps, here's what I'm using to generate tags.
> I believe this supports both quoted and unquoted names, defined with
> _ or <-, on one or more lines.  It only picks up definitions that
> start at the beginning of a line; so objects or functions defined
> inside functions, and indented, are not found.

> I save the following to a file "updateTAGSregexp":
> --------------------------------------------------
> /This is a file of regular expressions to be used by updateTAGS/
> /First normal names, no subscripting or assignment form/
> /Use grouping to get just the name/
> /"*\([.A-Za-z][.A-Za-z0-9]*\)"*[ \t]*\(<-\|_\)/\1/
> /Now the subscripting versions, must be quoted/
> /"[[]+\(<-\)*[.][.A-Za-z][.A-Za-z0-9]*"/
> --------------------------------------------------
> Then call the following shell script, to extract tags for
> S functions, help files, and C and Fortran source
> (from particular subdirectories of the current directory):
> --------------------------------------------------
> #! /bin/csh
>  ....
> # funs
> foreach d (resamp)
> 	/usr/bin/etags -a -o funsTAGS --regex=@updateTAGSregexp
> 	$d/funs/*.q $d/funs/*.qpp
> end
> # foreach d (support tilting resample)  -- how I did it before

> # help
> foreach d (resamp)
> 	/usr/bin/etags -a -o helpTAGS --regex='/.FN[
> 	\t]*[[.A-Za-z0-9]*/' $d/help/*.d
> end
> # src
> foreach d (resamp)
> 	etags -a -o srcTAGS $d/src/*.c $d/src/*.f $d/src/*.r
> 	$d/src/*.h
> end
> cat funsTAGS helpTAGS srcTAGS > TAGS
> # Make a version of the TAGS file in the resamp directory; change
> # resamp/* to *
> rm resamp/TAGS
> sed s:resamp/:: TAGS > resamp/TAGS

> Tim Hesterberg

Just out of curiosity, what version of etags are you using?  It looks
like you've got an older version.  I'm using the following:
   Exuberant Ctags 5.0.1, Copyright (C) 1996-2001 Darren Hiebert
     Addresses: <darren at>,
     Optional compiled features: +wildcards, +regex

Anyway, your message gave some ideas.

I have the following tags config file:

  --regex-Splus=/^[ \t]+"?([.A-Za-z][.A-Za-z0-9]*)"?[ \t]*(<-|_)[ \t]*function/\1/
  --regex-Splus=/^"?([.A-Za-z][.A-Za-z0-9]*)"?[ \t]*(<-|_)/\1/

Basically, I tell etags that Splus is a language that has two regex.
Any assignment starting at the beginning of a line
is picked up.   Also, nested function definitions will get picked
up, as long as 'function' is on the same line.

Then I create a file .ctags-exclude contains things like 'data' that I
don't want etags to recurse into.

And then I do:

   etags -f S_TAGS --exclude=@.ctags-exclude

ess-help mailing list -- To (un)subscribe, send
subscribe	or	unsubscribe
(in the "body", not the subject !)  To: ess-help-request at

More information about the ESS-help mailing list