From: Gregory Heytings <gregory@heytings.org>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: emacs-devel@gnu.org
Subject: Re: master 2399541: Remove font-lock toggle from font-lock-update
Date: Mon, 29 Mar 2021 09:44:03 +0000 [thread overview]
Message-ID: <a83bd81e9adc74c7d496@heytings.org> (raw)
In-Reply-To: <jwvmtuq98wh.fsf-monnier+emacs@gnu.org>
[-- Attachment #1: Type: text/plain, Size: 997 bytes --]
Thanks for your detailed reply!
>
> Yes, there are three cases: - font-lock-mode is nil - font-lock-mode is
> t but the font-lock machinery is not activated (e.g. in text-mode with
> the default config). - font-lock fully activated.
>
With this indication and another mail you sent to Eli, I think I finally
understand what you mean. One thing I'm not entirely sure is whether the
second case is (and font-lock-mode (not font-lock-keywords)) or (and
font-lock-mode (not font-lock-fontified)), but my guess is that
font-lock-fontified is an internal variable and that it is safer to use
font-lock-keywords here.
>> +Otherwise, with prefix ARG, toggle Font Lock mode."
>
> Is this behavior useful?
>
I think it is, yes, and I think it makes sense to use the prefix argument
for that. M-x font-lock-mode does not always produce the expected effect,
which can be puzzling, so having a way to "do what I mean" in a command is
useful.
I attach the patch, updated with your suggestions.
[-- Attachment #2: Type: text/x-diff, Size: 4248 bytes --]
From 49d758e5a91f19615fe1e7858b013c88d95da0a4 Mon Sep 17 00:00:00 2001
From: Gregory Heytings <gregory@heytings.org>
Date: Mon, 29 Mar 2021 09:31:15 +0000
Subject: [PATCH] Improve font-lock-update and rename it to font-lock-dwim
* lisp/font-lock.el (font-lock-dwim): Renamed from 'font-lock-update'.
Only refontify the region when it is active, and act more cautiously.
* list/font-lock.el (font-lock-update-region): New function that calls
the appropriate function depending on the current Font Lock state.
* lisp/bindings.el (ctl-x-x-map): Adjust the command name.
* etc/NEWS: Adjust the command name.
---
etc/NEWS | 4 ++--
lisp/bindings.el | 2 +-
lisp/font-lock.el | 33 +++++++++++++++++++++++++--------
3 files changed, 28 insertions(+), 11 deletions(-)
diff --git a/etc/NEWS b/etc/NEWS
index 2d66a93474..4747d49ac5 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -94,7 +94,7 @@ useful on systems such as FreeBSD which ships only with "etc/termcap".
* Changes in Emacs 28.1
+++
-** New command 'font-lock-update', bound to 'C-x x f'.
+** New command 'font-lock-dwim', bound to 'C-x x f'.
This command updates the syntax highlighting in this buffer.
** The new NonGNU ELPA archive is enabled by default alongside GNU ELPA.
@@ -255,7 +255,7 @@ The 'C-x x' keymap now holds keystrokes for various buffer-oriented
commands. The new keystrokes are 'C-x x g' ('revert-buffer'),
'C-x x r' ('rename-buffer'), 'C-x x u' ('rename-uniquely'), 'C-x x n'
('clone-buffer'), 'C-x x i' ('insert-buffer'), 'C-x x t'
-('toggle-truncate-lines') and 'C-x x f' ('font-lock-update').
+('toggle-truncate-lines') and 'C-x x f' ('font-lock-dwim').
---
** Commands 'set-frame-width' and 'set-frame-height' can now get their
diff --git a/lisp/bindings.el b/lisp/bindings.el
index 6eac528eb6..6f25e9738a 100644
--- a/lisp/bindings.el
+++ b/lisp/bindings.el
@@ -1432,7 +1432,7 @@ ctl-x-map
(defvar ctl-x-x-map
(let ((map (make-sparse-keymap)))
- (define-key map "f" #'font-lock-update)
+ (define-key map "f" #'font-lock-dwim)
(define-key map "g" #'revert-buffer)
(define-key map "r" #'rename-buffer)
(define-key map "u" #'rename-uniquely)
diff --git a/lisp/font-lock.el b/lisp/font-lock.el
index 82915d8c8b..4fb66fc45a 100644
--- a/lisp/font-lock.el
+++ b/lisp/font-lock.el
@@ -1120,16 +1120,33 @@ font-lock-ensure
(funcall font-lock-ensure-function
(or beg (point-min)) (or end (point-max)))))
-(defun font-lock-update (&optional arg)
- "Updates the syntax highlighting in this buffer.
-Refontify the accessible portion of this buffer, or enable Font Lock mode
-in this buffer if it is currently disabled. With prefix ARG, toggle Font
-Lock mode."
+(defun font-lock-update-region (&optional beg end)
+ "Update the syntax highlighting between BEG and END.
+Refontify depending on the current Font Lock mode state.
+Font Lock mode can be disabled, in which case the text is unfontified,
+or enabled but inactive, in which case the text is refontified,
+or enabled and active, in which case the text fontification is flushed.
+If the region is not specified, it defaults to the entire accessible
+portion of the current buffer."
+ (let ((b (or beg (point-min)))
+ (e (or end (point-max))))
+ (if (not font-lock-mode)
+ (font-lock-unfontify-region b e)
+ (if (not font-lock-keywords)
+ (font-lock-fontify-region b e)
+ (font-lock-flush b e)))))
+
+(defun font-lock-dwim (&optional arg)
+ "Update the syntax highlighting in this buffer.
+Refontify the region if it is active, or the accessible portion of the
+buffer. Otherwise, with prefix ARG, toggle Font Lock mode."
(interactive "P")
(save-excursion
- (if (and (not arg) font-lock-mode)
- (font-lock-fontify-region (point-min) (point-max))
- (font-lock-unfontify-region (point-min) (point-max))
+ (if (not arg)
+ (if (use-region-p)
+ (font-lock-update-region (region-beginning) (region-end))
+ (font-lock-update-region))
+ (font-lock-update-region)
(font-lock-mode 'toggle))))
(defun font-lock-default-fontify-buffer ()
--
2.30.2
next prev parent reply other threads:[~2021-03-29 9:44 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20210324143048.23515.75257@vcs0.savannah.gnu.org>
[not found] ` <20210324143050.40C6E20D10@vcs0.savannah.gnu.org>
2021-03-24 15:23 ` master 2399541: Remove font-lock toggle from font-lock-update Stefan Monnier
2021-03-24 15:28 ` Lars Ingebrigtsen
2021-03-24 15:47 ` Stefan Monnier
2021-03-24 15:29 ` Paul W. Rankin via Emacs development discussions.
2021-03-24 15:32 ` Gregory Heytings
2021-03-24 15:43 ` Lars Ingebrigtsen
2021-03-24 16:03 ` Lars Ingebrigtsen
2021-03-24 17:43 ` Paul W. Rankin via Emacs development discussions.
2021-03-24 17:49 ` Lars Ingebrigtsen
2021-03-24 22:07 ` Stefan Monnier
2021-03-24 22:27 ` Gregory Heytings
2021-03-25 13:52 ` Stefan Monnier
2021-03-25 20:58 ` Gregory Heytings
2021-03-25 22:39 ` Stefan Monnier
2021-03-29 9:44 ` Gregory Heytings [this message]
2021-03-29 13:00 ` Stefan Monnier
2021-03-29 14:40 ` Gregory Heytings
2021-03-29 15:50 ` Stefan Monnier
2021-03-25 9:09 ` Lars Ingebrigtsen
2021-03-25 10:14 ` Gregory Heytings
2021-03-25 11:00 ` Alan Mackenzie
2021-03-25 2:07 ` Paul W. Rankin via Emacs development discussions.
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a83bd81e9adc74c7d496@heytings.org \
--to=gregory@heytings.org \
--cc=emacs-devel@gnu.org \
--cc=monnier@iro.umontreal.ca \
/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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.