diff --git a/src/buffer/internal/buffer-insert.lisp b/src/buffer/internal/buffer-insert.lisp index 57119c075..db39c6abd 100644 --- a/src/buffer/internal/buffer-insert.lisp +++ b/src/buffer/internal/buffer-insert.lisp @@ -160,13 +160,13 @@ (run-hooks (make-per-buffer-hook :var 'after-change-functions :buffer buffer) start end old-len))) -(defun need-to-call-after-change-functions-p () +(defun need-to-call-after-change-functions-p (buffer) (and (not *inhibit-modification-hooks*) - (or (variable-value 'after-change-functions) + (or (variable-value 'after-change-functions :buffer buffer) (variable-value 'after-change-functions :global)))) (defun insert/after-change-function (point arg call-next-method) - (if (need-to-call-after-change-functions-p) + (if (need-to-call-after-change-functions-p (point-buffer point)) (with-point ((start point)) (prog1 (funcall call-next-method) (with-point ((end start)) @@ -175,7 +175,7 @@ (funcall call-next-method))) (defun delete/after-change-function (point call-next-method) - (if (need-to-call-after-change-functions-p) + (if (need-to-call-after-change-functions-p (point-buffer point)) (let ((string (funcall call-next-method))) (with-point ((start point) (end point)) diff --git a/tests/buffer/internal.lisp b/tests/buffer/internal.lisp index 53a42dea2..22b165ea1 100644 --- a/tests/buffer/internal.lisp +++ b/tests/buffer/internal.lisp @@ -79,3 +79,17 @@ qrstuvwxyz" (ok (= 5 (lem:point-charpos end-point))) (ok (= 1 (lem:line-number-at-point point)))) (check-corruption buffer))) + +(deftest call-after-change-hook + (let ((buffer (lem:make-buffer "test" :temporary t)) + received-parameters) + (lem:add-hook (lem:variable-value 'lem:after-change-functions :buffer buffer) + (lambda (start end old-len) + (setf received-parameters (list start end old-len)))) + (lem:insert-string (lem:buffer-point buffer) "a") + (when (ok received-parameters) + (destructuring-bind (start end old-len) + received-parameters + (ok (= 1 (lem:position-at-point start))) + (ok (= 2 (lem:position-at-point end))) + (ok (= 0 old-len))))))