4.4 Editor Interface
AllApplicationManualNameSummaryHelp

  • Documentation
    • Reference manual
      • Built-in Predicates
        • Editor Interface
          • edit/1
          • edit/0
          • Customizing the editor interface
            • prolog_edit:locate/3
            • prolog_edit:locate/2
            • prolog_edit:edit_source/1
            • prolog_edit:edit_command/2
            • prolog_edit:load/0
    • Packages

4.4.1 Customizing the editor interface

The predicates described in this section are hooks that can be defined to disambiguate specifications given to edit/1, find the related source, and open an editor at the given source location.

prolog_edit:locate(+Spec, -FullSpec, -Location)
Where Spec is the specification provided through edit/1. This multifile predicate is used to enumerate locations where 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 basename of a loaded file and as the name of a predicate, FullSpec will be bound to file(Path) or Name/Arity.

Location is a list of attributes of the location. Normally, this list will contain the term file(File) and, if available, the term line(Line).

prolog_edit:locate(+Spec, -Location)
Same as prolog_edit:locate/3, but only deals with fully specified objects.
prolog_edit:edit_source(+Location)
Start editor on Location. See prolog_edit:locate/3 for the format of a location term. This multifile predicate is normally not defined. If it succeeds, edit/1 assumes the editor is started.

If it fails, edit/1 uses its internal defaults, which are defined by the Prolog flag editor and/or the environment variable EDITOR. The following rules apply. If the Prolog flag editor is of the format $<name>, the editor is determined by the environment variable <name>. Else, if this flag is pce_emacs or built_in and XPCE is loaded or can be loaded, the built-in Emacs clone is used. Else, if the environment EDITOR is set, this editor is used. Finally, vi is used as default on Unix systems and notepad on Windows.

See the default user preferences file customize/init.pl for examples.

prolog_edit:edit_command(+Editor, -Command)
Determines how Editor is to be invoked using shell/1. Editor is the determined editor (see prolog_edit:edit_source/1), without the full path specification, and without a possible (.exe) extension. Command is an atom describing the command. The following %-sequences are replaced in Command before the result is handed to shell/1:

%eReplaced by the (OS) command name of the editor
%fReplaced by the (OS) full path name of the file
%dReplaced by the line number

If the editor can deal with starting at a specified line, two clauses should be provided. The first pattern invokes the editor with a line number, while the second is used if the line number is unknown.

The default contains definitions for vi, emacs, emacsclient, vim, notepad^* and wordpad^*. Starred editors do not provide starting at a given line number.

Please contribute your specifications to bugs@swi-prolog.org.

prolog_edit:load
Normally an undefined 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 library(swi_edit), containing definitions to locate classes and methods as well as to bind this package to the PceEmacs built-in editor.
:- multifile prolog_edit:load/0.

prolog_edit:load :-
        ensure_loaded(library(swi_edit)).