X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/c37ef7546d22e801f247ee9d4fef1a9d6b21ac1a..d1ab001b5ba5db6d33d93e78ae2373ce7fd72128:/lisp/thingatpt.el diff --git a/lisp/thingatpt.el b/lisp/thingatpt.el index 6e90b26508..9920fa06d0 100644 --- a/lisp/thingatpt.el +++ b/lisp/thingatpt.el @@ -1,6 +1,6 @@ ;;; thingatpt.el --- get the `thing' at point -*- lexical-binding:t -*- -;; Copyright (C) 1991-1998, 2000-2015 Free Software Foundation, Inc. +;; Copyright (C) 1991-1998, 2000-2016 Free Software Foundation, Inc. ;; Author: Mike Williams ;; Maintainer: emacs-devel@gnu.org @@ -145,7 +145,7 @@ a symbol as a valid THING." (let ((bounds (bounds-of-thing-at-point thing))) (when bounds (buffer-substring (car bounds) (cdr bounds))))))) - (when (and text no-properties) + (when (and text no-properties (sequencep text)) (set-text-properties 0 (length text) nil text)) text)) @@ -219,7 +219,7 @@ The bounds of THING are determined by `bounds-of-thing-at-point'." (defun thing-at-point-bounds-of-list-at-point () "Return the bounds of the list at point. -\[Internal function used by `bounds-of-thing-at-point'.]" +[Internal function used by `bounds-of-thing-at-point'.]" (save-excursion (let ((opoint (point)) (beg (ignore-errors @@ -280,8 +280,8 @@ If nil, construct the regexp from `thing-at-point-uri-schemes'.") "finger://" "fish://" "ftp://" "geo:" "git://" "go:" "gopher://" "h323:" "http://" "https://" "im:" "imap://" "info:" "ipp:" "irc://" "irc6://" "ircs://" "iris.beep:" "jar:" "ldap://" - "ldaps://" "mailto:" "mid:" "mtqp://" "mupdate://" "news:" - "nfs://" "nntp://" "opaquelocktoken:" "pop://" "pres:" + "ldaps://" "magnet:" "mailto:" "mid:" "mtqp://" "mupdate://" + "news:" "nfs://" "nntp://" "opaquelocktoken:" "pop://" "pres:" "resource://" "rmi://" "rsync://" "rtsp://" "rtspu://" "service:" "sftp://" "sip:" "sips:" "smb://" "sms:" "snmp://" "soap.beep://" "soap.beeps://" "ssh://" "svn://" "svn+ssh://" "tag:" "tel:" @@ -489,19 +489,26 @@ looks like an email address, \"ftp://\" if it starts with (defun thing-at-point-looking-at (regexp &optional distance) "Return non-nil if point is in or just after a match for REGEXP. Set the match data from the earliest such match ending at or after -point." +point. + +Optional argument DISTANCE limits search for REGEXP forward and +back from point." (save-excursion (let ((old-point (point)) (forward-bound (and distance (+ (point) distance))) (backward-bound (and distance (- (point) distance))) - match) + match prev-pos new-pos) (and (looking-at regexp) (>= (match-end 0) old-point) (setq match (point))) ;; Search back repeatedly from end of next match. ;; This may fail if next match ends before this match does. (re-search-forward regexp forward-bound 'limit) - (while (and (re-search-backward regexp backward-bound t) + (setq prev-pos (point)) + (while (and (setq new-pos (re-search-backward regexp backward-bound t)) + ;; Avoid inflooping with some regexps, such as "^", + ;; matching which never moves point. + (< new-pos prev-pos) (or (> (match-beginning 0) old-point) (and (looking-at regexp) ; Extend match-end past search start (>= (match-end 0) old-point)