unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
@ 2021-10-04 21:05 Matthias Meulien
  2021-10-09  0:26 ` bug#51016: Status: " Matthias Meulien
                   ` (2 more replies)
  0 siblings, 3 replies; 45+ messages in thread
From: Matthias Meulien @ 2021-10-04 21:05 UTC (permalink / raw)
  To: 51016

[-- Attachment #1: Type: text/plain, Size: 258 bytes --]


When `diff-font-lock-prettify' is `t', outline headers aren't displayed
at the beginning of a line.

The following screenshot displays a
*vc-diff* buffer with outline minor mode enabled and body hidden with
and without `diff-font-lock-prettify' being `t':


[-- Attachment #2: Capture d’écran du 2021-10-04 22-50-45.png --]
[-- Type: image/png, Size: 110367 bytes --]

[-- Attachment #3: Type: text/plain, Size: 6904 bytes --]


Recipe to reproduce:

1. Set `diff-font-lock-prettify' to `t' and enable `outline-minor-mode'
in `diff-mode'; For example:

(add-hook 'diff-mode-hook
	  (lambda ()
            (setq diff-font-lock-prettify t)
	    (outline-minor-mode)))

2. In a *vc-change-log* buffer for emacs sources, find the commit with
hash a8de88e330. Press = (`log-view').

3. Press C-c @ C-t (`outline-hide-body') while in the *vc-diff*
buffer. Observe that outline headers are splitted in multiple lines.


In GNU Emacs 28.0.50 (build 2, x86_64-pc-linux-gnu, GTK+ Version 3.24.24, cairo version 1.16.0)
 of 2021-09-13 built on carbon
Repository revision: 8c80430824d52e5dfae97db2669b419621817956
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12011000
System Description: Debian GNU/Linux 11 (bullseye)

Configured using:
 'configure --with-native-compilation'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
JSON LCMS2 LIBOTF LIBSELINUX LIBXML2 M17N_FLT MODULES NATIVE_COMP NOTIFY
INOTIFY PDUMPER PNG RSVG SECCOMP SOUND THREADS TIFF TOOLKIT_SCROLL_BARS
X11 XDBE XIM XPM GTK3 ZLIB

Important settings:
  value of $LANG: fr_FR.UTF-8
  value of $XMODIFIERS: @im=ibus
  locale-coding-system: utf-8-unix

Major mode: Message

Minor modes in effect:
  goto-address-mode: t
  highlight-changes-visible-mode: t
  show-paren-mode: t
  shell-dirtrack-mode: t
  minions-mode: t
  mml-mode: t
  desktop-save-mode: t
  save-place-mode: t
  electric-pair-mode: t
  icomplete-mode: t
  global-so-long-mode: t
  global-auto-revert-mode: t
  auto-insert-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  electric-layout-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tab-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  window-divider-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  auto-fill-function: message-do-auto-fill
  transient-mark-mode: t
  abbrev-mode: t

Load-path shadows:
/home/matthias/.config/emacs/elpa/transient-20210919.1006/transient hides /usr/local/share/emacs/28.0.50/lisp/transient
/home/matthias/.config/emacs/elpa/flymake-1.2.1/flymake hides /usr/local/share/emacs/28.0.50/lisp/progmodes/flymake
/home/matthias/.config/emacs/elpa/project-0.7.1/project hides /usr/local/share/emacs/28.0.50/lisp/progmodes/project
/home/matthias/.config/emacs/elpa/dictionary-20201001.1727/dictionary hides /usr/local/share/emacs/28.0.50/lisp/net/dictionary

Features:
(shadow emacsbug sendmail nndoc gnus-dup url-cache crm debbugs-gnu
debbugs soap-client url-http url-auth url-gw rng-xsd xsd-regexp
debbugs-browse dabbrev cl-print cus-start texinfo texinfo-loaddefs
help-fns radix-tree js add-log log-view pcvs-util misearch multi-isearch
smerge-mode diff gnus-fun flow-fill mm-archive view sort smiley
gnus-cite mail-extr gnus-async gnus-bcklg qp gnus-ml disp-table
gnus-topic nndraft nnmh nnfolder utf-7 epa-file gnutls network-stream
nsm gnus-agent gnus-srvr gnus-score score-mode nnvirtual gnus-msg
gnus-cache hl-line conf-mode whitespace ox-odt rng-loc rng-uri rng-parse
rng-match rng-dt rng-util rng-pttrn nxml-parse nxml-ns nxml-enc xmltok
nxml-util ox-latex ox-icalendar ox-html table ox-ascii ox-publish ox
org-element avl-tree generator ol-eww eww xdg url-queue mm-url ol-rmail
ol-mhe ol-irc ol-info ol-gnus nnselect gnus-search eieio-opt speedbar
ezimage dframe gnus-art mm-uu mml2015 mm-view mml-smime smime dig
gnus-sum shr kinsoku svg dom ol-docview doc-view image-mode exif
ol-bibtex bibtex ol-bbdb ol-w3m flyspell goto-addr bug-reference
dired-aux vc-dir follow mule-util display-line-numbers hilit-chg paren
vc-mtn vc-hg vc-bzr vc-src vc-sccs vc-svn vc-cvs vc-rcs vc jka-compr
bash-completion shell eglot array jsonrpc ert ewoc debug backtrace xref
flymake-proc flymake compile pcase project imenu avoid minions
carbon-custom cus-edit cus-load gnus-demon nntp gnus-group gnus-undo
gnus-start gnus-dbus dbus xml gnus-cloud nnimap nnmail mail-source utf7
netrc parse-time iso8601 gnus-spec gnus-win nnoo gnus-int gnus-range
message rmc puny rfc822 mml mml-sec epa derived epg rfc6068 epg-config
mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils
mailheader gnus nnheader gnus-util rmail rmail-loaddefs rfc2047 rfc2045
ietf-drums mail-utils mm-util mail-prsvr wid-edit gnus-dired dired-x
dired dired-loaddefs org-capture org-refile org ob ob-tangle ob-ref
ob-lob ob-table ob-exp org-macro org-footnote org-src ob-comint
org-pcomplete pcomplete comint ansi-color ring org-list org-faces
org-entities time-date org-version ob-emacs-lisp ob-core ob-eval
org-table ol org-keys org-compat org-macs org-loaddefs format-spec
find-func cal-menu calendar cal-loaddefs dictionary link connection
advice markdown-mode edit-indirect color thingatpt noutline outline
skeleton find-file vc-git diff-mode easy-mmode vc-dispatcher ispell
desktop frameset server bookmark text-property-search pp saveplace
elec-pair edmacro kmacro icomplete so-long autorevert filenotify
autoinsert cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align
cc-engine cc-vars cc-defs generic-x face-remap proof-site
proof-autoloads comp comp-cstr warnings rx cl-extra help-mode info
package browse-url url url-proxy url-privacy url-expand url-methods
url-history url-cookie url-domsuf url-util mailcap url-handlers
url-parse auth-source cl-seq eieio eieio-core cl-macs eieio-loaddefs
password-cache json subr-x map url-vars seq byte-opt gv bytecomp
byte-compile cconv cl-loaddefs cl-lib iso-transl tooltip eldoc electric
uniquify ediff-hook vc-hooks lisp-float-type mwheel term/x-win x-win
term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe
tabulated-list replace newcomment text-mode elisp-mode lisp-mode
prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu
timer select scroll-bar mouse jit-lock font-lock syntax font-core
term/tty-colors frame minibuffer cl-generic cham georgian utf-8-lang
misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms
cp51932 hebrew greek romanian slovak czech european ethiopic indian
cyrillic chinese composite charscript charprop case-table epa-hook
jka-cmpr-hook help simple abbrev obarray cl-preloaded nadvice button
loaddefs faces cus-face macroexp files window text-properties overlay
sha1 md5 base64 format env code-pages mule custom widget
hashtable-print-readable backquote threads dbusbind inotify lcms2
dynamic-setting system-font-setting font-render-setting cairo
move-toolbar gtk x-toolkit x multi-tty make-network-process
native-compile emacs)

Memory information:
((conses 16 1700523 255710)
 (symbols 48 38830 103)
 (strings 32 227548 67913)
 (string-bytes 1 7153152)
 (vectors 16 75900)
 (vector-slots 8 1725779 101458)
 (floats 8 2990 1100)
 (intervals 56 136558 2364)
 (buffers 992 150))

-- 
Matthias

^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: Status: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-10-04 21:05 bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers Matthias Meulien
@ 2021-10-09  0:26 ` Matthias Meulien
  2021-10-09  0:37 ` Matthias Meulien
  2021-10-13 20:30 ` bug#51016: " Matthias Meulien
  2 siblings, 0 replies; 45+ messages in thread
From: Matthias Meulien @ 2021-10-09  0:26 UTC (permalink / raw)
  To: bug#51016

tags 51016 + patch
quit






^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: Status: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-10-04 21:05 bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers Matthias Meulien
  2021-10-09  0:26 ` bug#51016: Status: " Matthias Meulien
@ 2021-10-09  0:37 ` Matthias Meulien
  2021-10-13 20:30 ` bug#51016: " Matthias Meulien
  2 siblings, 0 replies; 45+ messages in thread
From: Matthias Meulien @ 2021-10-09  0:37 UTC (permalink / raw)
  To: bug#51016

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: 0001-Fix-outline-headers-of-prettified-diff-when-using-Gi.patch --]
[-- Type: text/x-diff, Size: 4209 bytes --]

From 8e07d5518ed49eef95e21bd94bc93ce3d79f6962 Mon Sep 17 00:00:00 2001
From: Matthias Meulien <orontee@gmail.com>
Date: Sat, 9 Oct 2021 00:36:11 +0200
Subject: [PATCH] Fix outline headers of prettified diff when using Git
 (bug#51016)

* lisp/vc/diff-mode.el (diff-outline-level): Make hunk headers be at level 2
(diff-mode): Use prettified line as outline header
* lisp/vc/vc.el (vc-diff-internal): Fix diff mode being set before content
inserted
---
 lisp/vc/diff-mode.el | 28 ++++++++++++++++++++--------
 lisp/vc/vc.el        |  5 +++--
 2 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el
index 057ffcd06e..fd4b2b15df 100644
--- a/lisp/vc/diff-mode.el
+++ b/lisp/vc/diff-mode.el
@@ -894,6 +894,10 @@ diff-split-hunk
       ;; Fix the original hunk-header.
       (diff-fixup-modifs start pos))))
 
+(defun diff-outline-level ()
+  (if (string-match-p diff-hunk-header-re (match-string 0))
+      2 1))
+
 
 ;;;;
 ;;;; jump to other buffers
@@ -1494,7 +1498,6 @@ diff-mode
 
   (setq-local font-lock-defaults diff-font-lock-defaults)
   (add-hook 'font-lock-mode-hook #'diff--font-lock-cleanup nil 'local)
-  (setq-local outline-regexp diff-outline-regexp)
   (setq-local imenu-generic-expression
               diff-imenu-generic-expression)
   ;; These are not perfect.  They would be better done separately for
@@ -1543,7 +1546,17 @@ diff-mode
     (setq-local diff-buffer-type
                 (if (re-search-forward "^diff --git" nil t)
                     'git
-                  nil))))
+                  nil)))
+  (when (and (eq diff-buffer-type 'git) diff-font-lock-prettify)
+    (setq diff-outline-regexp
+          (concat
+           "\\("
+           "^diff --git.*\n\\(--- .+\n\\+\\+\\+ \\|\\*\\*\\* .+\n--- \\|[^-+!<>0-9@* \n]\\).+\n"
+           "\\|"
+           diff-hunk-header-re
+           "\\)"))
+    (setq-local outline-level #'diff-outline-level))
+  (setq-local outline-regexp diff-outline-regexp))
 
 ;;;###autoload
 (define-minor-mode diff-minor-mode
@@ -2603,13 +2616,12 @@ diff--font-lock-prettify
                            (or (match-beginning 2) (match-beginning 1))
                            'display (propertize
                                      (cond
-                                      ((null (match-beginning 1)) "new file  ")
-                                      ((null (match-beginning 2)) "deleted   ")
-                                      (t                          "modified  "))
+                                      ((null (match-beginning 1)) (concat "new file  " (match-string 2)))
+                                      ((null (match-beginning 2)) (concat "deleted   " (match-string 1)))
+                                      (t                          (concat "modified  " (match-string 1))))
                                      'face '(diff-file-header diff-header)))
-        (unless (match-beginning 2)
-          (put-text-property (match-end 1) (1- (match-end 0))
-                             'display "")))))
+        (put-text-property (match-end 1) (1- (match-end 0))
+                           'display ""))))
   nil)
 
 ;;; Syntax highlighting from font-lock
diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el
index edc4169465..42b0a1b986 100644
--- a/lisp/vc/vc.el
+++ b/lisp/vc/vc.el
@@ -1793,7 +1793,6 @@ vc-diff-internal
         (setq files (nreverse filtered))))
     (vc-call-backend (car vc-fileset) 'diff files rev1 rev2 buffer async)
     (set-buffer buffer)
-    (diff-mode)
     (setq-local diff-vc-backend (car vc-fileset))
     (setq-local diff-vc-revisions (list rev1 rev2))
     (setq-local revert-buffer-function
@@ -1815,7 +1814,9 @@ vc-diff-internal
       ;; after `pop-to-buffer'; the former assumes the diff buffer is
       ;; shown in some window.
       (let ((buf (current-buffer)))
-        (vc-run-delayed (vc-diff-finish buf (when verbose messages))))
+        (vc-run-delayed (progn
+                          (vc-diff-finish buf (when verbose messages))
+                          (diff-mode))))
       ;; In the async case, we return t even if there are no differences
       ;; because we don't know that yet.
       t)))
-- 
2.30.2






^ permalink raw reply related	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-10-04 21:05 bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers Matthias Meulien
  2021-10-09  0:26 ` bug#51016: Status: " Matthias Meulien
  2021-10-09  0:37 ` Matthias Meulien
@ 2021-10-13 20:30 ` Matthias Meulien
  2021-11-05  2:51   ` Lars Ingebrigtsen
  2 siblings, 1 reply; 45+ messages in thread
From: Matthias Meulien @ 2021-10-13 20:30 UTC (permalink / raw)
  To: 51016

[-- Attachment #1: Type: text/plain, Size: 145 bytes --]

I updated the patch after a week using it. Outlines headers are now
updated for diff comming from Git even when diff-font-lock-prettify is
nil.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Fix-outline-headers-of-diff-buffers-when-using-Git-b.patch --]
[-- Type: text/x-diff, Size: 4104 bytes --]

From 67ef81b503b2529e28fcdca35912bf5c9ce54d8e Mon Sep 17 00:00:00 2001
From: Matthias Meulien <orontee@gmail.com>
Date: Sat, 9 Oct 2021 00:36:11 +0200
Subject: [PATCH] Fix outline headers of diff buffers when using Git
 (bug#51016)

* lisp/vc/diff-mode.el (diff-outline-level): Make hunk headers be at level 2
(diff-mode): Use prettified line as outline header
* lisp/vc/vc.el (vc-diff-internal): Fix diff mode being set before content
inserted
---
 lisp/vc/diff-mode.el | 28 ++++++++++++++++++++--------
 lisp/vc/vc.el        |  5 +++--
 2 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el
index 057ffcd06e..f0a6cb7b15 100644
--- a/lisp/vc/diff-mode.el
+++ b/lisp/vc/diff-mode.el
@@ -894,6 +894,10 @@ diff-split-hunk
       ;; Fix the original hunk-header.
       (diff-fixup-modifs start pos))))
 
+(defun diff-outline-level ()
+  (if (string-match-p diff-hunk-header-re (match-string 0))
+      2 1))
+
 
 ;;;;
 ;;;; jump to other buffers
@@ -1494,7 +1498,6 @@ diff-mode
 
   (setq-local font-lock-defaults diff-font-lock-defaults)
   (add-hook 'font-lock-mode-hook #'diff--font-lock-cleanup nil 'local)
-  (setq-local outline-regexp diff-outline-regexp)
   (setq-local imenu-generic-expression
               diff-imenu-generic-expression)
   ;; These are not perfect.  They would be better done separately for
@@ -1543,7 +1546,17 @@ diff-mode
     (setq-local diff-buffer-type
                 (if (re-search-forward "^diff --git" nil t)
                     'git
-                  nil))))
+                  nil)))
+  (when (eq diff-buffer-type 'git)
+    (setq diff-outline-regexp
+          (concat
+           "\\("
+           "^diff --git.*\n"
+           "\\|"
+           diff-hunk-header-re
+           "\\)"))
+    (setq-local outline-level #'diff-outline-level))
+  (setq-local outline-regexp diff-outline-regexp))
 
 ;;;###autoload
 (define-minor-mode diff-minor-mode
@@ -2603,13 +2616,12 @@ diff--font-lock-prettify
                            (or (match-beginning 2) (match-beginning 1))
                            'display (propertize
                                      (cond
-                                      ((null (match-beginning 1)) "new file  ")
-                                      ((null (match-beginning 2)) "deleted   ")
-                                      (t                          "modified  "))
+                                      ((null (match-beginning 1)) (concat "new file  " (match-string 2)))
+                                      ((null (match-beginning 2)) (concat "deleted   " (match-string 1)))
+                                      (t                          (concat "modified  " (match-string 1))))
                                      'face '(diff-file-header diff-header)))
-        (unless (match-beginning 2)
-          (put-text-property (match-end 1) (1- (match-end 0))
-                             'display "")))))
+        (put-text-property (match-end 1) (1- (match-end 0))
+                           'display ""))))
   nil)
 
 ;;; Syntax highlighting from font-lock
diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el
index 5b259fcdb3..c82110274b 100644
--- a/lisp/vc/vc.el
+++ b/lisp/vc/vc.el
@@ -1793,7 +1793,6 @@ vc-diff-internal
         (setq files (nreverse filtered))))
     (vc-call-backend (car vc-fileset) 'diff files rev1 rev2 buffer async)
     (set-buffer buffer)
-    (diff-mode)
     (setq-local diff-vc-backend (car vc-fileset))
     (setq-local diff-vc-revisions (list rev1 rev2))
     (setq-local revert-buffer-function
@@ -1815,7 +1814,9 @@ vc-diff-internal
       ;; after `pop-to-buffer'; the former assumes the diff buffer is
       ;; shown in some window.
       (let ((buf (current-buffer)))
-        (vc-run-delayed (vc-diff-finish buf (when verbose messages))))
+        (vc-run-delayed (progn
+                          (vc-diff-finish buf (when verbose messages))
+                          (diff-mode))))
       ;; In the async case, we return t even if there are no differences
       ;; because we don't know that yet.
       t)))
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-10-13 20:30 ` bug#51016: " Matthias Meulien
@ 2021-11-05  2:51   ` Lars Ingebrigtsen
  2021-11-06 16:40     ` Juri Linkov
  2021-11-18 18:06     ` Juri Linkov
  0 siblings, 2 replies; 45+ messages in thread
From: Lars Ingebrigtsen @ 2021-11-05  2:51 UTC (permalink / raw)
  To: Matthias Meulien; +Cc: 51016

Matthias Meulien <orontee@gmail.com> writes:

> I updated the patch after a week using it. Outlines headers are now
> updated for diff comming from Git even when diff-font-lock-prettify is
> nil.

Thanks for the patch and the thorough case for reproduction.  I've now
applied it to Emacs 29 (with some trivial changes).

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-11-05  2:51   ` Lars Ingebrigtsen
@ 2021-11-06 16:40     ` Juri Linkov
  2021-11-06 18:30       ` Lars Ingebrigtsen
  2021-11-18 18:06     ` Juri Linkov
  1 sibling, 1 reply; 45+ messages in thread
From: Juri Linkov @ 2021-11-06 16:40 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Matthias Meulien, 51016

>> I updated the patch after a week using it. Outlines headers are now
>> updated for diff comming from Git even when diff-font-lock-prettify is
>> nil.
>
> Thanks for the patch and the thorough case for reproduction.  I've now
> applied it to Emacs 29 (with some trivial changes).

This patch broke vc-diff.  For example, after 'C-x v L' type 'd',
and check that *vc-diff* buffer doesn't have buffer-local variables
diff-vc-backend, diff-vc-revisions anymore, because they were defined
in vc-diff-internal after diff-mode, but now the postponed diff-mode
kills these buffer-local variables:

     (set-buffer buffer)
-    (diff-mode)
     (setq-local diff-vc-backend (car vc-fileset))
     (setq-local diff-vc-revisions (list rev1 rev2))





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-11-06 16:40     ` Juri Linkov
@ 2021-11-06 18:30       ` Lars Ingebrigtsen
  2021-11-08 22:38         ` Matthias Meulien
  0 siblings, 1 reply; 45+ messages in thread
From: Lars Ingebrigtsen @ 2021-11-06 18:30 UTC (permalink / raw)
  To: Juri Linkov; +Cc: Matthias Meulien, 51016

Juri Linkov <juri@linkov.net> writes:

> This patch broke vc-diff.  For example, after 'C-x v L' type 'd',
> and check that *vc-diff* buffer doesn't have buffer-local variables
> diff-vc-backend, diff-vc-revisions anymore, because they were defined
> in vc-diff-internal after diff-mode, but now the postponed diff-mode
> kills these buffer-local variables:
>
>      (set-buffer buffer)
> -    (diff-mode)
>      (setq-local diff-vc-backend (car vc-fileset))
>      (setq-local diff-vc-revisions (list rev1 rev2))

Right.  Matthias -- can this be fixed in a different way that doesn't
postpone changing the major mode?

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-11-06 18:30       ` Lars Ingebrigtsen
@ 2021-11-08 22:38         ` Matthias Meulien
  2021-11-09  3:47           ` Lars Ingebrigtsen
  0 siblings, 1 reply; 45+ messages in thread
From: Matthias Meulien @ 2021-11-08 22:38 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 51016, Juri Linkov

[-- Attachment #1: Type: text/plain, Size: 1269 bytes --]

Lars Ingebrigtsen <larsi@gnus.org> writes:

> Juri Linkov <juri@linkov.net> writes:
>
>> This patch broke vc-diff.  For example, after 'C-x v L' type 'd',
>> and check that *vc-diff* buffer doesn't have buffer-local variables
>> diff-vc-backend, diff-vc-revisions anymore, because they were defined
>> in vc-diff-internal after diff-mode, but now the postponed diff-mode
>> kills these buffer-local variables:
>>
>>      (set-buffer buffer)
>> -    (diff-mode)
>>      (setq-local diff-vc-backend (car vc-fileset))
>>      (setq-local diff-vc-revisions (list rev1 rev2))
>
> Right.  Matthias -- can this be fixed in a different way that doesn't
> postpone changing the major mode?

Thanks Juri!

I moved the call to `diff-mode` since in its implementation one
initialize `diff-buffer-type` by searching:

  (save-excursion
    (setq-local diff-buffer-type
                (if (re-search-forward "^diff --git" nil t)
                    'git
                  nil)))

I suggest to restore the original call to `diff-mode` (before the
asynchronous operation completes) and keep the initialization of
`diff-buffer-type` by searching but make it available to
`vc-diff-finish' which is called when the asynchronous operation
completes.

See the attached patch for details.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Fix-local-variables-overwritten-when-diff-mode-is-se.patch --]
[-- Type: text/x-diff, Size: 3612 bytes --]

From 61d0a96df15f3fe4c44ade01747246b05fed2a48 Mon Sep 17 00:00:00 2001
From: Matthias Meulien <orontee@gmail.com>
Date: Mon, 8 Nov 2021 23:37:33 +0100
Subject: [PATCH] Fix local variables overwritten when diff-mode is set

* lisp/vc/diff-mode.el (diff-mode):
(diff-setup-buffer-type): Defun to initialize `diff-buffer-type'

* lisp/vc/vc.el (vc-diff-finish): Set `diff-buffer-type' after content
inserted
(vc-diff-internal): Restore `diff-mode' being set before local variables
---
 lisp/vc/diff-mode.el | 26 ++++++++++++++++----------
 lisp/vc/vc.el        |  6 +++---
 2 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el
index 746f76b46c..e68aa2257d 100644
--- a/lisp/vc/diff-mode.el
+++ b/lisp/vc/diff-mode.el
@@ -1540,16 +1540,7 @@ diff-mode
                 #'diff--filter-substring)
   (unless buffer-file-name
     (hack-dir-local-variables-non-file-buffer))
-  (save-excursion
-    (setq-local diff-buffer-type
-                (if (re-search-forward "^diff --git" nil t)
-                    'git
-                  nil)))
-  (when (eq diff-buffer-type 'git)
-    (setq diff-outline-regexp
-          (concat "\\(^diff --git.*\n\\|" diff-hunk-header-re "\\)"))
-    (setq-local outline-level #'diff--outline-level))
-  (setq-local outline-regexp diff-outline-regexp))
+  (diff-setup-buffer-type))
 
 ;;;###autoload
 (define-minor-mode diff-minor-mode
@@ -1585,6 +1576,21 @@ diff-setup-whitespace
                     "^[-+!] .*?\\([\t ]+\\)$"
                   "^[-+!<>].*?\\([\t ]+\\)$"))))
 
+(defun diff-setup-buffer-type ()
+  "Try to guess the `diff-buffer-type' from content of current Diff mode buffer.
+`outline-regexp' is updated accordingly."
+  (save-excursion
+    (goto-char (point-min))
+    (setq-local diff-buffer-type
+                (if (re-search-forward "^diff --git" nil t)
+                    'git
+                  nil)))
+  (when (eq diff-buffer-type 'git)
+    (setq diff-outline-regexp
+          (concat "\\(^diff --git.*\n\\|" diff-hunk-header-re "\\)"))
+    (setq-local outline-level #'diff--outline-level))
+  (setq-local outline-regexp diff-outline-regexp))
+
 (defun diff-delete-if-empty ()
   ;; An empty diff file means there's no more diffs to integrate, so we
   ;; can just remove the file altogether.  Very handy for .rej files if we
diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el
index c9500f454a..87137d8ede 100644
--- a/lisp/vc/vc.el
+++ b/lisp/vc/vc.el
@@ -1739,6 +1739,7 @@ vc-diff-finish
 	       (insert (cdr messages) ".\n")
 	       (message "%s" (cdr messages))))
 	(diff-setup-whitespace)
+        (diff-setup-buffer-type)
 	(goto-char (point-min))
 	(when window
 	  (shrink-window-if-larger-than-buffer window)))
@@ -1804,6 +1805,7 @@ vc-diff-internal
         (setq files (nreverse filtered))))
     (vc-call-backend (car vc-fileset) 'diff files rev1 rev2 buffer async)
     (set-buffer buffer)
+    (diff-mode)
     (setq-local diff-vc-backend (car vc-fileset))
     (setq-local diff-vc-revisions (list rev1 rev2))
     (setq-local revert-buffer-function
@@ -1825,9 +1827,7 @@ vc-diff-internal
       ;; after `pop-to-buffer'; the former assumes the diff buffer is
       ;; shown in some window.
       (let ((buf (current-buffer)))
-        (vc-run-delayed (progn
-                          (vc-diff-finish buf (when verbose messages))
-                          (diff-mode))))
+        (vc-run-delayed (vc-diff-finish buf (when verbose messages))))
       ;; In the async case, we return t even if there are no differences
       ;; because we don't know that yet.
       t)))
-- 
2.30.2


[-- Attachment #3: Type: text/plain, Size: 14 bytes --]


-- 
Matthias

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-11-08 22:38         ` Matthias Meulien
@ 2021-11-09  3:47           ` Lars Ingebrigtsen
  2021-11-09  8:19             ` Juri Linkov
  0 siblings, 1 reply; 45+ messages in thread
From: Lars Ingebrigtsen @ 2021-11-09  3:47 UTC (permalink / raw)
  To: Matthias Meulien; +Cc: 51016, Juri Linkov

Matthias Meulien <orontee@gmail.com> writes:

> I suggest to restore the original call to `diff-mode` (before the
> asynchronous operation completes) and keep the initialization of
> `diff-buffer-type` by searching but make it available to
> `vc-diff-finish' which is called when the asynchronous operation
> completes.
>
> See the attached patch for details.

Thanks; this fixes the problem reported by Juri (as far as I can see
after doing some light testing), so I've now pushed the patch to Emacs
29.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-11-09  3:47           ` Lars Ingebrigtsen
@ 2021-11-09  8:19             ` Juri Linkov
  0 siblings, 0 replies; 45+ messages in thread
From: Juri Linkov @ 2021-11-09  8:19 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Matthias Meulien, 51016

>> I suggest to restore the original call to `diff-mode` (before the
>> asynchronous operation completes) and keep the initialization of
>> `diff-buffer-type` by searching but make it available to
>> `vc-diff-finish' which is called when the asynchronous operation
>> completes.
>>
>> See the attached patch for details.
>
> Thanks; this fixes the problem reported by Juri (as far as I can see
> after doing some light testing), so I've now pushed the patch to Emacs
> 29.

I confirm it's fixed (Matthias placed two counterpart functions together:
diff-setup-whitespace and diff-setup-buffer-type in the patch,
so I restored the same in master for readability).





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-11-05  2:51   ` Lars Ingebrigtsen
  2021-11-06 16:40     ` Juri Linkov
@ 2021-11-18 18:06     ` Juri Linkov
  2021-11-19  7:22       ` Lars Ingebrigtsen
  1 sibling, 1 reply; 45+ messages in thread
From: Juri Linkov @ 2021-11-18 18:06 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Matthias Meulien, 51016

>> I updated the patch after a week using it. Outlines headers are now
>> updated for diff comming from Git even when diff-font-lock-prettify is
>> nil.
>
> Thanks for the patch and the thorough case for reproduction.  I've now
> applied it to Emacs 29 (with some trivial changes).

As noticed in bug#51809, outline-cycle is not bound on hunk headings anymore,
only on file headings.  It seems the problem is somewhere here:

    (setq diff-outline-regexp
          (concat "\\(^diff --git.*\n\\|" diff-hunk-header-re "\\)"))

But I don't know why diff-hunk-header-re doesn't match hunk headings
in outline-minor-mode.





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-11-18 18:06     ` Juri Linkov
@ 2021-11-19  7:22       ` Lars Ingebrigtsen
  2021-11-19  8:31         ` Juri Linkov
  0 siblings, 1 reply; 45+ messages in thread
From: Lars Ingebrigtsen @ 2021-11-19  7:22 UTC (permalink / raw)
  To: Juri Linkov; +Cc: Matthias Meulien, 51016

Juri Linkov <juri@linkov.net> writes:

> As noticed in bug#51809, outline-cycle is not bound on hunk headings anymore,
> only on file headings.  It seems the problem is somewhere here:
>
>     (setq diff-outline-regexp
>           (concat "\\(^diff --git.*\n\\|" diff-hunk-header-re "\\)"))
>
> But I don't know why diff-hunk-header-re doesn't match hunk headings
> in outline-minor-mode.

Hm...  I just tried switching outline-minor-mode on and
(re-search-forward diff-hunk-header-re), and it seemed to work as
expected?

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-11-19  7:22       ` Lars Ingebrigtsen
@ 2021-11-19  8:31         ` Juri Linkov
  2021-11-20  8:37           ` Lars Ingebrigtsen
  0 siblings, 1 reply; 45+ messages in thread
From: Juri Linkov @ 2021-11-19  8:31 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Matthias Meulien, 51016

> Juri Linkov <juri@linkov.net> writes:
>
>> As noticed in bug#51809, outline-cycle is not bound on hunk headings anymore,
>> only on file headings.  It seems the problem is somewhere here:
>>
>>     (setq diff-outline-regexp
>>           (concat "\\(^diff --git.*\n\\|" diff-hunk-header-re "\\)"))
>>
>> But I don't know why diff-hunk-header-re doesn't match hunk headings
>> in outline-minor-mode.
>
> Hm...  I just tried switching outline-minor-mode on and
> (re-search-forward diff-hunk-header-re), and it seemed to work as
> expected?

Yep, I already tried `(re-search-forward diff-hunk-header-re)' too,
and it works.  But still typing TAB on the hunk heading
with outline-minor-mode-cycle=t does nothing, whereas typing TAB
on the file heading correctly cycles the file diff.





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-11-19  8:31         ` Juri Linkov
@ 2021-11-20  8:37           ` Lars Ingebrigtsen
  2021-11-20 19:17             ` Juri Linkov
  0 siblings, 1 reply; 45+ messages in thread
From: Lars Ingebrigtsen @ 2021-11-20  8:37 UTC (permalink / raw)
  To: Juri Linkov; +Cc: Matthias Meulien, 51016

Juri Linkov <juri@linkov.net> writes:

> Yep, I already tried `(re-search-forward diff-hunk-header-re)' too,
> and it works.  But still typing TAB on the hunk heading
> with outline-minor-mode-cycle=t does nothing, whereas typing TAB
> on the file heading correctly cycles the file diff.

Oh yeah, now I'm seeing the problem.  I don't really use outline mode
daily, so I'm not sure how it's supposed to work, but -- TAB in these
buffers are bound to diff-hunk-next, and as far as I can tell, outline
mode has just placed a keymap property on the file headings, not the
hunk headings.

Or is that the actual bug here?  😀  I should probably have read the
entire thread before getting involved.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-11-20  8:37           ` Lars Ingebrigtsen
@ 2021-11-20 19:17             ` Juri Linkov
  2021-11-21 17:02               ` Lars Ingebrigtsen
  0 siblings, 1 reply; 45+ messages in thread
From: Juri Linkov @ 2021-11-20 19:17 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Matthias Meulien, 51016

>> Yep, I already tried `(re-search-forward diff-hunk-header-re)' too,
>> and it works.  But still typing TAB on the hunk heading
>> with outline-minor-mode-cycle=t does nothing, whereas typing TAB
>> on the file heading correctly cycles the file diff.
>
> Oh yeah, now I'm seeing the problem.  I don't really use outline mode
> daily, so I'm not sure how it's supposed to work, but -- TAB in these
> buffers are bound to diff-hunk-next, and as far as I can tell, outline
> mode has just placed a keymap property on the file headings, not the
> hunk headings.
>
> Or is that the actual bug here?  😀  I should probably have read the
> entire thread before getting involved.

Actually, ‘outline-font-lock-keywords’ extends the outline regexp
to (concat "^\\(?:" outline-regexp "\\).+").  And indeed,

  (re-search-forward (concat "^\\(?:" diff-hunk-header-re "\\).+"))

fails in diff buffers.  Don't ask me why outline.el adds ".+"
at the end, I don't know 🤐  To circumvent this idiosyncrasy
for headings in ‘describe-bindings’, I had to use a different regexp
in ‘outline-minor-mode-highlight-buffer’ (not based on font-lock):

  (concat "^\\(?:" outline-regexp "\\).*$")))

where ".+" is replaced with less-strict ".*".





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-11-20 19:17             ` Juri Linkov
@ 2021-11-21 17:02               ` Lars Ingebrigtsen
  2021-11-21 17:26                 ` Matthias Meulien
  2021-11-21 17:49                 ` Juri Linkov
  0 siblings, 2 replies; 45+ messages in thread
From: Lars Ingebrigtsen @ 2021-11-21 17:02 UTC (permalink / raw)
  To: Juri Linkov; +Cc: Matthias Meulien, 51016

Juri Linkov <juri@linkov.net> writes:

> Actually, ‘outline-font-lock-keywords’ extends the outline regexp
> to (concat "^\\(?:" outline-regexp "\\).+").  And indeed,
>
>   (re-search-forward (concat "^\\(?:" diff-hunk-header-re "\\).+"))
>
> fails in diff buffers.  Don't ask me why outline.el adds ".+"
> at the end, I don't know 🤐

That is quite odd, but it's been that way since 2003?  The doc string
says

---
Regular expression to match the beginning of a heading.
Any line whose beginning matches this regexp is considered to start a heading.
---

So it's specifying "the beginning", which could imply that there's
always supposed to be something after it, but it's an odd limitation.

> To circumvent this idiosyncrasy for headings in ‘describe-bindings’, I
> had to use a different regexp in ‘outline-minor-mode-highlight-buffer’
> (not based on font-lock):
>
>   (concat "^\\(?:" outline-regexp "\\).*$")))
>
> where ".+" is replaced with less-strict ".*".

And diff-hunk-header-re definitely specifies an entire line.

Perhaps we could just change the .+ thing to .* and see whether it
breaks anything?

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-11-21 17:02               ` Lars Ingebrigtsen
@ 2021-11-21 17:26                 ` Matthias Meulien
  2021-11-21 17:41                   ` Juri Linkov
  2021-11-21 17:49                 ` Juri Linkov
  1 sibling, 1 reply; 45+ messages in thread
From: Matthias Meulien @ 2021-11-21 17:26 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 51016, Juri Linkov

Lars Ingebrigtsen <larsi@gnus.org> writes:

> Perhaps we could just change the .+ thing to .* and see whether it
> breaks anything?

Good point.

But am I missing something or commit f0768d3145 didn't change
`diff-hunk-header-re' matching an entire line? I thus don't understand
why Juri is seing a regression w.r. to cycling after that commit has
been installed. Note that I've not been able to reproduce the "working"
behavior described by Juri after reverting that commit.

Juri can you confirm there's a relation between cycling not working and
that commit? Otherwise should we open another bug?
-- 
Matthias





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-11-21 17:26                 ` Matthias Meulien
@ 2021-11-21 17:41                   ` Juri Linkov
  2021-11-21 17:54                     ` Matthias Meulien
  0 siblings, 1 reply; 45+ messages in thread
From: Juri Linkov @ 2021-11-21 17:41 UTC (permalink / raw)
  To: Matthias Meulien; +Cc: Lars Ingebrigtsen, 51016

>> Perhaps we could just change the .+ thing to .* and see whether it
>> breaks anything?
>
> Good point.
>
> But am I missing something or commit f0768d3145 didn't change
> `diff-hunk-header-re' matching an entire line? I thus don't understand
> why Juri is seing a regression w.r. to cycling after that commit has
> been installed. Note that I've not been able to reproduce the "working"
> behavior described by Juri after reverting that commit.
>
> Juri can you confirm there's a relation between cycling not working and
> that commit? Otherwise should we open another bug?

I confirm there is a relation because the commit f0768d3145

  +  (when (eq diff-buffer-type 'git)
  +    (setq diff-outline-regexp
  +          (concat "\\(^diff --git.*\n\\|" diff-hunk-header-re "\\)"))
  +    (setq-local outline-level #'diff--outline-level))
  +  (setq-local outline-regexp diff-outline-regexp))

changed diff-outline-regexp to contain diff-hunk-header-re that matches an entire line.
This commit replaced the default value of diff-outline-regexp that is

  (defvar diff-outline-regexp
    "\\([*+][*+][*+] [^0-9]\\|@@ ...\\|\\*\\*\\* [0-9].\\|--- [0-9]..\\)")

that didn't match entire lines.

However, changing the .+ thing to .* in outline-font-lock-keywords
fixes this problem.  So we need to decide whether to try to remove
entire line mathing from diff-hunk-header-re (not sure how easy to do),
or just change .+ to .* in outline-font-lock-keywords.





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-11-21 17:02               ` Lars Ingebrigtsen
  2021-11-21 17:26                 ` Matthias Meulien
@ 2021-11-21 17:49                 ` Juri Linkov
  1 sibling, 0 replies; 45+ messages in thread
From: Juri Linkov @ 2021-11-21 17:49 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Matthias Meulien, 51016

>> To circumvent this idiosyncrasy for headings in ‘describe-bindings’, I
>> had to use a different regexp in ‘outline-minor-mode-highlight-buffer’
>> (not based on font-lock):
>>
>>   (concat "^\\(?:" outline-regexp "\\).*$")))
>>
>> where ".+" is replaced with less-strict ".*".
>
> And diff-hunk-header-re definitely specifies an entire line.
>
> Perhaps we could just change the .+ thing to .* and see whether it
> breaks anything?

This looks like the right thing to do.  And this regexp in outline-mode

  (setq-local imenu-generic-expression
	      (list (list nil (concat "^\\(?:" outline-regexp "\\).*$") 0)))

also uses .* instead of .+, probably because .+ caused a problem in imenu.





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-11-21 17:41                   ` Juri Linkov
@ 2021-11-21 17:54                     ` Matthias Meulien
  2021-11-22 22:11                       ` Matthias Meulien
  0 siblings, 1 reply; 45+ messages in thread
From: Matthias Meulien @ 2021-11-21 17:54 UTC (permalink / raw)
  To: Juri Linkov; +Cc: Lars Ingebrigtsen, 51016

Juri Linkov <juri@linkov.net> writes:

> I confirm there is a relation because the commit f0768d3145

Oh you're right. Sorry.

> However, changing the .+ thing to .* in outline-font-lock-keywords
> fixes this problem.  So we need to decide whether to try to remove
> entire line mathing from diff-hunk-header-re (not sure how easy to
> do),

I'll have a look.
-- 
Matthias





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-11-21 17:54                     ` Matthias Meulien
@ 2021-11-22 22:11                       ` Matthias Meulien
  2021-11-22 23:03                         ` Matthias Meulien
  0 siblings, 1 reply; 45+ messages in thread
From: Matthias Meulien @ 2021-11-22 22:11 UTC (permalink / raw)
  To: Juri Linkov; +Cc: Lars Ingebrigtsen, 51016

[-- Attachment #1: Type: text/plain, Size: 612 bytes --]

Matthias Meulien <orontee@gmail.com> writes:

> Juri Linkov <juri@linkov.net> writes:
>
>> I confirm there is a relation because the commit f0768d3145
>
> Oh you're right. Sorry.
>
>> However, changing the .+ thing to .* in outline-font-lock-keywords
>> fixes this problem.  So we need to decide whether to try to remove
>> entire line mathing from diff-hunk-header-re (not sure how easy to
>> do),

I just skipped last character of `diff-hunk-header-re' (the culprit `$')
when building `diff-outline-regexp'; Cycling is restored when on hunk
headers. Looks safe to me since `diff-hunk-header-re' is unchanged.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Fix-broken-outline-minor-mode-cycling-in-diff-buffer.patch --]
[-- Type: text/x-diff, Size: 979 bytes --]

From cf4ccd97e6d6e82faee5b01224c5a3caa8908cc1 Mon Sep 17 00:00:00 2001
From: Matthias Meulien <orontee@gmail.com>
Date: Mon, 22 Nov 2021 23:06:06 +0100
Subject: [PATCH] Fix broken outline minor mode cycling in diff buffers

* lisp/vc/diff-mode.el (diff-setup-buffer-type): Fix outline regexp
matching whole line
---
 lisp/vc/diff-mode.el | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el
index 8f83aa580e..eeda503afb 100644
--- a/lisp/vc/diff-mode.el
+++ b/lisp/vc/diff-mode.el
@@ -1588,7 +1588,8 @@ diff-setup-buffer-type
                   nil)))
   (when (eq diff-buffer-type 'git)
     (setq diff-outline-regexp
-          (concat "\\(^diff --git.*\n\\|" diff-hunk-header-re "\\)"))
+          (concat "\\(^diff --git.*\n\\|"
+                  (substring diff-hunk-header-re 0 -1) "\\)"))
     (setq-local outline-level #'diff--outline-level))
   (setq-local outline-regexp diff-outline-regexp))
 
-- 
2.30.2


[-- Attachment #3: Type: text/plain, Size: 14 bytes --]


-- 
Matthias

^ permalink raw reply related	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-11-22 22:11                       ` Matthias Meulien
@ 2021-11-22 23:03                         ` Matthias Meulien
  2021-11-24  6:54                           ` Lars Ingebrigtsen
  0 siblings, 1 reply; 45+ messages in thread
From: Matthias Meulien @ 2021-11-22 23:03 UTC (permalink / raw)
  To: Juri Linkov; +Cc: Lars Ingebrigtsen, 51016

Matthias Meulien <orontee@gmail.com> writes:

>> Juri Linkov <juri@linkov.net> writes:
>>
>>> I confirm there is a relation because the commit f0768d3145
>>
>> Oh you're right. Sorry.
>>
>>> However, changing the .+ thing to .* in outline-font-lock-keywords
>>> fixes this problem.  So we need to decide whether to try to remove
>>> entire line mathing from diff-hunk-header-re (not sure how easy to
>>> do),
>
> I just skipped last character of `diff-hunk-header-re' (the culprit `$')
> when building `diff-outline-regexp'; Cycling is restored when on hunk
> headers. Looks safe to me since `diff-hunk-header-re' is unchanged.

Ok, it works on hunks with "context information" like

   @@ -147,6 +160,61 @@ diff-font-lock-syntax

But it's still broken when there's no "context information" like

   @@ -50,6 +50,7 @@

which argues for your second suggestion, changing
`outline-font-lock-keywords'.
-- 
Matthias





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-11-22 23:03                         ` Matthias Meulien
@ 2021-11-24  6:54                           ` Lars Ingebrigtsen
  2021-11-24 18:48                             ` Juri Linkov
  0 siblings, 1 reply; 45+ messages in thread
From: Lars Ingebrigtsen @ 2021-11-24  6:54 UTC (permalink / raw)
  To: Matthias Meulien; +Cc: 51016, Juri Linkov

Matthias Meulien <orontee@gmail.com> writes:

> But it's still broken when there's no "context information" like
>
>    @@ -50,6 +50,7 @@
>
> which argues for your second suggestion, changing
> `outline-font-lock-keywords'.

Yup.  Juri, please go ahead and make the change -- it seems like the
correct fix ere.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-11-24  6:54                           ` Lars Ingebrigtsen
@ 2021-11-24 18:48                             ` Juri Linkov
  2021-12-15 17:08                               ` Juri Linkov
  0 siblings, 1 reply; 45+ messages in thread
From: Juri Linkov @ 2021-11-24 18:48 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Matthias Meulien, 51016

>> But it's still broken when there's no "context information" like
>>
>>    @@ -50,6 +50,7 @@
>>
>> which argues for your second suggestion, changing
>> `outline-font-lock-keywords'.
>
> Yup.  Juri, please go ahead and make the change -- it seems like the
> correct fix ere.

So now pushed to master.





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-11-24 18:48                             ` Juri Linkov
@ 2021-12-15 17:08                               ` Juri Linkov
  2021-12-16  5:50                                 ` Lars Ingebrigtsen
  0 siblings, 1 reply; 45+ messages in thread
From: Juri Linkov @ 2021-12-15 17:08 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 51016, Matthias Meulien

[-- Attachment #1: Type: text/plain, Size: 780 bytes --]

>>> which argues for your second suggestion, changing
>>> `outline-font-lock-keywords'.
>>
>> Yup.  Juri, please go ahead and make the change -- it seems like the
>> correct fix ere.
>
> So now pushed to master.

This change has such effect that now page delimiters are highlighted
as well.  For an unknown reason, the default value of outline-regexp
includes the page delimiter ^L: "[*^L]+".  So now outline-font-lock-keywords
fontifies them too with the `outline-1' face.  But this highlighting
is not visible, because by default it's overridden by the hardcoded face
`escape-glyph' on ^L.

This begs the question: why outline-regexp includes ‘^L’?
With it the collapsed outlines take twice more space with empty lines,
and without it the outline overview is more compact:


[-- Attachment #2: outline_NEWS.png --]
[-- Type: image/png, Size: 52029 bytes --]

^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-12-15 17:08                               ` Juri Linkov
@ 2021-12-16  5:50                                 ` Lars Ingebrigtsen
  2021-12-16 17:22                                   ` Juri Linkov
  2021-12-17  4:25                                   ` Richard Stallman
  0 siblings, 2 replies; 45+ messages in thread
From: Lars Ingebrigtsen @ 2021-12-16  5:50 UTC (permalink / raw)
  To: Juri Linkov; +Cc: 51016, Matthias Meulien

Juri Linkov <juri@linkov.net> writes:

> This begs the question: why outline-regexp includes ‘^L’?

Yes, I wondered about that, too.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-12-16  5:50                                 ` Lars Ingebrigtsen
@ 2021-12-16 17:22                                   ` Juri Linkov
  2021-12-16 17:48                                     ` Eli Zaretskii
  2021-12-17  4:25                                   ` Richard Stallman
  1 sibling, 1 reply; 45+ messages in thread
From: Juri Linkov @ 2021-12-16 17:22 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 51016, Matthias Meulien

>> This begs the question: why outline-regexp includes ‘^L’?
>
> Yes, I wondered about that, too.

I guess no one will notice the absence of ^L because
the default outline-regexp used by everyone in org-mode is
"\\*+ "

diff --git a/lisp/outline.el b/lisp/outline.el
index 5e3d4e0e00..603795cfd3 100644
--- a/lisp/outline.el
+++ b/lisp/outline.el
@@ -42,7 +42,7 @@ outlines
   :prefix "outline-"
   :group 'text)
 
-(defvar outline-regexp "[*\^L]+"
+(defvar outline-regexp "[*]+"
   "Regular expression to match the beginning of a heading.
 Any line whose beginning matches this regexp is considered to start a heading.
 Note that Outline mode only checks this regexp at the start of a line,
-- 





^ permalink raw reply related	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-12-16 17:22                                   ` Juri Linkov
@ 2021-12-16 17:48                                     ` Eli Zaretskii
  2021-12-16 19:04                                       ` Juri Linkov
  0 siblings, 1 reply; 45+ messages in thread
From: Eli Zaretskii @ 2021-12-16 17:48 UTC (permalink / raw)
  To: Juri Linkov; +Cc: 51016, larsi, orontee

> From: Juri Linkov <juri@linkov.net>
> Date: Thu, 16 Dec 2021 19:22:28 +0200
> Cc: 51016@debbugs.gnu.org, Matthias Meulien <orontee@gmail.com>
> 
> >> This begs the question: why outline-regexp includes ‘^L’?
> >
> > Yes, I wondered about that, too.
> 
> I guess no one will notice the absence of ^L because
> the default outline-regexp used by everyone in org-mode is
> "\\*+ "

Why are you talking about Org, when the proposed change is in
outline.el?

Please don't change the behavior of outline.el in
backward-incompatible ways.  This is used for NEWS and similar files,
and those do have ^L separators in them.





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-12-16 17:48                                     ` Eli Zaretskii
@ 2021-12-16 19:04                                       ` Juri Linkov
  2021-12-16 20:06                                         ` Eli Zaretskii
  0 siblings, 1 reply; 45+ messages in thread
From: Juri Linkov @ 2021-12-16 19:04 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 51016, larsi, orontee

>> >> This begs the question: why outline-regexp includes ‘^L’?
>> >
>> > Yes, I wondered about that, too.
>>
>> I guess no one will notice the absence of ^L because
>> the default outline-regexp used by everyone in org-mode is
>> "\\*+ "
>
> Why are you talking about Org, when the proposed change is in
> outline.el?

Because most people use Org that has more reasonable defaults.

> Please don't change the behavior of outline.el in
> backward-incompatible ways.  This is used for NEWS and similar files,
> and those do have ^L separators in them.

The proposed change is to improve NEWS and similar files to make
their views more compact by fitting more lines on the screen.





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-12-16 19:04                                       ` Juri Linkov
@ 2021-12-16 20:06                                         ` Eli Zaretskii
  2021-12-16 21:02                                           ` Kévin Le Gouguec
  0 siblings, 1 reply; 45+ messages in thread
From: Eli Zaretskii @ 2021-12-16 20:06 UTC (permalink / raw)
  To: Juri Linkov; +Cc: 51016, larsi, orontee

> From: Juri Linkov <juri@linkov.net>
> Cc: larsi@gnus.org,  51016@debbugs.gnu.org,  orontee@gmail.com
> Date: Thu, 16 Dec 2021 21:04:37 +0200
> 
> > Why are you talking about Org, when the proposed change is in
> > outline.el?
> 
> Because most people use Org that has more reasonable defaults.

You are free to use Org if that fits your workflows better.  That
doesn't mean we need to ignore users of Outline that don't use Org.

> > Please don't change the behavior of outline.el in
> > backward-incompatible ways.  This is used for NEWS and similar files,
> > and those do have ^L separators in them.
> 
> The proposed change is to improve NEWS and similar files to make
> their views more compact by fitting more lines on the screen.

What does this have to do with removing support for ^L?





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-12-16 20:06                                         ` Eli Zaretskii
@ 2021-12-16 21:02                                           ` Kévin Le Gouguec
  2021-12-17  6:36                                             ` Eli Zaretskii
  0 siblings, 1 reply; 45+ messages in thread
From: Kévin Le Gouguec @ 2021-12-16 21:02 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 51016, larsi, orontee, Juri Linkov

Eli Zaretskii <eliz@gnu.org> writes:

>> > Please don't change the behavior of outline.el in
>> > backward-incompatible ways.  This is used for NEWS and similar files,
>> > and those do have ^L separators in them.
>> 
>> The proposed change is to improve NEWS and similar files to make
>> their views more compact by fitting more lines on the screen.
>
> What does this have to do with removing support for ^L?

See this screenshot from one of Juri's previous messages:
(<86lf0l23u1.fsf@mail.linkov.net>)

https://debbugs.gnu.org/cgi/bugreport.cgi?bug=51016;msg=81;att=1;filename=outline_NEWS.png

On the left is NEWS with the default value of outline-regexp, on the
right with ^L taken out.  FWIW I agree that the latter is easier on the
eyes.





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-12-16  5:50                                 ` Lars Ingebrigtsen
  2021-12-16 17:22                                   ` Juri Linkov
@ 2021-12-17  4:25                                   ` Richard Stallman
  1 sibling, 0 replies; 45+ messages in thread
From: Richard Stallman @ 2021-12-17  4:25 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 51016, orontee, juri

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > > This begs the question: why outline-regexp includes ‘^L’?

  > Yes, I wondered about that, too.

^L at the beginning of a line separates pages.
I don't know exactly what that regexp is for, but that is
probably why ^L appears.

-- 
Dr Richard Stallman (https://stallman.org)
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)







^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-12-16 21:02                                           ` Kévin Le Gouguec
@ 2021-12-17  6:36                                             ` Eli Zaretskii
  2021-12-17  7:07                                               ` Kévin Le Gouguec
  0 siblings, 1 reply; 45+ messages in thread
From: Eli Zaretskii @ 2021-12-17  6:36 UTC (permalink / raw)
  To: Kévin Le Gouguec; +Cc: 51016, larsi, orontee, juri

> From: Kévin Le Gouguec <kevin.legouguec@gmail.com>
> Cc: Juri Linkov <juri@linkov.net>,  51016@debbugs.gnu.org,  larsi@gnus.org,
>   orontee@gmail.com
> Date: Thu, 16 Dec 2021 22:02:05 +0100
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >> The proposed change is to improve NEWS and similar files to make
> >> their views more compact by fitting more lines on the screen.
> >
> > What does this have to do with removing support for ^L?
> 
> See this screenshot from one of Juri's previous messages:
> (<86lf0l23u1.fsf@mail.linkov.net>)
> 
> https://debbugs.gnu.org/cgi/bugreport.cgi?bug=51016;msg=81;att=1;filename=outline_NEWS.png
> 
> On the left is NEWS with the default value of outline-regexp, on the
> right with ^L taken out.  FWIW I agree that the latter is easier on the
> eyes.

And I disagree.  The ^L separators are there for a reason, and even in
the image they do their job.






^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-12-17  6:36                                             ` Eli Zaretskii
@ 2021-12-17  7:07                                               ` Kévin Le Gouguec
  2021-12-17  7:55                                                 ` Eli Zaretskii
  0 siblings, 1 reply; 45+ messages in thread
From: Kévin Le Gouguec @ 2021-12-17  7:07 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 51016, larsi, orontee, juri

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Kévin Le Gouguec <kevin.legouguec@gmail.com>
>> Cc: Juri Linkov <juri@linkov.net>,  51016@debbugs.gnu.org,  larsi@gnus.org,
>>   orontee@gmail.com
>> Date: Thu, 16 Dec 2021 22:02:05 +0100
>> 
>> Eli Zaretskii <eliz@gnu.org> writes:
>> 
>> >> The proposed change is to improve NEWS and similar files to make
>> >> their views more compact by fitting more lines on the screen.
>> >
>> > What does this have to do with removing support for ^L?
>> 
>> See this screenshot from one of Juri's previous messages:
>> (<86lf0l23u1.fsf@mail.linkov.net>)
>> 
>> https://debbugs.gnu.org/cgi/bugreport.cgi?bug=51016;msg=81;att=1;filename=outline_NEWS.png
>> 
>> On the left is NEWS with the default value of outline-regexp, on the
>> right with ^L taken out.  FWIW I agree that the latter is easier on the
>> eyes.
>
> And I disagree.  The ^L separators are there for a reason, and even in
> the image they do their job.

I'd agree if

(1) Emacs used some display tricks to make the ^L separators look more
    like actual separators (e.g. a full-width horizontal line, as is
    done in C-h o; the page-break-lines package on MELPA tries to make
    FORM FEEDs look a bit like that),

(2) outline-mode treated them as purely visual separators, and not as
    actual section headings reachable with navigation keys.

As things stand, (1) the separators look noisy to me, sort of like stray
control characters, (2) outline-forward-same-level will pause on them
instead of skipping over them and jumping to the next, "actual" heading
(i.e. a heading with actual subsections to show/hide).

It's clear that (1) is purely a visual preference; IMO (2) hints that
outline-regexp conflates characters that are used to define the heading
hierarchy (*) with characters that are used to delimit top-level
sections (^L).





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-12-17  7:07                                               ` Kévin Le Gouguec
@ 2021-12-17  7:55                                                 ` Eli Zaretskii
  2021-12-17 21:27                                                   ` Kévin Le Gouguec
  0 siblings, 1 reply; 45+ messages in thread
From: Eli Zaretskii @ 2021-12-17  7:55 UTC (permalink / raw)
  To: Kévin Le Gouguec; +Cc: 51016, larsi, orontee, juri

> From: Kévin Le Gouguec <kevin.legouguec@gmail.com>
> Cc: 51016@debbugs.gnu.org,  larsi@gnus.org,  orontee@gmail.com,
>   juri@linkov.net
> Date: Fri, 17 Dec 2021 08:07:58 +0100
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >> https://debbugs.gnu.org/cgi/bugreport.cgi?bug=51016;msg=81;att=1;filename=outline_NEWS.png
> >> 
> >> On the left is NEWS with the default value of outline-regexp, on the
> >> right with ^L taken out.  FWIW I agree that the latter is easier on the
> >> eyes.
> >
> > And I disagree.  The ^L separators are there for a reason, and even in
> > the image they do their job.
> 
> I'd agree if
> 
> (1) Emacs used some display tricks to make the ^L separators look more
>     like actual separators (e.g. a full-width horizontal line, as is
>     done in C-h o; the page-break-lines package on MELPA tries to make
>     FORM FEEDs look a bit like that),
> 
> (2) outline-mode treated them as purely visual separators, and not as
>     actual section headings reachable with navigation keys.
> 
> As things stand, (1) the separators look noisy to me, sort of like stray
> control characters, (2) outline-forward-same-level will pause on them
> instead of skipping over them and jumping to the next, "actual" heading
> (i.e. a heading with actual subsections to show/hide).
> 
> It's clear that (1) is purely a visual preference; IMO (2) hints that
> outline-regexp conflates characters that are used to define the heading
> hierarchy (*) with characters that are used to delimit top-level
> sections (^L).

I have nothing against enhancing Outline mode to display ^L as we did
in "C-h o", provided that will be an optional feature.  But please
don't argue for _unconditional_ backward-incompatible changes in how
Outline buffers look and behave, for purely subjective aesthetic
reasons, and on top of that for hard-wiring such changes in defvar's.
That is as un-Emacsy as it gets, and frankly I'm surprised something
like that is even being put on the table.





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-12-17  7:55                                                 ` Eli Zaretskii
@ 2021-12-17 21:27                                                   ` Kévin Le Gouguec
  2021-12-18  6:23                                                     ` Eli Zaretskii
  0 siblings, 1 reply; 45+ messages in thread
From: Kévin Le Gouguec @ 2021-12-17 21:27 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 51016, larsi, orontee, juri

Eli Zaretskii <eliz@gnu.org> writes:

>> > And I disagree.  The ^L separators are there for a reason, and even in
>> > the image they do their job.
>> 
>> I'd agree if
>> 
>> (1) Emacs used some display tricks to make the ^L separators look more
>>     like actual separators (e.g. a full-width horizontal line, as is
>>     done in C-h o; the page-break-lines package on MELPA tries to make
>>     FORM FEEDs look a bit like that),
>> 
>> (2) outline-mode treated them as purely visual separators, and not as
>>     actual section headings reachable with navigation keys.
>> 
>> As things stand, (1) the separators look noisy to me, sort of like stray
>> control characters, (2) outline-forward-same-level will pause on them
>> instead of skipping over them and jumping to the next, "actual" heading
>> (i.e. a heading with actual subsections to show/hide).
>> 
>> It's clear that (1) is purely a visual preference; IMO (2) hints that
>> outline-regexp conflates characters that are used to define the heading
>> hierarchy (*) with characters that are used to delimit top-level
>> sections (^L).
>
> I have nothing against enhancing Outline mode to display ^L as we did
> in "C-h o", provided that will be an optional feature.

Right, that covers issue (1); do you have an opinion on issue (2)?
Namely, that ^L being part of outline-regexp causes navigation commands
(e.g. outline-forward-same-level) to treat them the same as top-level
headings?

>                                                         But please
> don't argue for _unconditional_ backward-incompatible changes in how
> Outline buffers look and behave, for purely subjective aesthetic
> reasons, and on top of that for hard-wiring such changes in defvar's.
> That is as un-Emacsy as it gets, and frankly I'm surprised something
> like that is even being put on the table.

FWIW, I don't think issue (2) pertains to aesthetics.  And the behaviour
change I can see (C-c C-f skipping over form feeds) looks like a net
positive.

(Also FWIW, I'm not surprised such radical-sounding changes are
surfacing today; given how often outline-mode has made the headlines
(heh) in NEWS, my impression is that there's been a recent renewal of
interest in this mode which had not seen much love for the past… however
long it's been since it has been introduced[1].

One interpretation is that outline-mode is feature-complete and its
defaults should not be questioned; another interpretation is that
innovation happened elsewhere, and with the benefits of hindsight, some
people are now trying to tune the venerable outline(-minor)-mode to make
it more ergonomic)


[1] Starting from…

$ grep -c '^\*\+ .*outlin' etc/NEWS* | sort -r -k2 -t:

… and checking the results, AFAICT Emacs 28 comes on top, then Emacs 29,
then 20 and 21, and then… basically nothing (except some false positives
in 26 and 24).





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-12-17 21:27                                                   ` Kévin Le Gouguec
@ 2021-12-18  6:23                                                     ` Eli Zaretskii
  2021-12-18  9:18                                                       ` Kévin Le Gouguec
  0 siblings, 1 reply; 45+ messages in thread
From: Eli Zaretskii @ 2021-12-18  6:23 UTC (permalink / raw)
  To: Kévin Le Gouguec; +Cc: 51016, larsi, orontee, juri

> From: Kévin Le Gouguec <kevin.legouguec@gmail.com>
> Cc: 51016@debbugs.gnu.org,  larsi@gnus.org,  orontee@gmail.com,
>   juri@linkov.net
> Date: Fri, 17 Dec 2021 22:27:59 +0100
> 
> Right, that covers issue (1); do you have an opinion on issue (2)?

It shouldn't be changed by default and unconditionally, IMO.

> (Also FWIW, I'm not surprised such radical-sounding changes are
> surfacing today; given how often outline-mode has made the headlines
> (heh) in NEWS, my impression is that there's been a recent renewal of
> interest in this mode which had not seen much love for the past… however
> long it's been since it has been introduced[1].

From my POV, there's too much of a tendency to convert Outline to be
Org, and that I cannot support.  People who want to use Org should
just use it; there's no reason to make Outline do the same.





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-12-18  6:23                                                     ` Eli Zaretskii
@ 2021-12-18  9:18                                                       ` Kévin Le Gouguec
  2021-12-18 17:05                                                         ` Juri Linkov
  0 siblings, 1 reply; 45+ messages in thread
From: Kévin Le Gouguec @ 2021-12-18  9:18 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 51016, larsi, orontee, juri

Eli Zaretskii <eliz@gnu.org> writes:

>> (Also FWIW, I'm not surprised such radical-sounding changes are
>> surfacing today; given how often outline-mode has made the headlines
>> (heh) in NEWS, my impression is that there's been a recent renewal of
>> interest in this mode which had not seen much love for the past… however
>> long it's been since it has been introduced[1].
>
> From my POV, there's too much of a tendency to convert Outline to be
> Org, and that I cannot support.  People who want to use Org should
> just use it; there's no reason to make Outline do the same.

"Org" is a lot of different things, most of them thoroughly unrelated to
outlining that have no business being integrated into outline-mode, so
thanks for keeping an eye on that tendency.

Personally, as an outline(-minor)-mode user, I'm still very happy that
core Emacs developers are attempting to "sideport" the small set of Org
features that pertains to outlining, e.g. TAB-cycling.  That instantly
enhances all major modes with support for outline-minor-mode, so these
are powerful quality-of-life improvements as far as I am concerned.

Whether these features should be enabled by default is a judgment call,
of course.  As a user, I still consider that Emacs tripping over form
feeds when I ask it to go to the next heading is a plain bug, but I
acknowledge that YMMV 🙃





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-12-18  9:18                                                       ` Kévin Le Gouguec
@ 2021-12-18 17:05                                                         ` Juri Linkov
  2021-12-18 17:52                                                           ` Eli Zaretskii
  0 siblings, 1 reply; 45+ messages in thread
From: Juri Linkov @ 2021-12-18 17:05 UTC (permalink / raw)
  To: Kévin Le Gouguec; +Cc: 51016, orontee, larsi

[-- Attachment #1: Type: text/plain, Size: 274 bytes --]

> As a user, I still consider that Emacs tripping over form feeds
> when I ask it to go to the next heading is a plain bug

Indeed, it's a plain bug: when the new variable outline-minor-mode-use-buttons
is enabled, ^L lines displayed as outline headings are making a mess:


[-- Attachment #2: outline-minor-mode-use-buttons.png --]
[-- Type: image/png, Size: 44098 bytes --]

^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-12-18 17:05                                                         ` Juri Linkov
@ 2021-12-18 17:52                                                           ` Eli Zaretskii
  2021-12-18 19:43                                                             ` Kévin Le Gouguec
  0 siblings, 1 reply; 45+ messages in thread
From: Eli Zaretskii @ 2021-12-18 17:52 UTC (permalink / raw)
  To: Juri Linkov; +Cc: 51016, larsi, orontee, kevin.legouguec

> From: Juri Linkov <juri@linkov.net>
> Cc: Eli Zaretskii <eliz@gnu.org>,  51016@debbugs.gnu.org,  larsi@gnus.org,
>   orontee@gmail.com
> Date: Sat, 18 Dec 2021 19:05:52 +0200
> 
> > As a user, I still consider that Emacs tripping over form feeds
> > when I ask it to go to the next heading is a plain bug
> 
> Indeed, it's a plain bug: when the new variable outline-minor-mode-use-buttons
> is enabled, ^L lines displayed as outline headings are making a mess:

I guess I'm blind, since I see neither a bug nor a mess.





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-12-18 17:52                                                           ` Eli Zaretskii
@ 2021-12-18 19:43                                                             ` Kévin Le Gouguec
  2021-12-18 20:03                                                               ` Eli Zaretskii
  0 siblings, 1 reply; 45+ messages in thread
From: Kévin Le Gouguec @ 2021-12-18 19:43 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 51016, larsi, orontee, Juri Linkov

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Juri Linkov <juri@linkov.net>
>> Cc: Eli Zaretskii <eliz@gnu.org>,  51016@debbugs.gnu.org,  larsi@gnus.org,
>>   orontee@gmail.com
>> Date: Sat, 18 Dec 2021 19:05:52 +0200
>> 
>> > As a user, I still consider that Emacs tripping over form feeds
>> > when I ask it to go to the next heading is a plain bug
>> 
>> Indeed, it's a plain bug: when the new variable outline-minor-mode-use-buttons
>> is enabled, ^L lines displayed as outline headings are making a mess:
>
> I guess I'm blind, since I see neither a bug nor a mess.

I guess the assumption Juri and I are working with (and maybe Lars too,
since IIUC he added these buttons to act as visual cues to indicate
places which can be expanded or collapsed) is that the purpose of
outline-regexp is to capture "heading" lines, by which we mean titles
and subtitles which define a hierarchy of things to show and hide.

These form feeds do not contribute to the document's hierarchy.  They do
not have subsections to expand or collapse.  Despite this, they are
treated as level-1 headings.

That leads to what Juri and I consider "absurd" results:

- outline-forward-same-level pauses on them: why?  There's nothing for
  a user to expand or collapse there;

- outline-minor-mode-use-buttons adds these clickable buttons: why?
  There's nothing for a user to expand or collapse there.





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-12-18 19:43                                                             ` Kévin Le Gouguec
@ 2021-12-18 20:03                                                               ` Eli Zaretskii
  2021-12-18 23:30                                                                 ` Kévin Le Gouguec
  0 siblings, 1 reply; 45+ messages in thread
From: Eli Zaretskii @ 2021-12-18 20:03 UTC (permalink / raw)
  To: Kévin Le Gouguec; +Cc: 51016, larsi, orontee, juri

> From: Kévin Le Gouguec <kevin.legouguec@gmail.com>
> Cc: Juri Linkov <juri@linkov.net>,  51016@debbugs.gnu.org,  larsi@gnus.org,
>   orontee@gmail.com
> Date: Sat, 18 Dec 2021 20:43:18 +0100
> 
> I guess the assumption Juri and I are working with (and maybe Lars too,
> since IIUC he added these buttons to act as visual cues to indicate
> places which can be expanded or collapsed) is that the purpose of
> outline-regexp is to capture "heading" lines, by which we mean titles
> and subtitles which define a hierarchy of things to show and hide.

You are treating NEWS as if it were an Org document.  It isn't.

> These form feeds do not contribute to the document's hierarchy.  They do
> not have subsections to expand or collapse.  Despite this, they are
> treated as level-1 headings.
> 
> That leads to what Juri and I consider "absurd" results:
> 
> - outline-forward-same-level pauses on them: why?  There's nothing for
>   a user to expand or collapse there;
> 
> - outline-minor-mode-use-buttons adds these clickable buttons: why?
>   There's nothing for a user to expand or collapse there.

These are _page_ delimiters.  They are conceptually _above_ level-1
headings.





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-12-18 20:03                                                               ` Eli Zaretskii
@ 2021-12-18 23:30                                                                 ` Kévin Le Gouguec
  2021-12-19 11:00                                                                   ` Lars Ingebrigtsen
  0 siblings, 1 reply; 45+ messages in thread
From: Kévin Le Gouguec @ 2021-12-18 23:30 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 51016, larsi, orontee, juri

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Kévin Le Gouguec <kevin.legouguec@gmail.com>
>> Cc: Juri Linkov <juri@linkov.net>,  51016@debbugs.gnu.org,  larsi@gnus.org,
>>   orontee@gmail.com
>> Date: Sat, 18 Dec 2021 20:43:18 +0100
>> 
>> I guess the assumption Juri and I are working with (and maybe Lars too,
>> since IIUC he added these buttons to act as visual cues to indicate
>> places which can be expanded or collapsed) is that the purpose of
>> outline-regexp is to capture "heading" lines, by which we mean titles
>> and subtitles which define a hierarchy of things to show and hide.
>
> You are treating NEWS as if it were an Org document.  It isn't.

I don't see where Org enters the picture from my description?  AFAICT
this "assumption" I described is just paraphrasing outline-mode's
docstring:

> Set major mode for editing outlines with selective display.
> Headings are lines which start with asterisks: one for major headings,
> two for subheadings, etc.  Lines not starting with asterisks are body lines.
> 
> Body text or subheadings under a heading can be made temporarily
> invisible, or visible again.

>> These form feeds do not contribute to the document's hierarchy.  They do
>> not have subsections to expand or collapse.  Despite this, they are
>> treated as level-1 headings.
>> 
>> That leads to what Juri and I consider "absurd" results:
>> 
>> - outline-forward-same-level pauses on them: why?  There's nothing for
>>   a user to expand or collapse there;
>> 
>> - outline-minor-mode-use-buttons adds these clickable buttons: why?
>>   There's nothing for a user to expand or collapse there.
>
> These are _page_ delimiters.  They are conceptually _above_ level-1
> headings.

Right; unfortunately, in addition to this *conceptual* understanding of
form feeds, *functionally* they are treated as level-1 headings, with
the unfortunate consequences we highlighted.

As you point out, they are page delimiters; if we were to take them out
of outline-regexp, page commands (navigation, marking, narrowing) would
keep working just fine!





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-12-18 23:30                                                                 ` Kévin Le Gouguec
@ 2021-12-19 11:00                                                                   ` Lars Ingebrigtsen
  2021-12-19 11:27                                                                     ` Eli Zaretskii
  0 siblings, 1 reply; 45+ messages in thread
From: Lars Ingebrigtsen @ 2021-12-19 11:00 UTC (permalink / raw)
  To: Kévin Le Gouguec; +Cc: 51016, orontee, juri

Kévin Le Gouguec <kevin.legouguec@gmail.com> writes:

> Right; unfortunately, in addition to this *conceptual* understanding of
> form feeds, *functionally* they are treated as level-1 headings, with
> the unfortunate consequences we highlighted.
>
> As you point out, they are page delimiters; if we were to take them out
> of outline-regexp, page commands (navigation, marking, narrowing) would
> keep working just fine!

Yes, I don't really see any reason to keep ^L in the outline regexp,
because people that switch outline mode on wants that to be the "top
level" organisation, while people that don't do that, will still have
page-wise navigation with ^L.  (And as you point out, the page-wise
commands still work fine even if you don't display the ^L's.)

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 45+ messages in thread

* bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers
  2021-12-19 11:00                                                                   ` Lars Ingebrigtsen
@ 2021-12-19 11:27                                                                     ` Eli Zaretskii
  0 siblings, 0 replies; 45+ messages in thread
From: Eli Zaretskii @ 2021-12-19 11:27 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 51016, kevin.legouguec, orontee, juri

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: Eli Zaretskii <eliz@gnu.org>,  51016@debbugs.gnu.org,
>   orontee@gmail.com,  juri@linkov.net
> Date: Sun, 19 Dec 2021 12:00:14 +0100
> 
> Kévin Le Gouguec <kevin.legouguec@gmail.com> writes:
> 
> > Right; unfortunately, in addition to this *conceptual* understanding of
> > form feeds, *functionally* they are treated as level-1 headings, with
> > the unfortunate consequences we highlighted.
> >
> > As you point out, they are page delimiters; if we were to take them out
> > of outline-regexp, page commands (navigation, marking, narrowing) would
> > keep working just fine!
> 
> Yes, I don't really see any reason to keep ^L in the outline regexp,

I do, so please don't make that change unconditionally.





^ permalink raw reply	[flat|nested] 45+ messages in thread

end of thread, other threads:[~2021-12-19 11:27 UTC | newest]

Thread overview: 45+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-04 21:05 bug#51016: 28.0.50; 'diff-font-lock-prettify' breaks display of outline headers Matthias Meulien
2021-10-09  0:26 ` bug#51016: Status: " Matthias Meulien
2021-10-09  0:37 ` Matthias Meulien
2021-10-13 20:30 ` bug#51016: " Matthias Meulien
2021-11-05  2:51   ` Lars Ingebrigtsen
2021-11-06 16:40     ` Juri Linkov
2021-11-06 18:30       ` Lars Ingebrigtsen
2021-11-08 22:38         ` Matthias Meulien
2021-11-09  3:47           ` Lars Ingebrigtsen
2021-11-09  8:19             ` Juri Linkov
2021-11-18 18:06     ` Juri Linkov
2021-11-19  7:22       ` Lars Ingebrigtsen
2021-11-19  8:31         ` Juri Linkov
2021-11-20  8:37           ` Lars Ingebrigtsen
2021-11-20 19:17             ` Juri Linkov
2021-11-21 17:02               ` Lars Ingebrigtsen
2021-11-21 17:26                 ` Matthias Meulien
2021-11-21 17:41                   ` Juri Linkov
2021-11-21 17:54                     ` Matthias Meulien
2021-11-22 22:11                       ` Matthias Meulien
2021-11-22 23:03                         ` Matthias Meulien
2021-11-24  6:54                           ` Lars Ingebrigtsen
2021-11-24 18:48                             ` Juri Linkov
2021-12-15 17:08                               ` Juri Linkov
2021-12-16  5:50                                 ` Lars Ingebrigtsen
2021-12-16 17:22                                   ` Juri Linkov
2021-12-16 17:48                                     ` Eli Zaretskii
2021-12-16 19:04                                       ` Juri Linkov
2021-12-16 20:06                                         ` Eli Zaretskii
2021-12-16 21:02                                           ` Kévin Le Gouguec
2021-12-17  6:36                                             ` Eli Zaretskii
2021-12-17  7:07                                               ` Kévin Le Gouguec
2021-12-17  7:55                                                 ` Eli Zaretskii
2021-12-17 21:27                                                   ` Kévin Le Gouguec
2021-12-18  6:23                                                     ` Eli Zaretskii
2021-12-18  9:18                                                       ` Kévin Le Gouguec
2021-12-18 17:05                                                         ` Juri Linkov
2021-12-18 17:52                                                           ` Eli Zaretskii
2021-12-18 19:43                                                             ` Kévin Le Gouguec
2021-12-18 20:03                                                               ` Eli Zaretskii
2021-12-18 23:30                                                                 ` Kévin Le Gouguec
2021-12-19 11:00                                                                   ` Lars Ingebrigtsen
2021-12-19 11:27                                                                     ` Eli Zaretskii
2021-12-17  4:25                                   ` Richard Stallman
2021-11-21 17:49                 ` Juri Linkov

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).