Files
emacs-dotfiles/.config.d/99-my-ediprolog.el

33 lines
1.2 KiB
EmacsLisp

;;; 99-my-ediprolog.el --- ediprolog extras -*- no-byte-compile: t; lexical-binding: t; -*-
(defun my/ediprolog-run-in-own-buffer ()
"Copy this query to another buffer and run it there"
(interactive)
;; This is the same logic ediprolog uses to check if the point is on query.
(when (and (not (and transient-mark-mode mark-active))
(save-excursion
(beginning-of-line)
(looking-at "\\([\t ]*%*[\t ]*[:?]- *\\)")))
(let* ((from (goto-char (match-end 0)))
(to (if (re-search-forward "\\.[\t ]*\\(?:%.*\\)?$" nil t)
;; omit trailing whitespace
(+ (point) (skip-chars-backward "\t "))
(error "Missing `.' at the end of this query")))
(query (buffer-substring-no-properties from to))
(buffer (get-buffer-create "*Prolog Query*")))
(pop-to-buffer buffer)
(unless (eq major-mode "prolog-mode")
(prolog-mode))
(goto-char (point-max))
(unless (eq (line-number-at-pos) 1)
(insert "\n\n"))
(insert "/*\n ?- ")
(save-excursion
(insert query "\n*/"))
(ediprolog-dwim))))
;; 99-my-ediprolog.el ends here