# HG changeset patch # User Miles Bader # Date 1286436261 -32400 # Node ID 37b95515779062456a38947e7c51c08ad83783a9 # Parent 751b2ae689b503d97d881cb2909a0540ba378de8 (regexp-opt): Add `symbols' mode. diff -r 751b2ae689b5 -r 37b955157790 doc/lispref/searching.texi --- a/doc/lispref/searching.texi Thu Oct 07 06:47:37 2010 +0000 +++ b/doc/lispref/searching.texi Thu Oct 07 16:24:21 2010 +0900 @@ -918,7 +918,11 @@ If the optional argument @var{paren} is non-@code{nil}, then the returned regular expression is always enclosed by at least one parentheses-grouping construct. If @var{paren} is @code{words}, then -that construct is additionally surrounded by @samp{\<} and @samp{\>}. +that construct is additionally surrounded by @samp{\<} and @samp{\>}; +alternatively, if @var{paren} is @code{symbols}, then that construct +is additionally surrounded by @samp{\_<} and @samp{\_>} +(@code{symbols} is often appropriate when matching +programming-language keywords and the like). This simplified definition of @code{regexp-opt} produces a regular expression which is equivalent to the actual value diff -r 751b2ae689b5 -r 37b955157790 lisp/ChangeLog --- a/lisp/ChangeLog Thu Oct 07 06:47:37 2010 +0000 +++ b/lisp/ChangeLog Thu Oct 07 16:24:21 2010 +0900 @@ -1,3 +1,7 @@ +2010-10-07 Miles Bader > + + * emacs-lisp/regexp-opt.el (regexp-opt): Add `symbols' mode. + 2010-10-07 Glenn Morris * mail/rmail.el (mail-sendmail-delimit-header, mail-header-end) diff -r 751b2ae689b5 -r 37b955157790 lisp/emacs-lisp/regexp-opt.el --- a/lisp/emacs-lisp/regexp-opt.el Thu Oct 07 06:47:37 2010 +0000 +++ b/lisp/emacs-lisp/regexp-opt.el Thu Oct 07 16:24:21 2010 +0900 @@ -96,19 +96,24 @@ (concat open (mapconcat 'regexp-quote STRINGS \"\\\\|\") close)) If PAREN is `words', then the resulting regexp is additionally surrounded -by \\=\\< and \\>." +by \\=\\< and \\>. +If PAREN is `symbols', then the resulting regexp is additionally surrounded +by \\=\\_< and \\_>." (save-match-data ;; Recurse on the sorted list. (let* ((max-lisp-eval-depth 10000) (max-specpdl-size 10000) (completion-ignore-case nil) (completion-regexp-list nil) - (words (eq paren 'words)) (open (cond ((stringp paren) paren) (paren "\\("))) (sorted-strings (delete-dups (sort (copy-sequence strings) 'string-lessp))) (re (regexp-opt-group sorted-strings (or open t) (not open)))) - (if words (concat "\\<" re "\\>") re)))) + (cond ((eq paren 'words) + (concat "\\<" re "\\>")) + ((eq paren 'symbols) + (concat "\\_<" re "\\_>")) + (t re))))) ;;;###autoload (defun regexp-opt-depth (regexp)