]> git.eshelyaron.com Git - emacs.git/commitdiff
ispell: Commands to check comments or strings at point or in region
authorŠtěpán Němec <stepnem@gmail.com>
Wed, 8 Apr 2020 18:32:51 +0000 (20:32 +0200)
committerŠtěpán Němec <stepnem@gmail.com>
Wed, 26 Aug 2020 11:19:46 +0000 (13:19 +0200)
* 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
lisp/textmodes/ispell.el

index 2f8e5eb8554a5cc7267fb3bc1bb8e9844b286f36..05105a1e68e23901cbb33a160a43c6f384e808e7 100644 (file)
--- 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.
 
index 8252da604eb09f1167998d680ad2948e8338bad0..6eaa0582aa2c6b18adc1bc84e27b08a5e5df93e4 100644 (file)
@@ -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 ()