SWI-Prolog offers an extensible interface which allows the user to edit objects of the program: predicates, modules, files, etc. The editor interface is implemented by edit1 and consists of three parts: locating, selecting and starting the editor.
Any of these parts may be extended or redefined by adding clauses to various multi-file (see multifile1) predicates defined in the module prolog_edit.
The built-in edit specifications for edit1 (see prolog_edit:locate3) are described below.
| Fully specified objects | |
| Module:Name/Arity | Refers a predicate |
| module(Module) | Refers to a module |
| file(Path) | Refers to a file |
| source_file(Path) | Refers to a loaded source-file |
| Ambiguous specifications | |
| Name/Arity | Refers this predicate in any module |
| Name | Refers to (1) named predicate in any module with any arity, (2) a (source) file or (3) a module. |
prolog_edit:locate3+Spec, -FullSpec, -Location Where Spec is the specification provided through edit1. This multifile predicate is used to enumerate locations at with an object satisfying the given Spec can be found. FullSpec is unified with the complete specification for the object. This distinction is used to allow for ambiguous specifications. For example, if Spec is an atom, which appears as the base-name of a loaded file and as the name of a predicate, FullSpec will be bound to filePath or Name/Arity.
Location is a list of attributes of the location. Normally, this list will contain the term fileFile and --if available-- the term lineLine.
prolog_edit:locate2+Spec, -Location Same as prolog_edit:locate3, but only deals with fully-sepecified objects.
prolog_edit:edit_source1+Location Start editor on Location. See prolog_edit:locate3 for the format of a location term. This multi-file predicate is normally not defined. If it succeeds, edit1 assumes the editor is started.
If it fails, edit1 will invoke an external editor. The editor to be invoked is determined from the evironment variable EDITOR, which may be set from the operating system or from the Prolog initialisation file using setenv2. If no editor is defined, vi is the default in Unix systems, and notepad on Windows.
The predicate prolog_edit:edit_command2 defines how the editor will be invoked.
prolog_edit:edit_command2+Editor, -Command
Determines how Editor is to be invoked using shell1.
Editor is the determined editor (see edit_source1), without
the full path specification, and without possible (exe) extension.
Command is an atom describing the command. The pattern
%f is replaced by the full file-name of the location, and
%d by the line number. If the editor can deal with starting
at a specified line, two clauses should be provided, one holding only
the %f pattern, and one holding both patterns.
The default contains definitions for vi, emacs, emacsclient, vim and notepad (latter without line-number version).
Please contribute your specifications to .
prolog_edit:load0 Normally not-defined multifile predicate. This predicate may be defined to provide loading hooks for user-extensions to the edit module. For example, XPCE provides the code below to load swi_edit, containing definitions to locate classes and methods as well as to bind this package to the PceEmacs built-in editor.
listing1+Pred List specified predicates (when an atom is given all predicates with this name will be listed). The listing is produced on the basis of the internal representation, thus loosing user's layout and variable name information. See also portray_clause1. listing0 List all predicates of the database using listing1.
portray_clause1+Clause Pretty print a clause. A clause should be specified as a term `Head :- Body'. Facts are represented as `Head :- true'.