unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Spencer Baugh <sbaugh@janestreet.com>
To: Mekeor Melire <mekeor@posteo.de>
Cc: Author <sbaugh@catern.com>,
	66283@debbugs.gnu.org, Committer <eliz@gnu.org>
Subject: bug#66283: 30.0.50; which-function-mode: When configured to display in header, and toggling off, then does not remove header
Date: Wed, 04 Oct 2023 09:57:15 -0400	[thread overview]
Message-ID: <ieril7mv6bo.fsf@janestreet.com> (raw)
In-Reply-To: <87edif9xqh.fsf@posteo.de> (Mekeor Melire's message of "Sat, 30 Sep 2023 20:41:05 +0000")

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


Thanks for the report.  The attached patch should fix this.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Remove-the-header-line-after-disabling-which-functio.patch --]
[-- Type: text/x-patch, Size: 3921 bytes --]

From a6cc873b67a0cc420abfb3d5ec08426cbfe733a8 Mon Sep 17 00:00:00 2001
From: Spencer Baugh <sbaugh@janestreet.com>
Date: Wed, 4 Oct 2023 09:53:47 -0400
Subject: [PATCH] Remove the header line after disabling which-function-mode

Previously, the header line would stay around even when after
disabling which-function-mode, although it may be empty.  Now the
which-function-mode element is properly removed from
header-line-format, so the header line will disappear if there's
nothing else in header-line-format.

Also, we now check that header-line-format is a list before trying to
add to it; this makes us work properly when enabling and disabling
which-function-mode for modes which set header-line-format to a string
or symbol, such as eww.

* lisp/progmodes/which-func.el (which-func-try-to-enable): Re-add
which-func-format to the header line.
(which-func--header-line-remove): Add.
(which-func--disable): Call which-func--header-line-remove.
(which-function-mode): Call which-func--header-line-remove.
---
 lisp/progmodes/which-func.el | 41 ++++++++++++++++++++++--------------
 1 file changed, 25 insertions(+), 16 deletions(-)

diff --git a/lisp/progmodes/which-func.el b/lisp/progmodes/which-func.el
index 09d0250515f..77b84615fdc 100644
--- a/lisp/progmodes/which-func.el
+++ b/lisp/progmodes/which-func.el
@@ -208,21 +208,28 @@ which-func--use-mode-line
 (add-hook 'after-change-major-mode-hook #'which-func-ff-hook t)
 
 (defun which-func-try-to-enable ()
-  (unless (or (not which-function-mode)
-              (local-variable-p 'which-func-mode))
-    (setq which-func-mode (or (eq which-func-modes t)
-                              (member major-mode which-func-modes)))
-    (setq which-func--use-mode-line
-          (member which-func-display '(mode mode-and-header)))
-    (setq which-func--use-header-line
-          (member which-func-display '(header mode-and-header)))
-    (when (and which-func-mode which-func--use-header-line)
-      (add-to-list 'header-line-format '("" which-func-format " ")))))
+  (when which-function-mode
+    (unless (local-variable-p 'which-func-mode)
+      (setq which-func-mode (or (eq which-func-modes t)
+                                (member major-mode which-func-modes)))
+      (setq which-func--use-mode-line
+            (member which-func-display '(mode mode-and-header)))
+      (setq which-func--use-header-line
+            (member which-func-display '(header mode-and-header))))
+    ;; We might need to re-add which-func-format to the header line,
+    ;; if which-function-mode was toggled off and on.
+    (when (and which-func-mode which-func--use-header-line
+               (listp header-line-format))
+      (add-to-list 'header-line-format '("" which-func-format " "))))
+
+(defun which-func--header-line-remove ()
+  (when (and which-func-mode which-func--use-header-line
+             (listp header-line-format))
+    (setq header-line-format
+          (delete '("" which-func-format " ") header-line-format))))
 
 (defun which-func--disable ()
-  (when (and which-func-mode which-func--use-header-line)
-    (setq header-line-format
-          (delete '("" which-func-format " ") header-line-format)))
+  (which-func--header-line-remove)
   (setq which-func-mode nil))
 
 (defun which-func-ff-hook ()
@@ -288,9 +295,11 @@ which-function-mode
   (when which-function-mode
     ;;Turn it on.
     (setq which-func-update-timer
-          (run-with-idle-timer idle-update-delay t #'which-func-update))
-    (dolist (buf (buffer-list))
-      (with-current-buffer buf (which-func-try-to-enable)))))
+          (run-with-idle-timer idle-update-delay t #'which-func-update)))
+  (dolist (buf (buffer-list))
+    (with-current-buffer buf
+      (which-func--header-line-remove)
+      (which-func-try-to-enable))))
 
 (defvar which-function-imenu-failed nil
   "Locally t in a buffer if `imenu--make-index-alist' found nothing there.")
-- 
2.39.3


  reply	other threads:[~2023-10-04 13:57 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-30 20:41 bug#66283: 30.0.50; which-function-mode: When configured to display in header, and toggling off, then does not remove header Mekeor Melire
2023-10-04 13:57 ` Spencer Baugh [this message]
2023-10-04 14:56   ` Stefan Kangas
2023-10-04 15:13     ` Spencer Baugh
2023-10-04 19:19       ` Mekeor Melire
2023-10-04 20:33         ` Stefan Kangas
2023-10-14  7:29       ` Eli Zaretskii
2023-10-21 14:43         ` sbaugh
2023-10-29 11:24           ` Eli Zaretskii

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=ieril7mv6bo.fsf@janestreet.com \
    --to=sbaugh@janestreet.com \
    --cc=66283@debbugs.gnu.org \
    --cc=eliz@gnu.org \
    --cc=mekeor@posteo.de \
    --cc=sbaugh@catern.com \
    /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).