Regexp for imenu

Stephen Eglen stephen at
Fri Jan 11 23:25:10 CET 2002

Wright, Kevin writes:
 > I typically format my functions this way:
 > a<-function(){...}
 > but imenu fails to recognize this as a function, expecting spaces around the
 > assignment operator:
 > a <- function()
 > I think that the relevant part of ess-menu.el is
 > "ess-S-imenu-function-regexp".  The default value for this string is 
 > "^\\(.+\\)\\s-*<-\\s-*function"
 > I've tried playing around with this regexp, for example
 > "^\\(.+\\)[ ]*<-[ ]*function"
 > and
 > "^\\(.+\\)<-function"
 > It looks to me like any of these should work for me, but I'm not having any
 > luck.  Am I missing something obvious?

yes, the regexps you suggest look fine.  However, it seems the imenu
regexp is hardcoded (at least in 5.1.19) in the function ess-imenu-S:

(defun ess-imenu-S (&optional arg)
  "S Language Imenu support for ESS.  
Initial version from Stephen Eglen <stephen at>."
  (setq imenu-generic-expression 
  '( (nil ;;ess-S-imenu-generic-expression 
  (imenu-add-to-menubar "Imenu-S"))

You can do a couple of things as workaround:

1) since imenu-generic-expression is buffer local, evaluate the
   following in each R/S buffer that you want imenu to work in:

(setq imenu-generic-expression '( (nil "^\\(.+\\)\\s-*<-\\s-*function" 1)))

 (that worked for me when removing whitespace around one of my function

2) change the regexp in the defun above and visit a new R buffer (or
   restart Emacs).

The problem you found is that are relevant variables in ESS that you
can set (such as ess-S-imenu-function-regexp), but they are not being
used by ess-imenu-S.  (Why is ess-S-imenu-generic-expression in the
above defun commented out?)

Best wishes,
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