(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
(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)
(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)