From 8774c80d766cee3308e101fac4ae1f8699ac52ed Mon Sep 17 00:00:00 2001 From: Nathaniel Nicandro Date: Wed, 9 Oct 2024 22:39:02 -0500 Subject: [PATCH] Update a use of `ansi-color-apply-on-region` Account for the `PRESERVER-SEQUENCES` argument in Emacs >= 28.1. * jupyter-mime.el (jupyter--ansi-color-apply-on-region): New function. (jupyter-ansi-color-apply-on-region): Use it. --- jupyter-mime.el | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/jupyter-mime.el b/jupyter-mime.el index 626919b9..72e3fde8 100644 --- a/jupyter-mime.el +++ b/jupyter-mime.el @@ -197,6 +197,26 @@ function." ;;; Special handling of ANSI sequences +(defalias 'jupyter--ansi-color-apply-on-region + (if (version< emacs-version "28.1") + (lambda (begin end) + (cl-letf (((symbol-function #'delete-and-extract-region) + (lambda (beg end) + (add-text-properties beg end '(invisible t jupyter-invisible t)) + (buffer-substring beg end)))) + (ansi-color-apply-on-region begin end))) + (lambda (begin end) + (ansi-color-apply-on-region begin end t) + (dolist (ov (overlays-in begin end)) + (when (and (overlay-get ov 'invisible) + (<= begin (overlay-start ov) + (overlay-end ov) end)) + ;; Assume invisible overlay added by + ;; `ansi-color-apply-on-region'. + (add-text-properties (overlay-start ov) (overlay-end ov) + '(invisible t jupyter-invisible t)) + (delete-overlay ov)))))) + (defun jupyter-ansi-color-apply-on-region (begin end &optional face-prop) "`ansi-color-apply-on-region' with Jupyter specific modifications. In particular, does not delete escape sequences between BEGIN and @@ -218,10 +238,7 @@ invisible property by adding it to `char-property-alias-alist'." (setq face (list face)) (font-lock-prepend-text-property beg end 'face face) (put-text-property beg end (or face-prop 'font-lock-face) face))))) - (cl-letf (((symbol-function #'delete-region) - (lambda (beg end) - (add-text-properties beg end '(invisible t jupyter-invisible t))))) - (ansi-color-apply-on-region begin end)))) + (jupyter--ansi-color-apply-on-region begin end))) ;;; `jupyter-insert' method