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
next prev parent 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).