]> git.eshelyaron.com Git - dict.git/commitdiff
ADDED: sweep-set-prolog-flag for setting Prolog flags
authorEshel Yaron <me@eshelyaron.com>
Wed, 7 Sep 2022 19:50:03 +0000 (22:50 +0300)
committerEshel Yaron <me@eshelyaron.com>
Wed, 7 Sep 2022 20:03:22 +0000 (23:03 +0300)
sweep.el
sweep.pl

index e6790d52c2915f6b909e8f7569d2351e52b9cd24..0778c7fb1cebd5131ffe7e29344cc0da6514f11d 100644 (file)
--- a/sweep.el
+++ b/sweep.el
@@ -6,7 +6,7 @@
 ;; Maintainer: Eshel Yaron <me(at)eshelyaron(dot)com>
 ;; Keywords: prolog languages extensions
 ;; URL: https://git.sr.ht/~eshel/sweep
-;; Package-Version: 0.1.1
+;; Package-Version: 0.1.2
 ;; Package-Requires: ((emacs "27"))
 
 ;; This file is NOT part of GNU Emacs.
@@ -47,6 +47,12 @@ is used to find a the swipl executable."
   :type 'string
   :group 'sweep)
 
+(defcustom sweep-read-flag-prompt "Flag: "
+  "Prompt used for reading a Prolog flag name from the minibuffer."
+  :package-version '((sweep . "0.1.2"))
+  :type 'string
+  :group 'sweep)
+
 (defcustom sweep-read-module-prompt "Module: "
   "Prompt used for reading a Prolog module name from the minibuffer."
   :package-version '((sweep . "0.1.0"))
@@ -172,6 +178,39 @@ is used to find a the swipl executable."
       (set-window-point win (point))
       win)))
 
+(defun sweep-current-prolog-flags (&optional prefix)
+  (sweep-open-query "user" "sweep" "sweep_current_prolog_flags" (or prefix ""))
+  (let ((sol (sweep-next-solution)))
+    (sweep-close-query)
+    (when (sweep-true-p sol)
+      (cdr sol))))
+
+(defun sweep-read-prolog-flag ()
+  "Read a Prolog flag from the minibuffer, with completion."
+  (let* ((col (sweep-current-prolog-flags))
+         (completion-extra-properties
+          (list :annotation-function
+                (lambda (key)
+                  (let* ((val (cdr (assoc-string key col))))
+                    (if val
+                        (concat (make-string
+                                 (max (- 32 (length key)) 1) ? )
+                                val)
+                      nil))))))
+    (completing-read sweep-read-flag-prompt col)))
+
+(defun sweep-set-prolog-flag (flag value)
+  (interactive (let ((f (sweep-read-prolog-flag)))
+                 (list f (read-string (concat "Set " f " to: ")))))
+  (sweep-open-query "user"
+                    "sweep"
+                    "sweep_set_prolog_flag"
+                    (cons flag value))
+  (let ((sol (sweep-next-solution)))
+    (sweep-close-query)
+    (when (sweep-true-p sol)
+      (cdr sol))))
+
 (defun sweep-setup-message-hook ()
   (with-current-buffer (get-buffer-create sweep-messages-buffer-name)
     (setq-local window-point-insertion-type t)
index 8afce756b98b86636cf5018812139d586c0174e0..bdbebf9fea1510346b96e63c7c4d4558f8f226cf 100644 (file)
--- a/sweep.pl
+++ b/sweep.pl
@@ -34,6 +34,8 @@
           [ sweep_colourise_buffer/2,
             sweep_colourise_some_terms/2,
             sweep_setup_message_hook/2,
+            sweep_current_prolog_flags/2,
+            sweep_set_prolog_flag/2,
             sweep_documentation/2,
             sweep_identifier_at_point/2,
             sweep_expand_file_name/2,
@@ -85,6 +87,20 @@ prolog:xref_open_source(Source, Stream) :-
 prolog:xref_close_source(Source, Stream) :-
     sweep_open(Source, Stream).
 
+
+sweep_current_prolog_flags(Sub, Flags) :-
+    findall([Flag|Value],
+            (current_prolog_flag(Flag0, Value0),
+             atom_string(Flag0, Flag),
+             once(sub_string(Flag, _, _, _, Sub)),
+             term_string(Value0, Value)),
+            Flags).
+
+sweep_set_prolog_flag([Flag0|Value0], []) :-
+    atom_string(Flag, Flag0),
+    term_string(Value, Value0),
+    set_prolog_flag(Flag, Value).
+
 sweep_colourise_buffer([String|Path], Colors) :-
     setup_call_cleanup(( new_memory_file(H),
                          insert_memory_file(H, 0, String),