Mercurial > emacs
changeset 81447:697178a8197c
* thingatpt.el: Add support for email addresses (`email').
(thing-at-point, bounds-of-thing-at-point): Document `email' support.
(thing-at-point-email-regexp): New variable.
(`email'): Put `bounds-of-thing-at-point' and `thing-at-point'
properties on this symbol, with lambda forms for values.
author | Karl Fogel <kfogel@red-bean.com> |
---|---|
date | Sat, 16 Jun 2007 01:03:35 +0000 |
parents | 774e9d2142bd |
children | 3513d3f93273 |
files | lisp/ChangeLog lisp/thingatpt.el |
diffstat | 2 files changed, 37 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Fri Jun 15 19:40:47 2007 +0000 +++ b/lisp/ChangeLog Sat Jun 16 01:03:35 2007 +0000 @@ -1,3 +1,11 @@ +2007-06-15 Karl Fogel <kfogel@red-bean.com> + + * thingatpt.el: Add support for email addresses (`email'). + (thing-at-point, bounds-of-thing-at-point): Document `email' support. + (thing-at-point-email-regexp): New variable. + (`email'): Put `bounds-of-thing-at-point' and `thing-at-point' + properties on this symbol, with lambda forms for values. + 2007-06-15 Masatake YAMATO <jet@gyve.org> * vc-bzr.el (vc-bzr-root): Cache the output of shell command
--- a/lisp/thingatpt.el Fri Jun 15 19:40:47 2007 +0000 +++ b/lisp/thingatpt.el Sat Jun 16 01:03:35 2007 +0000 @@ -67,7 +67,7 @@ "Determine the start and end buffer locations for the THING at point. THING is a symbol which specifies the kind of syntactic entity you want. Possibilities include `symbol', `list', `sexp', `defun', `filename', `url', -`word', `sentence', `whitespace', `line', `page' and others. +`email', `word', `sentence', `whitespace', `line', `page' and others. See the file `thingatpt.el' for documentation on how to define a symbol as a valid THING. @@ -124,7 +124,7 @@ "Return the THING at point. THING is a symbol which specifies the kind of syntactic entity you want. Possibilities include `symbol', `list', `sexp', `defun', `filename', `url', -`word', `sentence', `whitespace', `line', `page' and others. +`email', `word', `sentence', `whitespace', `line', `page' and others. See the file `thingatpt.el' for documentation on how to define a symbol as a valid THING." @@ -340,6 +340,33 @@ (goto-char (car bounds)) (error "No URL here"))))) +;; Email addresses +(defvar thing-at-point-email-regexp + "<?[-+_.~a-zA-Z][-+_.~:a-zA-Z0-9]+@[-.a-zA-Z0-9]+>?" + "A regular expression probably matching an email address. +This does not match the real name portion, only the address, optionally +with angle brackets.") + +;; Haven't set 'forward-op on 'email nor defined 'forward-email' because +;; not sure they're actually needed, and URL seems to skip them too. +;; Note that (end-of-thing 'email) and (beginning-of-thing 'email) +;; work automagically, though. + +(put 'email 'bounds-of-thing-at-point + (lambda () + (let ((thing (thing-at-point-looking-at thing-at-point-email-regexp))) + (if thing + (let ((beginning (match-beginning 0)) + (end (match-end 0))) + (cons beginning end)))))) + +(put 'email 'thing-at-point + (lambda () + (let ((boundary-pair (bounds-of-thing-at-point 'email))) + (if boundary-pair + (buffer-substring-no-properties + (car boundary-pair) (cdr boundary-pair)))))) + ;; Whitespace (defun forward-whitespace (arg)