From: Gregory Heytings <gregory@heytings.org>
To: Lars Ingebrigtsen <larsi@gnus.org>
Cc: Stefan Monnier <monnier@iro.umontreal.ca>, emacs-devel@gnu.org
Subject: Re: master 2399541: Remove font-lock toggle from font-lock-update
Date: Thu, 25 Mar 2021 10:14:06 +0000 [thread overview]
Message-ID: <fa05cc978285b7b0a091@heytings.org> (raw)
In-Reply-To: <87czvna9cc.fsf@gnus.org>
[-- Attachment #1: Type: text/plain, Size: 477 bytes --]
>> I'd much prefer a longer `font-lock-fontify-diwm` which tries to
>> reproduce more or less the same behavior as your favorite, but by
>> explicitly testing the different circumstances you care about.
>
> Sure. It could, for instance, refontify the region (if selected)
> instead of the entire buffer. And probably a lot of other DWIM-ish
> niceness.
>
Here's a patch to do this, and to fix the problem when "too large" buffers
are refontified (xdisp.c for example).
[-- Attachment #2: Type: text/x-diff, Size: 3471 bytes --]
From 44332493a8796f692605e7e7ec55390742ff23bc Mon Sep 17 00:00:00 2001
From: Gregory Heytings <gregory@heytings.org>
Date: Thu, 25 Mar 2021 09:50:05 +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. Do not refontify too
large buffers at once.
* 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 | 14 +++++++++-----
3 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/etc/NEWS b/etc/NEWS
index 49a4bb8106..d7b5efaaee 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 @@ if `inhibit-field-text-motion' is non-nil."
(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..6b351d34ea 100644
--- a/lisp/font-lock.el
+++ b/lisp/font-lock.el
@@ -1120,15 +1120,19 @@ portion of the buffer."
(funcall font-lock-ensure-function
(or beg (point-min)) (or end (point-max)))))
-(defun font-lock-update (&optional arg)
+(defun font-lock-dwim (&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."
+Enable Font Lock mode if it is disabled. Otherwise, refontify the region
+if it is active, or a large part of the accessible portion of the buffer.
+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))
+ (if (use-region-p)
+ (font-lock-fontify-region (region-beginning) (region-end))
+ (font-lock-flush (point-min) (point-max))
+ (font-lock-fontify-region (max (point-min) (- (point) 50000))
+ (min (point-max) (+ (point) 50000))))
(font-lock-unfontify-region (point-min) (point-max))
(font-lock-mode 'toggle))))
--
2.30.2
next prev parent reply other threads:[~2021-03-25 10:14 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
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 [this message]
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
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=fa05cc978285b7b0a091@heytings.org \
--to=gregory@heytings.org \
--cc=emacs-devel@gnu.org \
--cc=larsi@gnus.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 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).