branch: scratch/ediprolog commit e75c0ddfc47f968a4e227f83421abc963287ad12 Merge: 3fa2be14ea 751119cfee Author: Stefan Monnier <monn...@iro.umontreal.ca> Commit: Stefan Monnier <monn...@iro.umontreal.ca>
Merge Jun 8 2020 commit '751119cfee9' into externals/ediprolog This seems to be the commit in the upstream repository that most closely matches the commit in the elpa.git. --- README.md | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ediprolog.el | 4 +-- factorial.png | Bin 0 -> 60804 bytes 3 files changed, 103 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md new file mode 100644 index 0000000000..406a356fd1 --- /dev/null +++ b/README.md @@ -0,0 +1,101 @@ +# Introduction + +*ediprolog* lets you interact with Prolog in all Emacs buffers. +You can consult Prolog programs and evaluate embedded queries. + +**Project page**: + +[**https://www.metalevel.at/ediprolog/**](https://www.metalevel.at/ediprolog/) + +**Video**: + +[https://www.metalevel.at/prolog/videos/ediprolog](https://www.metalevel.at/prolog/videos/ediprolog) + +See also [PceProlog](https://www.metalevel.at/pceprolog/). + +# Installation + +With Emacs≥24.1, the simplest way to install ediprolog is to use +Emacs's built-in *package manager* via the key sequence: + + M-x package-install RET ediprolog RET + +Alternatively, copy [ediprolog.el](ediprolog.el) to your `load-path` +and add the following form to your `.emacs`, then evaluate the form or +restart Emacs: + + (require 'ediprolog) + +After you have installed ediprolog, you can customize it 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). I recommend +to bind it to the function key F10 by adding the following +form to your `.emacs` and evaluating it: + + (global-set-key [f10] 'ediprolog-dwim) + +In the following, I assume that you have also done this. + +Depending on the content at point, `ediprolog-dwim` does the +"appropriate" thing: If point is on a *query*, it 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: + + %?- 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). You do *not* need to *save* the file beforehand, since +the *buffer content* (not the file) 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: + +| Key Sequence | Meaning | +|--------------|----------------------------------------------------------| +| 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. + +# Screenshot + +Here is a sample interaction, using +[CLP(FD) constraints](https://www.metalevel.at/prolog/clpfd) to +relate a number to its factorial: + + diff --git a/ediprolog.el b/ediprolog.el index d88d30e80c..503643ddab 100644 --- a/ediprolog.el +++ b/ediprolog.el @@ -1,6 +1,6 @@ ;;; ediprolog.el --- Emacs Does Interactive Prolog -;; Copyright (C) 2006-2009, 2012-2013, 2016-2017, 2020 Free Software Foundation, Inc. +;; Copyright (C) 2006-2022 Free Software Foundation, Inc. ;; Author: Markus Triska <tri...@metalevel.at> ;; Keywords: languages, processes @@ -69,7 +69,7 @@ ;; 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, +;; 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 diff --git a/factorial.png b/factorial.png new file mode 100644 index 0000000000..b85c8c0f05 Binary files /dev/null and b/factorial.png differ