|
From: | Andreas Röhler |
Subject: | bug#35708: [27.0.50]: thingatpt.el, thing-at-point-looking-at redundant |
Date: | Tue, 14 May 2019 12:02:15 +0200 |
User-agent: | Mozilla/5.0 (X11; Linux i686; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 |
On 13.05.19 21:25, npostavs@gmail.com wrote:
Andreas Röhler <andreas.roehler@easy-emacs.de> writes:Thought at something like below, which should pass the test: (defun ar-thing-at-point-looking-at (regexp) "Return t if regexp matches at or before point, nil otherwise." (save-excursion (while (not (or (looking-at regexp)(bolp))) (forward-char -1)) (looking-at regexp)))I think it's an optimization to use re-search-backward instead of moving on character at a time and calling looking-at in lisp.
Hmm, current thing-at-point-looking-at might be slow with large buffers. The slightly modified test should reveal it:
(ert-deftest thing-at-point-looking-at-2 () (with-temp-buffer (insert "1abcd 222abcd") (dotimes (_ 99999) (insert " asdf ")) (goto-char (point-min)) (let ((m2 (progn (search-forward "2abcd") (match-data)))) (goto-char (point-min)) (search-forward "2ab") (should (thing-at-point-looking-at "2abcd")) (should (equal (match-data) m2)))))But let me correct the alternative delivered, as it didn't match before point:
(defun ar-regexp-atpt (regexp) "Return t if REGEXP matches at or before point, nil otherwise. Changes match-data" (save-excursion (if (looking-at regexp) (while (save-excursion (and (not (bobp)) (progn (backward-char) (looking-at regexp))))) (while (not (or (bobp) (backward-char) (looking-at regexp)))) (ar-regexp-atpt regexp)) (looking-at regexp)))
[Prev in Thread] | Current Thread | [Next in Thread] |