To install this package, run in Emacs:
M-x package-install RET ediprolog RET
These definitions let you interact with Prolog in all buffers. You can consult Prolog programs and evaluate embedded queries. Installation ============ Copy ediprolog.el to your load-path and add to your .emacs: (require 'ediprolog) (global-set-key [f10] 'ediprolog-dwim) Restart Emacs and customize ediprolog with M-x customize-group RET ediprolog RET The two most important configuration options are: - `ediprolog-system', either 'scryer or 'swi - `ediprolog-program', the path of the Prolog executable. Usage ===== The central function is `ediprolog-dwim' (Do What I Mean), which is bound to F10 by the snippet above. Depending on the content at point, `ediprolog-dwim' does the "appropriate" thing: If point is on a query, F10 sends the query to a Prolog process, and you interact with the process in the current buffer as on a terminal. Queries start with "?-" or ":-", possibly preceded by "%" and whitespace. An example of a query is (without leading ";;"): %?- member(X, [a,b,c]). If you press F10 when point is on that query, you get: %?- member(X, [a,b,c]). %@ X = a %@ ; X = b %@ ; X = c %@ ; false. When waiting for output of the Prolog process, you can press C-g to unblock Emacs and continue with other work. To resume interaction with the Prolog process, use M-x ediprolog-toplevel RET. If you press F10 when point is *not* on a query, the buffer content is consulted in the Prolog process, and point is moved to the first error (if any). In transient mark mode, if the region is active, only the text in the region is consulted. For convenience, the most recent interactions with the Prolog process are logged in the buffer "*ediprolog-history*". Use M-x ediprolog-localize RET to make any Prolog process started in the current buffer buffer-local. This way, you can run distinct processes simultaneously. Revert with M-x ediprolog-unlocalize RET. `ediprolog-dwim' with prefix arguments has special meanings: C-0 F10 kill Prolog process C-1 F10 always consult buffer (even when point is on a query) C-2 F10 always consult buffer, using a new process C-7 F10 equivalent to `ediprolog-toplevel' C-u F10 first consult buffer, then evaluate query (if any) C-u C-u F10 like C-u F10, with a new process Tested with Scryer Prolog 0.8.119 and SWI-Prolog 8.1.24, using Emacs versions 26.1 and 27.0.50.