branch: elpa/sweeprolog commit f5a1f615ee3804df201cfa053301e9031a88d426 Author: Eshel Yaron <m...@eshelyaron.com> Commit: Eshel Yaron <m...@eshelyaron.com>
Report correct predicate indicators in 'C-x 4 a' * sweeprolog.el (sweeprolog-add-log-current-defun): New function. (sweeprolog-mode): Set 'add-log-current-defun-function' to it. * sweeprolog-tests.el: Test it. --- sweeprolog-tests.el | 22 ++++++++++++++++++++++ sweeprolog.el | 19 +++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/sweeprolog-tests.el b/sweeprolog-tests.el index a3edf682b0..e074865e5a 100644 --- a/sweeprolog-tests.el +++ b/sweeprolog-tests.el @@ -1913,4 +1913,26 @@ head, (should (string= (buffer-string) "% ?- true; false.\n% true\u0020\nfoo.")))))) +(ert-deftest add-log-current-defun () + "Tests getting the predicate indicator at point." + (let ((temp (make-temp-file "sweeprolog-test" + nil + "pl" + " +foo(Bar) :- baz(Bar). +foo(Bar) --> baz(Bar). +f:o(Bar) :- baz(Bar). +f:o(Bar) --> baz(Bar)."))) + (find-file-literally temp) + (sweeprolog-mode) + (goto-char (point-min)) + (forward-word) + (should (string= (add-log-current-defun) "foo/1")) + (forward-line) + (should (string= (add-log-current-defun) "foo//1")) + (forward-line) + (should (string= (add-log-current-defun) "f:o/1")) + (forward-line) + (should (string= (add-log-current-defun) "f:o//1")))) + ;;; sweeprolog-tests.el ends here diff --git a/sweeprolog.el b/sweeprolog.el index ae2cd48036..fd13c27a36 100644 --- a/sweeprolog.el +++ b/sweeprolog.el @@ -4429,6 +4429,8 @@ certain contexts to maintain conventional Prolog layout." (setq-local adaptive-fill-regexp "[ \t]*") (setq-local fill-indent-according-to-mode t) (setq-local comment-multi-line t) + (setq-local add-log-current-defun-function + #'sweeprolog-add-log-current-defun) (setq-local mode-line-process '(:eval (when (sweeprolog-buffer-loaded-since-last-modification-p) @@ -6595,6 +6597,23 @@ as a comment in the source buffer at starting at POINT." (format "`\\<sweeprolog-top-level-example-mode-map>\\[sweeprolog-top-level-example-done]' to quit and write contents as a comment in buffer %s" (buffer-name (marker-buffer marker))))) (sweeprolog-top-level-example-mode))) +(defun sweeprolog-add-log-current-defun () + "Return the indicator of the predicate defined at point, or nil. + +This function is used as a `add-log-current-defun-function' in +`sweeprolog-mode' buffers." + (when-let ((def (sweeprolog-definition-at-point))) + (let ((fun (nth 1 def)) + (ari (nth 2 def)) + (neck (nth 4 def)) + (ind "/") + (mod (nth 5 def))) + (when (string= neck "-->") + (setq ari (- ari 2) + ind "//")) + (concat (when mod (concat mod ":")) + fun ind (number-to-string ari))))) + ;;;; Footer (provide 'sweeprolog)