From: Štěpán Němec Date: Wed, 8 Apr 2020 18:32:51 +0000 (+0200) Subject: ispell: Commands to check comments or strings at point or in region X-Git-Tag: emacs-28.0.90~6386 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=2aefd5590431bc84a70f2740f6949c2f771c2b55;p=emacs.git 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) --- diff --git a/etc/NEWS b/etc/NEWS index 2f8e5eb8554..05105a1e68e 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -381,6 +381,15 @@ take the actual screenshot, and defaults to "ImageMagick import". The menu-bar Help menu now has a "Show Recent Inputs" item under the "Describe" sub-menu. +** 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 8252da604eb..6eaa0582aa2 100644 --- a/lisp/textmodes/ispell.el +++ b/lisp/textmodes/ispell.el @@ -44,6 +44,7 @@ ;; ispell-buffer ;; ispell-message ;; ispell-comments-and-strings +;; ispell-comment-or-string-at-point ;; ispell-continue ;; ispell-complete-word ;; ispell-complete-word-interior-frag @@ -3580,24 +3581,40 @@ Returns the sum SHIFT due to changes in word replacements." ;;;###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 ()