diff options
Diffstat (limited to 'lisp/thingatpt.el')
-rw-r--r-- | lisp/thingatpt.el | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/lisp/thingatpt.el b/lisp/thingatpt.el index b13b7b95cd0..b3dca5890f1 100644 --- a/lisp/thingatpt.el +++ b/lisp/thingatpt.el @@ -82,7 +82,7 @@ question. (defun forward-thing (thing &optional n) "Move forward to the end of the Nth next THING. THING should be a symbol specifying a type of syntactic entity. -Possibilities include `symbol', `list', `sexp', `defun', +Possibilities include `symbol', `list', `sexp', `defun', `number', `filename', `url', `email', `uuid', `word', `sentence', `whitespace', `line', and `page'." (let ((forward-op (or (get thing 'forward-op) @@ -97,7 +97,7 @@ Possibilities include `symbol', `list', `sexp', `defun', (defun bounds-of-thing-at-point (thing) "Determine the start and end buffer locations for the THING at point. THING should be a symbol specifying a type of syntactic entity. -Possibilities include `symbol', `list', `sexp', `defun', +Possibilities include `symbol', `list', `sexp', `defun', `number', `filename', `url', `email', `uuid', `word', `sentence', `whitespace', `line', and `page'. @@ -106,8 +106,17 @@ valid THING. Return a cons cell (START . END) giving the start and end positions of the thing found." - (if (get thing 'bounds-of-thing-at-point) - (funcall (get thing 'bounds-of-thing-at-point)) + (cond + ((get thing 'bounds-of-thing-at-point) + (funcall (get thing 'bounds-of-thing-at-point))) + ;; If the buffer is totally empty, give up. + ((and (not (eq thing 'whitespace)) + (save-excursion + (goto-char (point-min)) + (not (re-search-forward "[^\t\n ]" nil t)))) + nil) + ;; Find the thing. + (t (let ((orig (point))) (ignore-errors (save-excursion @@ -149,7 +158,7 @@ positions of the thing found." (lambda () (forward-thing thing -1)))) (point)))) (if (and (<= real-beg orig) (<= orig end) (< real-beg end)) - (cons real-beg end)))))))))) + (cons real-beg end))))))))))) ;;;###autoload (defun thing-at-point (thing &optional no-properties) @@ -499,14 +508,14 @@ If no URL is found, return nil. If optional argument LAX is non-nil, look for URLs that are not well-formed, such as foo@bar or <nobody>. -If optional arguments BOUNDS are non-nil, it should be a cons +If optional argument BOUNDS is non-nil, it should be a cons cell of the form (START . END), containing the beginning and end positions of the URI. Otherwise, these positions are detected automatically from the text around point. If the scheme component is absent, either because a URI delimited with <url:...> lacks one, or because an ill-formed URI was found -with LAX or BEG and END, try to add a scheme in the returned URI. +with LAX or BOUNDS, try to add a scheme in the returned URI. The scheme is chosen heuristically: \"mailto:\" if the address looks like an email address, \"ftp://\" if it starts with \"ftp\", etc." @@ -723,6 +732,7 @@ Signal an error if the entire string was not used." "Return the symbol at point, or nil if none is found." (let ((thing (thing-at-point 'symbol))) (if thing (intern thing)))) + ;;;###autoload (defun number-at-point () "Return the number at point, or nil if none is found. @@ -737,7 +747,9 @@ like \"0xBEEF09\" or \"#xBEEF09\", are recognized." (string-to-number (buffer-substring (match-beginning 0) (match-end 0)))))) +(put 'number 'forward-op 'forward-word) (put 'number 'thing-at-point 'number-at-point) + ;;;###autoload (defun list-at-point (&optional ignore-comment-or-string) "Return the Lisp list at point, or nil if none is found. |