]> git.eshelyaron.com Git - sweep.git/commitdiff
yank holes back as plain variables
authorEshel Yaron <me@eshelyaron.com>
Mon, 23 Jan 2023 18:20:02 +0000 (20:20 +0200)
committerEshel Yaron <me@eshelyaron.com>
Mon, 23 Jan 2023 18:25:27 +0000 (20:25 +0200)
* sweeprolog.el (sweeprolog-mode): add sweeprolog-hole to
yank-excluded-properties buffer-locally.
* sweeprolog-tests.el: test it.
* README.org (Holes): mention it.

README.org
sweeprolog-tests.el
sweeprolog.el

index b5f1070e45e2a44fed678f61919e174624ffec50..6fe2fe6557ce5049daa07a9b38122eb38279ed4d 100644 (file)
@@ -1008,13 +1008,21 @@ can be automated by adding ~sweeprolog-forward-hole-on-tab-mode~ to
   (add-hook 'sweeprolog-mode-hook #'sweeprolog-forward-hole-on-tab-mode)
 #+end_src
 
+#+CINDEX filling holes
+#+CINDEX holes, filling
 To "fill" a hole marked by one of the aforementioned commands, either
 use ~C-c C-m~ as described above or type ~C-w~ (~M-x kill-region~) to kill
 the region and remove the placeholder variable, and then insert Prolog
-code as usual.  As an alternative to manually killing the region with
-~C-w~, with ~delete-selection-mode~ enabled the placeholder is
-automatically deleted when you insert a character while the region is
-active (see also [[info:emacs#Using Region][Using Region in the Emacs manual]]).
+code as usual.  Yanking a hole with ~C-y~ (~yank~) after you kill it
+removes the special hole property and inserts it as a plain variable.
+This is particularly useful if you want to keep the variable name that
+Sweep chose for the hole--to do that simply press ~C-w C-y~ with the
+hole marked.
+
+As an alternative to manually killing the region with ~C-w~, with
+~delete-selection-mode~ enabled the placeholder is automatically deleted
+when you insert a character while the region is active (see also [[info:emacs#Using Region][Using
+Region]] in the Emacs manual).
 
 ** Definitions and References
 :PROPERTIES:
index 3076cb99d47eca158755361b1b4cd0d62cae4bff..e44ccca1501bdda0acb59661204e91949a017d42 100644 (file)
@@ -253,6 +253,20 @@ foo(Foo) :- bar.
                    '(sweeprolog-undefined-default-face
                      sweeprolog-body-default-face)))))
 
+(ert-deftest yank-hole ()
+  "Test killing and yanking a hole as a plain variable."
+  (let ((temp (make-temp-file "sweeprolog-test"
+                              nil
+                              "pl"
+                              "")))
+    (find-file-literally temp)
+    (sweeprolog-mode)
+    (sweeprolog-insert-term-with-holes ":-" 2)
+    (should (get-text-property (point-min) 'sweeprolog-hole))
+    (call-interactively #'kill-region)
+    (call-interactively #'yank)
+    (should (not (get-text-property (point-min) 'sweeprolog-hole)))))
+
 (ert-deftest insert-term-with-holes ()
   "Test `sweeprolog-insert-term-with-holes'."
   (let ((temp (make-temp-file "sweeprolog-test"
index 61c98658e4f89b2135951ff008f23c4efaea1081..893a77b51b7229dba0d1989340832928e587bcf2 100644 (file)
@@ -4277,7 +4277,10 @@ certain contexts to maintain conventional Prolog layout."
     (cursor-sensor-mode 1))
   (when (boundp 'context-menu-functions)
     (add-hook 'context-menu-functions
-              #'sweeprolog-context-menu-function)))
+              #'sweeprolog-context-menu-function))
+  (unless (member 'sweeprolog-hole yank-excluded-properties)
+   (setq-local yank-excluded-properties
+               (cons 'sweeprolog-hole yank-excluded-properties))))
 
 
 ;;;; Skeletons and auto-insert