Commit baef4cbe authored by Karl Fogel's avatar Karl Fogel

* 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.
parent b32ce4c3
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> 2007-06-15 Masatake YAMATO <jet@gyve.org>
* vc-bzr.el (vc-bzr-root): Cache the output of shell command * vc-bzr.el (vc-bzr-root): Cache the output of shell command
......
...@@ -67,7 +67,7 @@ ...@@ -67,7 +67,7 @@
"Determine the start and end buffer locations for the THING at point. "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. THING is a symbol which specifies the kind of syntactic entity you want.
Possibilities include `symbol', `list', `sexp', `defun', `filename', `url', 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 See the file `thingatpt.el' for documentation on how to define
a symbol as a valid THING. a symbol as a valid THING.
...@@ -124,7 +124,7 @@ of the textual entity that was found." ...@@ -124,7 +124,7 @@ of the textual entity that was found."
"Return the THING at point. "Return the THING at point.
THING is a symbol which specifies the kind of syntactic entity you want. THING is a symbol which specifies the kind of syntactic entity you want.
Possibilities include `symbol', `list', `sexp', `defun', `filename', `url', 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 See the file `thingatpt.el' for documentation on how to define
a symbol as a valid THING." a symbol as a valid THING."
...@@ -340,6 +340,33 @@ point." ...@@ -340,6 +340,33 @@ point."
(goto-char (car bounds)) (goto-char (car bounds))
(error "No URL here"))))) (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 ;; Whitespace
(defun forward-whitespace (arg) (defun forward-whitespace (arg)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment