diff options
author | Lars Ingebrigtsen <larsi@gnus.org> | 2021-12-22 13:56:47 +0100 |
---|---|---|
committer | Lars Ingebrigtsen <larsi@gnus.org> | 2021-12-22 13:56:47 +0100 |
commit | 29fffbdd87391272e9131be63cf93f5067d6ae0d (patch) | |
tree | 46c1c5faf8b3029c82f6c4cabc570930a3d9ff4b | |
parent | 9bcb7326860ed8b234f8ffd8bceae866b968ff39 (diff) | |
download | emacs-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/NEWS | 1 | ||||
-rw-r--r-- | lisp/thingatpt.el | 38 | ||||
-rw-r--r-- | test/lisp/thingatpt-tests.el | 8 |
3 files changed, 16 insertions, 31 deletions
@@ -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 |