* lisp/thingatpt.el (thing-at-point): Accept optional second argument
authorSam Steingold <sds@gnu.org>
Wed, 8 May 2013 15:13:25 +0000 (11:13 -0400)
committerSam Steingold <sds@gnu.org>
Wed, 8 May 2013 15:13:25 +0000 (11:13 -0400)
NO-PROPERTIES to strip the text properties from the return value.
* lisp/net/browse-url.el (browse-url-url-at-point): Pass NO-PROPERTIES
to `thing-at-point' instead of stripping the properties ourselves.
Also, when `thing-at-point' fails to find a url, prepend "http://"
to the filename at point on the assumption that the user is
pointing at something like gnu.org/gnu.

lisp/ChangeLog
lisp/net/browse-url.el
lisp/thingatpt.el

index 119e46e..bab58a6 100644 (file)
@@ -1,3 +1,13 @@
+2013-05-08  Sam Steingold  <sds@gnu.org>
+
+       * thingatpt.el (thing-at-point): Accept optional second argument
+       NO-PROPERTIES to strip the text properties from the return value.
+       * net/browse-url.el (browse-url-url-at-point): Pass NO-PROPERTIES
+       to `thing-at-point' instead of stripping the properties ourselves.
+       Also, when `thing-at-point' fails to find a url, prepend "http://"
+       to the filename at point on the assumption that the user is
+       pointing at something like gnu.org/gnu.
+
 2013-05-08  Juanma Barranquero  <lekktu@gmail.com>
 
        * emacs-lisp/bytecomp.el (byte-compile-insert-header):
index 19e513a..695b7a1 100644 (file)
@@ -658,9 +658,10 @@ regarding its parameter treatment."
 ;; URL input
 
 (defun browse-url-url-at-point ()
-  (let ((url (thing-at-point 'url)))
-    (set-text-properties 0 (length url) nil url)
-    url))
+  (or (thing-at-point 'url t)
+      ;; assume that the user is pointing at something like gnu.org/gnu
+      (let ((f (thing-at-point 'filename t)))
+        (and f (concat "http://" f)))))
 
 ;; Having this as a separate function called by the browser-specific
 ;; functions allows them to be stand-alone commands, making it easier
index f71a0d4..b7ecdb5 100644 (file)
@@ -128,20 +128,27 @@ positions of the thing found."
        (error nil)))))
 
 ;;;###autoload
-(defun thing-at-point (thing)
+(defun thing-at-point (thing &optional no-properties)
   "Return the THING at point.
 THING should be a symbol specifying a type of syntactic entity.
 Possibilities include `symbol', `list', `sexp', `defun',
 `filename', `url', `email', `word', `sentence', `whitespace',
 `line', `number', and `page'.
 
+When the optional argument NO-PROPERTIES is non-nil,
+strip text properties from the return value.
+
 See the file `thingatpt.el' for documentation on how to define
 a symbol as a valid THING."
-  (if (get thing 'thing-at-point)
-      (funcall (get thing 'thing-at-point))
-    (let ((bounds (bounds-of-thing-at-point thing)))
-      (if bounds
-         (buffer-substring (car bounds) (cdr bounds))))))
+  (let ((text
+         (if (get thing 'thing-at-point)
+             (funcall (get thing 'thing-at-point))
+           (let ((bounds (bounds-of-thing-at-point thing)))
+             (when bounds
+               (buffer-substring (car bounds) (cdr bounds)))))))
+    (when (and text no-properties)
+      (set-text-properties 0 (length text) nil text))
+    text))
 
 ;; Go to beginning/end