* Re: master 90744ff0be 1/2: comint-fl: Prevent fontification of output as input
2022-10-01 6:44 master 90744ff0be 1/2: comint-fl: Prevent fontification of output as input Eli Zaretskii
@ 2022-10-06 18:31 ` miha
2022-10-07 11:44 ` Lars Ingebrigtsen
0 siblings, 1 reply; 3+ messages in thread
From: miha @ 2022-10-06 18:31 UTC (permalink / raw)
To: Eli Zaretskii, Lars Ingebrigtsen; +Cc: emacs-devel, Stefan Monnier
[-- Attachment #1.1: Type: text/plain, Size: 1548 bytes --]
Eli Zaretskii <eliz@gnu.org> writes:
>> branch: master
>> commit 90744ff0be581b69cedea1194b7e78265bdb67a4
>> Author: Miha Rihtaršič <miha@kamnitnik.top>
>> Commit: Lars Ingebrigtsen <larsi@gnus.org>
>>
>> comint-fl: Prevent fontification of output as input
>>
>> * lisp/comint.el (comint-output-filter): Inhibit jit-lock
>> fontification of inserted process output before marking it with the
>> 'output' filed property (bug#58169).
>> ---
>> lisp/comint.el | 24 +++++++++++++-----------
>> 1 file changed, 13 insertions(+), 11 deletions(-)
>>
>> diff --git a/lisp/comint.el b/lisp/comint.el
>> index e7d2136c84..15c9388ea4 100644
>> --- a/lisp/comint.el
>> +++ b/lisp/comint.el
>> @@ -2150,24 +2150,26 @@ Make backspaces delete the previous character."
>> ;; insert-before-markers is a bad thing. XXX
>> ;; Luckily we don't have to use it any more, we use
>> ;; window-point-insertion-type instead.
>> - (insert string)
>> + (make-local-variable 'jit-lock-mode)
>> + (let ((jit-lock-mode nil)) <<<<<<<<<<<<<<<<<<<<<<<<<<<<
>> + (insert string)
>
> Isn't that hammer too large/blunt for this job? It will disable every
> single function registered with jit-lock, not just the fontification
> functions. Some of the functions registered with jit-lock have
> nothing to do with fontifications.
Sorry for late reply. I agree. Please consider applying the attached
patches.
See also reply https://debbugs.gnu.org/cgi/bugreport.cgi?bug=58169#31
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: 0001-Revert-comint-fl-Prevent-fontification-of-output-as-.patch --]
[-- Type: text/x-patch, Size: 2241 bytes --]
From f3edbf1484cfbab781d76c6d39f6157b8506224d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Miha=20Rihtar=C5=A1i=C4=8D?= <miha@kamnitnik.top>
Date: Thu, 6 Oct 2022 19:06:37 +0200
Subject: [PATCH 1/2] Revert "comint-fl: Prevent fontification of output as
input"
This reverts commit 90744ff0be581b69cedea1194b7e78265bdb67a4.
---
lisp/comint.el | 24 +++++++++++-------------
1 file changed, 11 insertions(+), 13 deletions(-)
diff --git a/lisp/comint.el b/lisp/comint.el
index b1f3ad8259..e3eee8411c 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -2150,26 +2150,24 @@ comint-output-filter
;; insert-before-markers is a bad thing. XXX
;; Luckily we don't have to use it any more, we use
;; window-point-insertion-type instead.
- (make-local-variable 'jit-lock-mode)
- (let ((jit-lock-mode nil))
- (insert string)
+ (insert string)
- ;; Advance process-mark
- (set-marker (process-mark process) (point))
+ ;; Advance process-mark
+ (set-marker (process-mark process) (point))
- (unless comint-inhibit-carriage-motion
+ (unless comint-inhibit-carriage-motion
;; Interpret any carriage motion characters (newline, backspace)
(comint-carriage-motion comint-last-output-start (point)))
- ;; Run these hooks with point where the user had it.
- (goto-char saved-point)
- (run-hook-with-args 'comint-output-filter-functions string)
- (set-marker saved-point (point))
+ ;; Run these hooks with point where the user had it.
+ (goto-char saved-point)
+ (run-hook-with-args 'comint-output-filter-functions string)
+ (set-marker saved-point (point))
- (goto-char (process-mark process)) ; In case a filter moved it.
+ (goto-char (process-mark process)) ; In case a filter moved it.
- (unless comint-use-prompt-regexp
- (comint--mark-as-output comint-last-output-start (point))))
+ (unless comint-use-prompt-regexp
+ (comint--mark-as-output comint-last-output-start (point)))
;; Highlight the prompt, where we define `prompt' to mean
;; the most recent output that doesn't end with a newline.
--
2.37.2
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.3: 0002-comint-fontify-input-Don-t-fontify-output-as-input-d.patch --]
[-- Type: text/x-patch, Size: 1321 bytes --]
From 2264b29ed709babf3f22668ea25ebde431845be7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Miha=20Rihtar=C5=A1i=C4=8D?= <miha@kamnitnik.top>
Date: Thu, 6 Oct 2022 20:22:39 +0200
Subject: [PATCH 2/2] comint-fontify-input: Don't fontify output as input,
different approach
* lisp/comint.el (comint-output-filter): Propertize process output
with field=output before inserting it into buffer to prevent
comint-fontify-input from fontifying it (bug#58169).
---
lisp/comint.el | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/lisp/comint.el b/lisp/comint.el
index e3eee8411c..07ced8d321 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -2147,6 +2147,12 @@ comint-output-filter
(goto-char (process-mark process))
(set-marker comint-last-output-start (point))
+ ;; Before we call `comint--mark-as-output' later,
+ ;; redisplay can be called. We mark the inserted text as
+ ;; output early, to prevent redisplay from fontifying it
+ ;; as input in case of `comint-fontify-input-mode'.
+ (put-text-property 0 (length string) 'field 'output string)
+
;; insert-before-markers is a bad thing. XXX
;; Luckily we don't have to use it any more, we use
;; window-point-insertion-type instead.
--
2.37.2
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 861 bytes --]
^ permalink raw reply related [flat|nested] 3+ messages in thread