33 lines
1.2 KiB
EmacsLisp
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
|