[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#6411: Ispell string or comment, bug#6411: Ispell string or comment
From: |
Štěpán Němec |
Subject: |
bug#6411: Ispell string or comment, bug#6411: Ispell string or comment |
Date: |
Wed, 08 Apr 2020 21:23:20 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) |
tags 6411 + patch
thanks
On Wed, 21 Aug 2019 20:08:29 +0300
Eli Zaretskii wrote:
> Sorry, but I happen to think the proposed implementation is somewhat
> inelegant:
>
> . what's with the "(interactive (list nil))" part?
> . why not just make ispell-comments-and-strings accept a prefix
> argument to modify its behavior?
> . alternatively, why not make ispell-comments-and-strings be
> sensitive to the active region?
> . as yet another alternative, make the new ispell-comment-or-string
> narrow to the comment/string at point and then call
> ispell-comments-and-strings with no code changes whatsoever; then
> make the new command be sensitive to active region, and fall back
> on the string/comment at point if no active region
On Wed, 21 Aug 2019 22:57:21 +0200
Stefan Kangas wrote:
> Let's hope someone picks up the ball and provides us with a revised or
> new patch. If Lennart Borgman doesn't feel up to it after all these
> years, maybe someone else?
Here's my take on it.
I didn't go the narrowing route, as I think it is useful to have full
context during spelling corrections (recursive edit etc.).
I also didn't see an obvious way to reuse one function/command from the
other, as in order to get bounds of a comment/string, we have to parse
the (part of the) buffer, by which point we can just pass the bounds
straight to `ispell-region'.
I did update `ispell-comments-and-strings' to honour active region and
take optional bounds, anyway, as it seems useful in itself.
One other possibility I see would be to merge the two commands and
condition the "at-point" functionality on a prefix argument, but then
the name ('ispell-comments-and-strings') would probably have to be
changed, anyway (and to what?), and perhaps the command would already
become too much of a kitchen sink.
--
Štěpán
>From 9ea826c09e848f18b9c09e23c00d525da26d280b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C5=A0t=C4=9Bp=C3=A1n=20N=C4=9Bmec?= <stepnem@gmail.com>
Date: Wed, 8 Apr 2020 20:32:51 +0200
Subject: [PATCH] ispell: Commands to check comments or strings at point or in
region
* lisp/textmodes/ispell.el (ispell-comments-and-strings): Accept START
and END arguments, defaulting to active region in interactive calls.
(ispell-comment-or-string-at-point): New command. (bug#6411)
---
etc/NEWS | 7 +++++++
lisp/textmodes/ispell.el | 30 +++++++++++++++++++++++-------
2 files changed, 30 insertions(+), 7 deletions(-)
diff --git a/etc/NEWS b/etc/NEWS
index fa5478679f..f7f18d12b9 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -144,6 +144,13 @@ this user option.
+++
*** New command 'describe-keymap' describes keybindings in a keymap.
+** Ispell
+---
+*** 'ispell-comments-and-strings' now accepts START and END arguments,
+defaulting to active region when used interactively.
+---
+*** New command 'ispell-comment-or-string-at-point' is provided.
+
---
** The old non-SMIE indentation of 'sh-mode' has been removed.
diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el
index a9fbd2f04c..e1642a8d87 100644
--- a/lisp/textmodes/ispell.el
+++ b/lisp/textmodes/ispell.el
@@ -3591,24 +3591,40 @@ ispell-process-line
;;;###autoload
-(defun ispell-comments-and-strings ()
- "Check comments and strings in the current buffer for spelling errors."
- (interactive)
- (goto-char (point-min))
+(defun ispell-comments-and-strings (&optional start end)
+ "Check comments and strings in the current buffer for spelling errors.
+If called interactively with an active region, check only comments and
+strings in the region.
+When called from Lisp, START and END buffer positions can be provided
+to limit the check."
+ (interactive (when (use-region-p) (list (region-beginning) (region-end))))
+ (unless end (setq end (point-max)))
+ (goto-char (or start (point-min)))
(let (state done)
(while (not done)
(setq done t)
- (setq state (parse-partial-sexp (point) (point-max)
- nil nil state 'syntax-table))
+ (setq state (parse-partial-sexp (point) end nil nil state 'syntax-table))
(if (or (nth 3 state) (nth 4 state))
(let ((start (point)))
- (setq state (parse-partial-sexp start (point-max)
+ (setq state (parse-partial-sexp start end
nil nil state 'syntax-table))
(if (or (nth 3 state) (nth 4 state))
(error "Unterminated string or comment"))
(save-excursion
(setq done (not (ispell-region start (point))))))))))
+;;;###autoload
+(defun ispell-comment-or-string-at-point ()
+ "Check the comment or string containing point for spelling errors."
+ (interactive)
+ (save-excursion
+ (let ((state (syntax-ppss)))
+ (if (or (nth 3 state) (nth 4 state))
+ (ispell-region (nth 8 state)
+ (progn (parse-partial-sexp (point) (point-max)
+ nil nil state
'syntax-table)
+ (point)))
+ (user-error "Not inside a string or comment")))))
;;;###autoload
(defun ispell-buffer ()
--
2.26.0
- bug#6411: Ispell string or comment, bug#6411: Ispell string or comment,
Štěpán Němec <=
- bug#6411: Ispell string or comment, bug#6411: Ispell string or comment, Eli Zaretskii, 2020/04/09
- bug#6411: Ispell string or comment, bug#6411: Ispell string or comment, Štěpán Němec, 2020/04/09
- bug#6411: Ispell string or comment, bug#6411: Ispell string or comment, Eli Zaretskii, 2020/04/09
- bug#6411: Ispell string or comment, bug#6411: Ispell string or comment, Eli Zaretskii, 2020/04/09
- bug#6411: Ispell string or comment, bug#6411: Ispell string or comment, Štěpán Němec, 2020/04/09
- bug#6411: Ispell string or comment, bug#6411: Ispell string or comment, Eli Zaretskii, 2020/04/09
- bug#6411: Ispell string or comment, bug#6411: Ispell string or comment, Štěpán Němec, 2020/04/09
- bug#6411: Ispell string or comment, bug#6411: Ispell string or comment, Eli Zaretskii, 2020/04/10