From 9ea826c09e848f18b9c09e23c00d525da26d280b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0t=C4=9Bp=C3=A1n=20N=C4=9Bmec?= 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