unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Juri Linkov <juri@linkov.net>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 61215@debbugs.gnu.org
Subject: bug#61215: 29.0.60; font-lock broken in diff-mode with long lines
Date: Mon, 06 Feb 2023 19:15:49 +0200	[thread overview]
Message-ID: <86edr2davu.fsf@mail.linkov.net> (raw)
In-Reply-To: <83mt5sq7nr.fsf@gnu.org> (Eli Zaretskii's message of "Sun, 05 Feb 2023 20:38:48 +0200")

>> If you think the problem is in diff-syntax-fontify-hunk,
>> then I could try to find a working workaround local to diff-mode.
>
> Yes, now this is something for diff-mode to solve: it shouldn't assume
> that it will always be able to go to the beginning and the end of a
> hunk, because narrowing could interfere with that.  Diff-mode should
> have some fallback plan for these cases.

After debugging I discovered that the problem is not caused by font-lock
in diff-mode.  The problem is in easy-mmode-define-navigation.
diff-mode uses it to navigate diff hunks.  It supports such a feature
that when the user narrowed the diff buffer, it puts narrowing back
after moving to the next hunk.  But this fails when the diff buffer
is narrowed automatically by long-line-optimizations.  If there is
no way to distinguish whether the narrowing is automatic by long-lines
or manual by the user, this patch fixes the problem.  It works without
errors, and even highlights first 250000 characters of the long line:

diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el
index 5721470ad0d..d9176061434 100644
--- a/lisp/emacs-lisp/easy-mmode.el
+++ b/lisp/emacs-lisp/easy-mmode.el
@@ -782,7 +782,10 @@ easy-mmode-define-navigation
          (when-narrowed
           (lambda (body)
             (if (null narrowfun) body
-              `(let ((was-narrowed (prog1 (buffer-narrowed-p) (widen))))
+              `(let ((was-narrowed
+                      (prog1 (unless (long-line-optimizations-p)
+                               (buffer-narrowed-p))
+                        (widen))))
                  ,body
                  (when was-narrowed (funcall #',narrowfun)))))))
     (unless name (setq name base-name))





  reply	other threads:[~2023-02-06 17:15 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-01 18:18 bug#61215: 29.0.60; font-lock broken in diff-mode with long lines Juri Linkov
2023-02-01 18:35 ` Eli Zaretskii
2023-02-02 17:16   ` Juri Linkov
2023-02-02 20:41     ` Eli Zaretskii
2023-02-03  7:53       ` Juri Linkov
2023-02-03 11:59         ` Eli Zaretskii
2023-02-05 18:28           ` Juri Linkov
2023-02-05 18:38             ` Eli Zaretskii
2023-02-06 17:15               ` Juri Linkov [this message]
2023-02-06 18:10                 ` Eli Zaretskii
2023-02-06 18:11                   ` Gregory Heytings
2023-02-27 18:28                   ` Juri Linkov
2023-02-27 19:07                     ` Eli Zaretskii
2023-02-27 19:23                     ` Gregory Heytings
2023-02-27 19:25                       ` Gregory Heytings
2023-03-30 23:22     ` Gregory Heytings
2023-03-31  7:10       ` Juri Linkov
2023-03-31  7:30         ` Juri Linkov
2023-04-01  0:22           ` Gregory Heytings
2023-04-01 18:19             ` Juri Linkov
2023-03-31  7:40         ` Gregory Heytings

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=86edr2davu.fsf@mail.linkov.net \
    --to=juri@linkov.net \
    --cc=61215@debbugs.gnu.org \
    --cc=eliz@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).