summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Ingebrigtsen <larsi@gnus.org>2021-12-22 13:56:47 +0100
committerLars Ingebrigtsen <larsi@gnus.org>2021-12-22 13:56:47 +0100
commit29fffbdd87391272e9131be63cf93f5067d6ae0d (patch)
tree46c1c5faf8b3029c82f6c4cabc570930a3d9ff4b
parent9bcb7326860ed8b234f8ffd8bceae866b968ff39 (diff)
downloademacs-29fffbdd87391272e9131be63cf93f5067d6ae0d.tar.gz
Revert field-related thingatpt changes
This reverts 7db376e560448e61485ba054def8c82b21f33d6a, which led to severe performance regressions when being run in large buffers with no fields (bug#52593)
-rw-r--r--etc/NEWS1
-rw-r--r--lisp/thingatpt.el38
-rw-r--r--test/lisp/thingatpt-tests.el8
3 files changed, 16 insertions, 31 deletions
diff --git a/etc/NEWS b/etc/NEWS
index 02b6f665b07..1664ccfd044 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -3038,7 +3038,6 @@ checkdoc will now check the format of 'yes-or-no-p'.
*** New command 'checkdoc-dired'.
This can be used to run checkdoc on files from a Dired buffer.
----
*** No longer checks for 'A-' modifiers.
Checkdoc recommends usage of command substitutions ("\\[foo-command]")
in favor of writing keybindings like 'C-c f'. It now no longer warns
diff --git a/lisp/thingatpt.el b/lisp/thingatpt.el
index 32e66184d70..4d3e68ec9c4 100644
--- a/lisp/thingatpt.el
+++ b/lisp/thingatpt.el
@@ -162,30 +162,24 @@ Possibilities include `symbol', `list', `sexp', `defun',
When the optional argument NO-PROPERTIES is non-nil,
strip text properties from the return value.
-If the current buffer uses fields (see Info node `(elisp)Fields'),
-this function will narrow to the field before identifying the
-thing at point.
-
See the file `thingatpt.el' for documentation on how to define
a symbol as a valid THING."
- (save-restriction
- (narrow-to-region (field-beginning) (field-end))
- (let ((text
- (cond
- ((cl-loop for (pthing . function) in thing-at-point-provider-alist
- when (eq pthing thing)
- for result = (funcall function)
- when result
- return result))
- ((get thing 'thing-at-point)
- (funcall (get thing 'thing-at-point)))
- (t
- (let ((bounds (bounds-of-thing-at-point thing)))
- (when bounds
- (buffer-substring (car bounds) (cdr bounds))))))))
- (when (and text no-properties (sequencep text))
- (set-text-properties 0 (length text) nil text))
- text)))
+ (let ((text
+ (cond
+ ((cl-loop for (pthing . function) in thing-at-point-provider-alist
+ when (eq pthing thing)
+ for result = (funcall function)
+ when result
+ return result))
+ ((get thing 'thing-at-point)
+ (funcall (get thing 'thing-at-point)))
+ (t
+ (let ((bounds (bounds-of-thing-at-point thing)))
+ (when bounds
+ (buffer-substring (car bounds) (cdr bounds))))))))
+ (when (and text no-properties (sequencep text))
+ (set-text-properties 0 (length text) nil text))
+ text))
;;;###autoload
(defun bounds-of-thing-at-mouse (event thing)
diff --git a/test/lisp/thingatpt-tests.el b/test/lisp/thingatpt-tests.el
index 2a32dc57b1c..dc108c77c5c 100644
--- a/test/lisp/thingatpt-tests.el
+++ b/test/lisp/thingatpt-tests.el
@@ -223,12 +223,4 @@ position to retrieve THING.")
(should (equal (test--number "0xf00" 2) 3840))
(should (equal (test--number "0xf00" 3) 3840)))
-(ert-deftest test-fields ()
- (with-temp-buffer
- (insert (propertize "foo" 'field 1) "bar" (propertize "zot" 'field 2))
- (goto-char 1)
- (should (eq (symbol-at-point) 'foo))
- (goto-char 5)
- (should (eq (symbol-at-point) 'bar))))
-
;;; thingatpt-tests.el ends here