]> git.eshelyaron.com Git - sweep.git/commitdiff
Add repeat keymap for sweeprolog-forward-hole
authorEshel Yaron <me@eshelyaron.com>
Sat, 26 Nov 2022 16:18:35 +0000 (18:18 +0200)
committerEshel Yaron <me@eshelyaron.com>
Sat, 26 Nov 2022 17:12:41 +0000 (19:12 +0200)
* sweeprolog.el (sweeprolog-backward-hole): new command.
(sweeprolog-forward-hole-repeat-mode): new repeat keymap.

sweeprolog.el

index ced7f4987cbbec5f67c7b2d18e2b4d753b6d10ee..3d61d126bdd0c59c78192bfd4078575edc65234b 100644 (file)
@@ -375,6 +375,14 @@ non-terminals)."
     map)
   "Keymap for `sweeprolog-mode'.")
 
+(defvar sweeprolog-forward-hole-repeat-mode
+  (let ((map (make-sparse-keymap)))
+    (define-key map (kbd "C-i") #'sweeprolog-forward-hole)
+    (define-key map (kbd "p") #'sweeprolog-backward-hole)
+    (define-key map (kbd "n") #'sweeprolog-forward-hole)
+    map)
+  "Repeat map for \\[sweeprolog-forward-hole].")
+
 (defvar sweeprolog-top-level-mode-map
   (let ((map (make-sparse-keymap)))
     (define-key map (kbd "C-c C-c") #'sweeprolog-top-level-signal-current)
@@ -2622,6 +2630,7 @@ point and the beginning of the buffer."
                        (not (eobp)))
              (forward-char))
            (point))))
+    (forward-char -1)
     (while (and (get-text-property (point) 'sweeprolog-hole)
                 (not (bobp)))
       (forward-char -1))
@@ -2638,7 +2647,7 @@ point and the beginning of the buffer."
         (while (and (get-text-property (point) 'sweeprolog-hole)
                     (not (bobp)))
           (forward-char -1))
-        (cons (point) end)))))
+        (cons (1+ (point)) (1+ end))))))
 
 (defun sweeprolog--forward-hole (&optional wrap)
   (if-let ((hole (sweeprolog--next-hole wrap))
@@ -2658,6 +2667,15 @@ point and the beginning of the buffer."
         (push-mark beg t t))
     (user-error "No holes before point")))
 
+(defun sweeprolog-backward-hole (&optional arg)
+  "Move point to the previous hole in a `sweeprolog-mode' buffer.
+
+With negative prefix argument ARG, move to the next hole
+instead."
+  (interactive "p" sweeprolog-mode)
+  (setq arg (or arg 1))
+  (sweeprolog-forward-hole (- arg)))
+
 (defun sweeprolog-forward-hole (&optional arg)
   "Move point to the next hole in a `sweeprolog-mode' buffer.
 
@@ -2670,6 +2688,14 @@ instead."
       (sweeprolog--backward-hole t)
     (sweeprolog--forward-hole t)))
 
+(put 'sweeprolog-backward-hole
+     'repeat-map
+     'sweeprolog-forward-hole-repeat-mode)
+
+(put 'sweeprolog-forward-hole
+     'repeat-map
+     'sweeprolog-forward-hole-repeat-mode)
+
 (defun sweeprolog--hole (&optional string)
   (propertize (or string "_")
               'sweeprolog-hole t