]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix overlooked case in erc--get-inserted-msg-beg-at
authorF. Jason Park <jp@neverwas.me>
Wed, 28 Aug 2024 06:05:35 +0000 (23:05 -0700)
committerEshel Yaron <me@eshelyaron.com>
Mon, 30 Sep 2024 20:33:52 +0000 (22:33 +0200)
* lisp/erc/erc.el (erc--get-inserted-msg-beg-at): Account for the start
of a props header being `bobp' when searching backwards.
(erc--get-inserted-msg-prop): Add optional `point' parameter.
* test/lisp/erc/erc-goodies-tests.el
(erc--get-inserted-msg-beg/truncated/readonly): New test.
* test/lisp/erc/erc-tests.el (erc--get-inserted-msg-beg/truncated): New
test.
* test/lisp/erc/resources/erc-tests-common.el
(erc-tests-common-assert-get-inserted-msg/truncated): New test helper.
(Bug#72736)

(cherry picked from commit 08f662da1123f50f3f62d0af747bff88d2c73938)

lisp/erc/erc.el
test/lisp/erc/erc-goodies-tests.el
test/lisp/erc/erc-tests.el
test/lisp/erc/resources/erc-tests-common.el

index 60c2928e5bc7ad5c0b838839172b3277cc505bc2..5093e1534ec6d5fb390e6e85c8deaf1a3cb56829 100644 (file)
@@ -3324,10 +3324,14 @@ value.  Otherwise, return the stored value."
   (macroexp-let2* nil ((point point)
                        (at-start-p at-start-p))
     `(or (and ,at-start-p ,point)
-         (and-let* ((p (previous-single-property-change ,point 'erc--msg)))
-           (if (and (= p (1- ,point)) (get-text-property p 'erc--msg))
-               p
-             (1- p))))))
+         (let ((p (previous-single-property-change ,point 'erc--msg)))
+           (cond
+            ((and p (= p (1- ,point)) (get-text-property p 'erc--msg)) p)
+            (p (1- p))
+            ((and (null p)
+                  (> ,point (point-min))
+                  (get-text-property (1- point) 'erc--msg))
+             (1- point)))))))
 
 (defmacro erc--get-inserted-msg-end-at (point at-start-p)
   (macroexp-let2 nil point point
@@ -3356,9 +3360,9 @@ if not found."
     (and-let* ((b (erc--get-inserted-msg-beg-at point at-start-p)))
       (cons b (erc--get-inserted-msg-end-at point at-start-p)))))
 
-(defun erc--get-inserted-msg-prop (prop)
+(defun erc--get-inserted-msg-prop (prop &optional point)
   "Return the value of text property PROP for some message at point."
-  (and-let* ((stack-pos (erc--get-inserted-msg-beg (point))))
+  (and-let* ((stack-pos (erc--get-inserted-msg-beg (or point (point)))))
     (get-text-property stack-pos prop)))
 
 ;; FIXME improve this nascent "message splicing" facility to include a
index 038434b38800e2d5d06b65cc8b8d036ed4682e89..1d74025c5ce8764f6342040118020a543bf43ec8 100644 (file)
    #'erc-tests-common-assert-get-inserted-msg/basic
    (lambda (arg) (should (= 3 (erc--get-inserted-msg-beg arg))))))
 
+(ert-deftest erc--get-inserted-msg-beg/truncated/readonly ()
+  (erc-tests-common-assert-get-inserted-msg-readonly-with
+   #'erc-tests-common-assert-get-inserted-msg/truncated
+   (lambda (arg) (should (= 1 (erc--get-inserted-msg-beg arg))))))
+
 (ert-deftest erc--get-inserted-msg-end/readonly ()
   (erc-tests-common-assert-get-inserted-msg-readonly-with
    #'erc-tests-common-assert-get-inserted-msg/basic
index 72ea11aeba1e3654a315d347be9164976ee6bc3c..eddb3a5b2c8cc6d8ca11a7af3b3a2688900182e0 100644 (file)
   (erc-tests-common-assert-get-inserted-msg/basic
    (lambda (arg) (should (= 3 (erc--get-inserted-msg-beg arg))))))
 
+(ert-deftest erc--get-inserted-msg-beg/truncated ()
+  (erc-tests-common-assert-get-inserted-msg/truncated
+   (lambda (arg) (should (= 1 (erc--get-inserted-msg-beg arg))))))
+
 (ert-deftest erc--get-inserted-msg-end/basic ()
   (erc-tests-common-assert-get-inserted-msg/basic
    (lambda (arg) (should (= 11 (erc--get-inserted-msg-end arg))))))
index b5bb1fb09c3dd292b8ed6a980426b01b7e6bba5d..1cd54a1f715b89080564641eff0d5ef56ad5c0fa 100644 (file)
@@ -184,6 +184,13 @@ For simplicity, assume string evaluates to itself."
   (should (looking-back "<bob> hi"))
   (erc-tests-common-assert-get-inserted-msg 3 11 test-fn))
 
+(defun erc-tests-common-assert-get-inserted-msg/truncated (test-fn)
+  (erc-tests-common-get-inserted-msg-setup)
+  (with-silent-modifications (delete-region 1 3))
+  (goto-char 9)
+  (should (looking-back "<bob> hi"))
+  (erc-tests-common-assert-get-inserted-msg 1 9 test-fn))
+
 ;; This is a "mixin" and requires a base assertion function, like
 ;; `erc-tests-common-assert-get-inserted-msg/basic', to work.
 (defun erc-tests-common-assert-get-inserted-msg-readonly-with