Did you know ... Search Documentation:
Title for pldoc(default)
Branch: development (switch to stable),
version to version

SWI-Prolog Changelog from version 9.3.21 to 9.3.29

[Sep 1 2025]

  • FIXED: translate_bindings/5 looped As CA1_LPROC arguments were resolved against the head module rather than the body context, this predicate called itself rather than the local defininion in toplevel.pl.

    This predicate is used by Pengines and SWISH.

[Aug 25 2025]

  • TEST: term_hash/2 for LibBF on little endian machines.
  • TEST: Update term_hash/2 tests for big endian results.
  • MODIFIED: Removed '$open_xterm'/5 This predicate allowed for using the xterm application to provide a console for a background thread. This is now covered by Epilog. Also, xterm is no longer widely supported.
  • TEST: term_hash/2: hash depends on GMP vs LibBF. Handle and document.
  • THEME: dark: darker colour for unused import background

[Aug 24 2025]

  • FIXED: WASM: Avoid leaning strings in Prolog.get_chars()
  • WASM: Added Prolog.__with_strack_strings() This interface allows for cleanup of temporary strings. It provides a WASM version of PL_STRINGS_MARK() ... PL_STRINGS_RELEASE()

[Aug 22 2025]

  • FIXED: edit/1 to merge all locations considered identical.

[Aug 20 2025]

  • TEST: Fixed test for simplified ansi_format/3.
  • FIXED: Inherit the Prolog flag max_integer_size in new threads.

[Aug 7 2025]

  • MODIFIED: term_hash/2: extended range As tagged integers now have the same range on all platforms, the range for term_hash/2 has been extended to the max tagged integer.

    You can get the old hash by masking the lower 24 bits.

  • BUG: The test values for big endian are not updated as I do not have access to big endian hardware right now. Please submit the corrected values. See tests/core/test_hash.pl.

[Aug 19 2025]

  • ADDED: set_thread/2 Generic interface for modifying thread properties. Currently controls the debug status of a thread. Will absorb most other properties.
  • DOC: thread_property/2 did not document the debug property.

[Aug 7 2025]

  • FIXED: swipl-win: print backtrace on uncaught exceptions in Epilog.
  • FIXED: Simplification in 057d69387e240ebf90af8f9c9d5783c5203887fa was wrong.
  • FIXED: #1384 message printing is disabled after an uncaught exception inside a transation Assert and erase listen inconsistently to P_TRANSACT, causing a clause for thread_message_hook/3 to remain.

[Aug 5 2025]

  • THEME: Support dark theme in selections in text objects.

[Aug 3 2025]

  • DOC: Cmake font options

[Aug 2 2025]

  • THEME: Redefine graphical.selected_foreground and graphical.selected_background

[Aug 1 2025]

  • THEME: dark: fixes for GUI tracer breakpoints and redo ports.
  • ENHANCED: ls/0,1: create hyperlinks for Prolog source files. File presentation style can be tweaked using the shell:file_style/2 hook.
  • THEME: dark theme to improve readability of => rule guards.

[Jul 31 2025]

  • BUILD: Avoid relying on environment variables for xpce steps Somehow, using cmake --env does not work correctly on all platforms. This patch adds and uses an -DSDL_VIDEO_DRIVER=dummy commandline option for the Prolog build steps.

[Jul 30 2025]

  • FIXED: incorrect inclusion of cluster data in default text profile data First attempt at new format incorrectly tried to merge callee data into predicate overall times
  • FIXED: predicate_label/2: support [] as functor name
  • ADDED: prolog_trace_interception/4: support halt Halting from the callback no longer works since halt/1 is implemented as an exception. This caused "Exit Prolog" from the GUI debugger to be ignored.
  • THEME: Make quasi-quotation syntax readable in dark theme [no ci]

[Jul 28 2025]

  • UNICODE: Updated library(unicode/blocks) Updated to version 16.0.0 of the Unicode standard.
  • THEME: dark theme to fix up cycle menus.

[Jul 25 2025]

  • ENHANCED: Update profile/1,2 text output Enhanced default version of show_profile/1
  • FIXED: Prevent building the pack.pl app when there is no library_pack The library is build conditionally starting from 2793ca547c3b185f50d2ce803c582874fc583b70.

    Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com>

[Jul 24 2025]

  • PPA: Fixed plucky version to include the GUI
  • THEME: dark: improve colour for option_name and SSU rule guard.
  • FIXED: prolog_read_source_term/4L respect :- encoding(+Enc)
  • FIXED: Avoid Unicode characters in otherwise ASCII files Files used Unicode variations on ' and -

[Jul 23 2025]

  • FIXED: swipl-win installation for MacOS when not creating a bundle.
  • PPA: Updated scripts/make-ppa to setup building without gui for older distros

[Jul 22 2025]

  • ADDED: Empty light theme file.

[Jul 21 2025]

  • FIXED: Code generation for unification moved to the head. Minimal test case: p(X, Y) :- X = f(Y), Y = a.. Issue occurs if a variable is accessed (Y) before its unification must be moved to the head.
  • FIXED: Building; typo in prolog_pack/http fix
  • BUILD: Avoid installing some libraries with missing dependencies - Do not install library(prolog_pack) if http support is missing.
    • Do not install SICStus timeout compatibility if multi-threading is not enabled.

[Jul 20 2025]

[Jul 19 2025]

  • THEME: Dark theme declarations for class list_browser and the profiler. Requires the SDL version of xpce.

[Jul 18 2025]

  • ENHANCED: Improve dark theme Only applies with new SDL based xpce

[Jul 17 2025]

  • PORT: Fixed MacOS installer to include transitive dependencies and fix the @rpath.

[Jul 16 2025]

  • BUILD: Fixed PGO build with -DEPILOG=ON
  • BUILD: Ensure proper GUI environment for building the manual.

[Jul 10 2025]

  • ADDED: Support -Dtheme=<theme>

[Jul 6 2025]

  • PORT: Update scripts/macos-deps.sh Update most ports, add SDL3, SDL3_image, cairo and pango.

[Jul 10 2025]

  • ADDED: Working directory handling for MacOS app.

[Jul 9 2025]

  • PORT: Create a MacOS bundle based on Epilog.

[Jul 7 2025]

  • ENHANCED: interactor/0,1: use epilog when available. In the long term we will drop xterm support as well as native win32 support.

[Jul 5 2025]

  • EPILOG: Deal with --win-app option in a way that also supports epilog.
  • ENHANCED: Remove thread context for threads running the REPL loop. This avoids the complicating [Thread xyz] note on messages in alternate consoles such as Epilog or SSH shells.
  • ADDED: Prolog flag toplevel_thread. This flag is true in a thread that is currently running a REPL loop.
  • FIXED: Edit from PceEmacs using popup could raise an error. E.g. ERROR: is_file_spec/1: No rule matches prolog_edit:is_file_spec(20_625_830)

[Jul 4 2025]

  • BUILD: Add CMake -DEPILOG option This option prepares the core for the upcoming Epilog configuration. It must be used with the sdl branch of packages/xpce. Effect:
    • Drop library(readline)
    • Drop swipl-win, either Windows version or Qt version.
    • Create a new swipl-win that is a copy of swipl that sets the epilog flag. Depending on the platform some more additions may be needed.

[Jul 3 2025]

  • PORT: Find MinGW DLL dependencies more dynamically This provides two CMake functions to find the direct and indirect MinGW DLLs that must be included into the distribution
  • ADDED: Allow storing the tty screen size with a stream. This is required for environments where we use a non-tty I/O device such as a pipe or socket while there is a notion of a tty size. Currently used for Epilog on Windows.

[Jul 1 2025]

  • MODIFIED: print_term/2: print dict tags and compound functors using the current write options. Both used to be printed hardwired using ~q (quoted).
  • FIXED: When rational_syntax is natural, write /(Int,Number) with spaces. This ensures such a term is not read as a rational number.

[Jun 30 2025]

[Jun 28 2025]

  • PORT: Avoid errors on sharing violations.

[Jun 26 2025]

  • FIXED: Windows: comparing string equality with surrogate pairs Comparing strings with surrogate pairs could signal inequality while the strings are equal.
  • FIXED: Unification to chars or codes of wchar_t text on Windows.

[Jun 25 2025]

  • PORT: Discontinue 32-bit windows builds.

[Jun 23 2025]

  • PORT: Support library(editline) (libedit) on Windows. This provides cross-platform commandline editing with Prolog-sensitive completion.

[Jun 25 2025]

  • ADDED: Windows: tty_size/2 to also work on Windows consoles.

[Jun 23 2025]

  • WASM: Deal with new PL_prompt_string() API

[Jun 22 2025]

  • MODIFIED: Signature for PL_promot_string() and PL_prompt_next() These API functions now use the Prolog stream as argument to facilitate better support for Windows.

[Jun 19 2025]

  • ADDED: IOSTREAM* control message to get the Windows HANDLE
  • FIXED: wait_for_input/3: use Swinsock() from pl-stream.c rather than a local macro This ensures proper error messages if the input is not a socket.
  • MODIFIED: PL_dispatch() and friends now use IOSTREAM* instead of int. This is a first step to merge simultaneous handling of console outout and GUI dispatching for POSIX systems and Windows to a common design.

[Jun 18 2025]

  • WINE: Waiting for windows console input now works for wine.
  • PORT: Make installing INDEX.pl files work on Windows. Concurrency may cause sharing violations. This patch retries renaming the index file several times.

[Jun 17 2025]

  • FIXED: Possible early reclaim of closure blob after unwrapping a predicate. PL_unregister_atom() was called twice.

[Jun 11 2025]

  • ADDED: Incorporate epilog into the toplevel. These patches prepare for the XPCE based swipl-win. May be started by using the sdl branch of xpce and run as
    swipl -Depilog [arg ...]

[Jun 7 2025]

  • ADDED: '$run_state'/1 to query the current run state Can be used to detect code is running as part of the cleanup hooks.

[May 28 2025]

  • BUILD: Use SDL_VIDEODRIVER=dummy for running Prolog steps This makes sure the new SDL based xpce does not try to open graphics and is harmless on other targets.

[May 27 2025]

  • FIXED: Move swipl-win history support to library(win_menu). This library is loaded as source and thus conditional compilation applies. library(prolog_history) is compiled to .qlf. Now the code is also where it belongs.
  • FIXED: When generating _X variable names, avoid query variable names. Consider the below example by Jan Burse. Using _A in the answer is at least confusing. We must not only skip variable names that appear in the projection, but also variable names from the query that are not in the projection.
    ?- length(L,2), f(L) = R, S = [_A].
    L = [_A, _B],
    R = f([_A, _B]),
    S = [_A].

[May 24 2025]

  • FIXED: Terminal REPL loop using thread_exit(io_error) on an io_error during read.
  • FIXED: Termination of a REPL loop due to error state of the streams This did not properly close the query, crashing the system in the thread cleanup.
  • FIXED: thread_join/2: could leave L_THREAD mutex locked on error.

[May 23 2025]

  • ADDED: Allow thread_signal/2 to raise native signals by number. This can be used to raise e.g. SIGINT in a thread to debug it.

[May 22 2025]

[May 17 2025]

  • FIXED: write/1,2 to take rational number syntax from module user. Before, only write_term/2,3 supported "natural" rational number syntax.

[May 16 2025]

  • FIXED: Make the stream macros Suser_input safe when called from a non-Prolog thread Called from a non-Prolog thread caused these macros to crash. They now return NULL. The main-thread I/O can be obtained using Sinput, Soutput or Serror.

[May 2 2025]

  • ADDED: Allow hooking into the terminal link generation.
  • FIXED: Various details for the sys app
  • ADDED: Prolog flag linux
  • FIXED: QLF format to store references to predicates in the current module by functor. Otherwise, if a predicate is imported the clause will point at the import location, bypassing the predicate resolution that happens when loading the source.

[May 1 2025]

  • BUILD: Avoid cmake warnings.

[Apr 30 2025]

  • ENHANCED: jiti_list/0,1 - Provide collision stats - Order predicates alphabetically - Use tty hyperlinks when supported to allow jumping to the definition
  • FIXED: ansi_hyperlink/3: Fix position logic Make sure the column admin is not updated when writing the escape sequences. This allows mixing with format/1-3 tag specifiers.

[May 1 2025]

  • ENHANCED: Make sure that small clause index tables have no collisions.
  • ENHANCED: Use Fibonacci hashing for clause indexes.

[Apr 30 2025]

  • ENHANCED: Index performance on common arguments. Given a predicate with many clauses that has one or more arguments with only a few possible values and (thus) many clauses in the hash buckets for each of these values force fast failure when using a query with a value that does not appear in that argument.

    For example, suppose we have a business database that records the legal status in one of the columns (arguments). A query with a non-existing lega status should fail quickly. In the old system, the small number of values could easily lead to a hash colission, causing the system to try all clauses with the legal status of the collision.

    This issue was reported by Abramo Bagnara

  • FIXED: #1364 nb_set_to_list/2 could skip elements.

[Apr 29 2025]

[Apr 28 2025]

[Apr 25 2025]

  • ENHANCED: Windows: use native fonts for bold and support bold+underlined.
  • ADDED: Freedesktop.org Desktop integration files. This patch adds a directory desktop with icons and desktop integration files. A particular version can be activated as desktop application using
    swipl sys desktop [--global] install

    The activation canbe removed using

    swipl sys desktop [--global] remove
  • ADDED: Windows swipl-win.exe: support underlined fonts Support \e[4m to print underlined text.

[Apr 23 2025]

  • ADDED: Windows: swipl-win.exe : support hyperlinks. This patch enables terminal escape sequences to embed hyperlinks. file:// links are then mapped to edit/1 and other links are opened in the browser.

    This patch also fixes several issues and provides cleanup to the swipl-win.exe console code.

  • FIXED: Report correct number of clauses when loading .qlf files Reported 0 (zero) clauses for all .qlf files.
  • FIXED: ?- edit(file('myname.pl')). to create a new file.
  • FIXED: Do not precompile several files This patch stops precompiling the libraries win_menu, threadutil and check_installation. The sources are full of conditional compilation that also depends whether or not swipl or swipl-win is started.

    Using runtime conditionals is possible, but would lead to many undefined predicate warnings.

  • FIXED: Create menu in Windows and Qt consoles. Broken due to conditional compilation that excluded the call to init_win_menus/0 from the .qlf file.
  • BUILD: prohibit building in the source directory.

[Apr 22 2025]

  • TEST: Include clpfd test with tabling.
  • DOC: Constraints and tabling

[Apr 21 2025]

  • TEST: Merge XSB attributed variable tests. This updates several of the tests, documents what tests cannot be executed due to incompatibilities and extends the XSB dialect emulation to deal with a later part of the attributed variable interface.

    The tests both deal with basic attribute handling and with (simple) tabling that involves attributes.

[Apr 22 2025]

  • FIXED: Support attributed variables in "fastheap" terms. These are used by tabling and delimited continuations.

[Apr 21 2025]

[Apr 18 2025]

  • XSB: Added basic attributed handling to emulation Library machine now exports get_attr/3, put_attr/3, del_attr/2 and install_verify_attribute_handler/4.
  • ADDED: library(prolog_profile): Prolog flags for defaults - profile_ports provides the default "mode", now true - profile_sample_rate provides the default sample rate (200)
  • DOC: clause/3: describe properties of clause references.
  • DOC: retractall/1 and logical update view section.
  • DOC: Moved some sections in the "Database" section of the manual.
  • BUILD: Better support for cmake < 3.20
  • PPA: Updated releases - Added Plucky Puffin (25.04) - Removed Focal Fossa (20.04) and Bionic Beaver (18.04)

    The latter two fail to build the Janus interface due to too old Python versions.

[Apr 14 2025]

[Apr 17 2025]

  • FIXED: Allow building with installed .QLF files when the VM changes. A VM mismatch raised a fatal error during boot. This is now relaxed to a normal exception.

[Apr 11 2025]

  • ADDED: Partial support for attributed variables in tries. This first step deals with inserting and generating. Trie compilation is not yet supported (crashes on unexpected key in the trie).

[Apr 17 2025]

  • FIXED: swipl qlf app: report incompatible .qlf files

[Apr 15 2025]

  • BUILD: Provide additional .qlf dependencies.
  • FIXED: swipl qlf app: dependency warnings and clean subcommand

[Apr 14 2025]

[Apr 10 2025]

  • INSTALL: Enable compiling .qlf files by default.
  • ENHANCED: swipl qlf app - info:
    • by default list all info - list:
    • add -u (--update) to only list out-of-data .qlf files
    • Produce machine format if output is not a terminal.
  • ENHANCED: Add macro expansion dependencies to .qlf files.
  • ADDED: swipl qlf info to accept multiple files.
  • ENHANCED: source_file_property/2 performance Speedup source_file_property(File, load_context(...)).
  • ENHANCED: Distinguish different file dependencies in .qlf files.

[Apr 9 2025]

  • ENHANCED: qlf file record included files These are also shown by
    swipl qlf info -s <file.qlf>
  • ENHANCED: Record included files in .qlf files with path translation.
  • FIXED: source_file_property/2 to work without sources.
  • FIXED: qlf_make/0 for out-of-date computation for aggregate .qlf files.
  • FIXED: Allow for discontiguous autoload/1 and autoload/2 directives.

[Apr 8 2025]

  • FIXED: dicts_to_compounds/4 if dicts have non-atom tags.
  • DOC: Singleton section was outdated. After comment by Jan Burse.

[Apr 7 2025]

  • PORT: Deal with dropped support for partial literals in phrase/2,3
  • MODIFIED: ISO: phrase/2,3: do not allow for partial lists as terminal
  • FIXED: WASM: Missing (chr) dependency caused build to fail.

[Apr 5 2025]

  • WASM: Added table for mapping HTML attribute names to DOM attributes.

[Apr 4 2025]

  • FIXED: prolog_load_context/2 for file to work correctly for .qlf.
  • FIXED: Only emit hyperlinks if hyperlink_term is true.

[Apr 3 2025]

  • ADDED: Start a new library(dom) based on html//1
  • MODIFIED: WASM: Move library(dom) to the dialect tau. We plan on an alternative library(dom). As a consequence, we move the Tau emulation library to the newly added Tau support in SWI-Prolog's dialect support.
  • FIXED: library(dom) set_attr/3: allow for atoms as values.

[Apr 2 2025]

  • BUILD: Support cmake < 3.20
  • FIXED: Using tabling when configured for debugging with autoloading disabled.
  • WASM: Enhanced error message when evaluating :=/2
  • FIXED: Clear FR_SKIPPED after skip/up in yield-based debugger.
  • FIXED: continue in trace mode after hitting a spy point. This was broken when using Prolog defined tracing in recent rewrites.
  • FIXED: Retrieving source info for Head --> "terminal", ...

[Apr 1 2025]

  • DEBUG: Attempt to improve visible trace points in the debugger.

[Mar 31 2025]

[Mar 30 2025]

  • ADDED: WASM: Prolog.promise_event()
  • WASM: bind/4 can now handling JavaScript objects without using the database
  • WASM: Updated bind.html demo.

[Mar 29 2025]

  • ADDED: Complete the Tau-Prolog compatibility library(dom).

[Mar 30 2025]

  • ADDED: WASM: Allow for nested #(Value)

[Mar 29 2025]

  • WASM: Prolog.bind(): added options.
  • BUILD: Install pldoc/hooks.pl instead of the .qlf file This is an include file that is used by the web server to customise PlDoc.

[Mar 27 2025]

[Mar 26 2025]

  • ADDED: Support access to public predicates for library indexes
  • ADDED: xref_public_list/2: get information from library INDEX.pl Using the INDEX.pl file provides a fast and simple way to get the library exports and meta-predicate information. Still need to deal with public predicates.
  • MODIFIED: INDEX.pl files. Thes files used to contain
    • index(Name, Arity, Module, File)

    This is now modified to

    • index(Head, Module, File)

    Where Head contains (where known) the mode and/or meta-predicate indicators. The index files now also contain the op(Pri,Type,Name) terms from the export list.

    This provides faster and simpler access to meta-predicate and operator relations between modules.

  • FIXED: edit/1 using edit(file(File)).
  • FIXED: edit/1: find e.g. library(lists) if only qlf files are

installed.

[Mar 25 2025]

  • ADDED: prolog_colourise_term/4: option current_variable(Name) This causes the marking to mark the named variable with the class current_variable.
  • WASM: Prolog.consult(): added engine:true option. This allows loading files to proceed asynchronously.

[Mar 24 2025]

  • ADDED: xref_source/2: stream(In) option This allows processing arbitrary data.
  • WASM: Do not install the package build tools.
  • ADDED: qlf app swipl qlf info -e file.qlf Show exports of the .qlf file.
  • ENHANCED: library(prolog_xref) without sources Get exports from .qlf files.

[Mar 23 2025]

  • MODIFIED: edit/1: use dicts for representing (partial) locations. As a result, hooks info the editing infrastructure need to be updated.
  • ENHANCED: edit/1 - Feedback on locations - Code simplification and modernizing

[Mar 22 2025]

[Mar 21 2025]

  • DOC: Update CMAKE.md to include instructions on Python installation Added a list of the options useful for installing Janus

[Mar 20 2025]

  • DOC: install with symlinks

[Mar 21 2025]

  • WASM: Use lz4 compression for data file.
  • WASM: Demo server to serve library sources.
  • WASM: Support library(chr). The package was compiled, but only partially installed and thus non-functional.
  • WASM: Enable adding packages in the node version This was disabled due to issues with Emscripten opendir(), but these seem resolved.
  • WASM: Support INSTALL_QLF and INSTALL_PROLOG_SRC CMake flags
  • WASM: Remove several libraries that cannot be supported
  • BUILD: Allow qlf builds without PlDoc and xpce

[Mar 20 2025]

  • DOC: WASM function Prolog.query() Documented nodebug and string options.
  • WASM: Prolog.query(): add option {string:"atom"}
  • ENHANCED: Generalise user interaction on answer Allow reusing the toplevel answer user interaction by using an alternative input.
  • ENHANCED: qlf app to report .qlf files without sources. Used to report these as out of data.
  • FIXED: We must insert I_CONTEXT in multifile predicates Multifile predicates are typically installed in modules using target:head :- body, where body is executed in the containing module. This is achieved using an I_CONTEXT VM instruction. Before, when the predicate contains one such clause, it set P_MFCONTEXT and inserted a I_CONTEXT for each subsequent clause. When using .qlf files though, the files may be loaded in different order than when creating the .qlf files, leading to clauses without an I_CONTEXT instruction to follow clauses with this.

[Mar 19 2025]

  • ENHANCED: library(prolog_xref): cleaner exception handling.
  • ENHANCED: Allow cross-referencer to deal with .qlf files
  • BUILD: Added CMake option -DINSTALL_PROLOG_SRC=OFF This can be used together with -DINSTALL_QLF to ship the Prolog libraries as .qlf files without including the sources.

[Mar 18 2025]

  • FIXED: Handle autoload/1,2 declarations in aggregate .qlf files
  • FIXED: load_files/2: resolve to files loaded from .qlf Some qlf files may load multiple source files. When looking for a file in e.g. use_module/1,2, first try the file system, but on failure ee whether we loaded a .qlf file that registered the required file.
  • FIXED: Use canonical .pl files for all admin purposes. Despite the fact that code is loaded from .qlf files, use the .pl file from which the .qlf file is compiled for admin purposes.
  • ADDED: '$qlf_module'(+File, -Dict) This predicate extracts properties for a module without loading it. This is required to make autoload/1,2 work if we remove the source files.

[Mar 17 2025]

  • MODIFIED: absolute_file_name/3: distinguish file types prolog and source These used to be synonyms. Now prolog includes .qlf and source does not.
  • INSTALL: Install .qlf files if these have been build.
  • ADDED: library(prolog_qlfmake) This library allows for compiling the entire library to .QLF files.
  • ADDED: Prolog flag source. This flag can be used to ignore the .qlf files in the library and load the .pl (source) files instead.
  • ADDED: library(prolog_qlfmake) This library allows for compiling the entire library to .QLF files.
  • FIXED: Do not keep an erased clause when doing an incremental compilation

[Mar 16 2025]

  • ENHANCED: qcompile/1: preserve predicate properties When compiling clauses for another module as commonly done as a return of term_expansion/2, preserve the multifile and dynamic properties, such that the module can be loaded as qlf and later loading of the module into which the clauses are added does not wipe the predicate.

[Mar 15 2025]

  • FIXED: Debugging the fail port of Prolog defined built-in predicates.

[Mar 13 2025]

  • FIXED: If engines are enabled without threads, call the main engine main.

Package debian

[Jul 22 2025]

  • PPA: Updated to support xpce based GUI This deletes the Qt console (swi-prolog-win package) and replaces the X11 dependencies with SDL+cairo+pango.

Package clib

[Jun 19 2025]

  • COMPAT: Use new PL_dispatch() API.

[May 23 2025]

Package cpp

[Jun 22 2025]

  • PORT: Deal with new PL_prompt_string() and PL_prompt_next() API.

[Jun 19 2025]

  • COMPAT: Use new PL_dispatch() API.

[Apr 11 2025]

  • FIX: pointer to local stack

[Apr 3 2025]

  • ENHANCED: improved C++ exception hierarchy Changed the exceptions thrown by PlEngine and PlFrame so that they're safe to use outside the try...catch context; and provided a way to make all other exceptions safe outside a Prolog frame.

Package http

[Jun 15 2025]

  • ENHANCED: Use url(URL) for HTTP startup message.

[Jun 13 2025]

[May 2 2025]

  • FIXED: json_skip_ws/3: Pass exception.
  • FIXED: http_open/3: when applying a transfer filter, do not close the output Instead, create a new stream pair from the transfer filter stream and the output stream.

[Apr 29 2025]

  • SECURITY: Make http handlers read remaining request data for Keep-alive When using a Keep-alive connection the core HTTP infrastructure now ensures that, if the request has a request body (Content-length) exactly this number of bytes is read from the input before returning the stream to the Keep-alive mechanism.

    This prevents crafted content to generate additional HTTP requests.

  • FIXED: http_open/3: only catch error(Formal, Context).
  • FIXED: Multipart reader to update stream position data of parent stream. This is a tentative fix, lacking a test case. It still looses the line count/pos. That could be fixed by calling S__fupdatefilepos_getc() on all processed data.

    See https://swi-prolog.discourse.group/t/multipart-open-does-not-advance-the-streams-pointer/8965/3

[Apr 7 2025]

  • PORT: Avoid partial lists in DCG rules (ISO compliance)

[Apr 3 2025]

[Apr 2 2025]

  • FIXED: term//1: possible exception on compound_name_arity/3. This happened when spacing around operators need to be computed and the left or right hand of the operator is a blob.

[Mar 29 2025]

  • FIXED: Running out of file descriptors if device for log files is full. This patch is a serious cleanup of error handling in the HTTP log library.

[Mar 27 2025]

  • ADDED: Provide cross-referencing hooks for :- html_meta(+Decls)

[Mar 20 2025]

  • FIXED: #168 http_daemon/0,1: exit with status 0 The startup was translating all exceptions into halt(1). That is wrong after halt is implemented as throw(unwind(halt)).

[Mar 17 2025]

  • FIXED: library(http/jquery): support Qlf compilation ensure_jquery/1 cannot use conditional compilation. We must use a runtime conditional instead.
  • CLEANUP: Avoid demo dependency on xpce.

[Mar 14 2025]

  • FIXED: term//2: make operators a trigger.
  • FIXED: term//2: portray(true) implies numbervars(true).

Package libedit

[Jul 3 2025]

  • ADDED: Support winlibedit hook to get the terminal size. This allows fetching the terminal size for Epilog on Windows.

[Jul 2 2025]

[Jun 30 2025]

  • ENHANCED: Use autoload_call/1 to avoid undefined errors.
  • FIXED: Read multi-byte characters on non-Windows.

[Jun 28 2025]

  • ADDED: Support Windows pipe handles for I/O This is work in progress to support Epilog on Windows. It consists of changes to our winlibedit port of libedit. These changes do not use Console mode setting and read using ReadFile() rather than ReadConsoleInput().

[Jun 22 2025]

  • PORT: Support Windows

[Jun 23 2025]

  • COMPAT: Update for new signature for PL_prompt_string() and PL_prompt_next()

[Jun 19 2025]

  • COMPAT: Use new PL_dispatch() API.

[Jun 17 2025]

  • ENHANCED: el_wrap/4 to raise an error if the stream is already wrapped.
  • FIXED: Avoid memory leak on FILE structs created by fdopen()
  • FIXED: el_history/2: handling of setsize() was undefined.

[May 28 2025]

  • ADDED: Allow using the (integer) fd to specify the editline instance This allows accessing the history of other threads.

[May 26 2025]

  • ENHANCED: Sync the positions of the terminal streams.

Package pldoc

[Apr 21 2025]

[Mar 31 2025]

  • ADDED: PlDoc to LaTeX converter: file_synopsis(Text) option Allows for overwriting the default synopsis. Used to document some not-installed libraries.

[Mar 29 2025]

  • ADDED: Support "=" mode. This is a proposal in the PIP meetings to deal with "Output" arguments.

Package readline

[Jun 22 2025]

  • PORT: Deal with new PL_promot_string() and PL_prompt_next() APIs

[Jun 19 2025]

  • COMPAT: Use new PL_dispatch() API.

Package swipl-win

[Apr 25 2025]

  • FIXED: win_message_box/2: crash if image option cannot be found Now shows the box without image and throws an exception afterwards.

Package xpce

[Aug 27 2025]

  • FIXED: Gracefully handle failures to inspect changes to the attached displays.

[Aug 26 2025]

  • ADDED: Cursor home/end key support on all editable text.

[Aug 25 2025]

  • FIXED: frame->label: Allow using from any thread.
  • ENHANCED: Make a subwindow only get the input focus if ->_wants_keyboard_focus succeeds. This notably prevents loosing PceEmacs focus after a click in the menu.
  • FIXED: Use a method rather than a function call if a window looses focus. This allows the Prolog tabbed_window class to forward this event.
  • ADDED: PceEmacs: Shift-left-click extends the selection.

[Aug 24 2025]

  • ADDED: Class terminal_image event handling to extend the selection on SHIFT-click
  • FIXED: Make sure modifier buttons are set for mouse up/down events.

[Aug 23 2025]

  • FIXED: PceEmacs: make shift/control-cursor-keys work again. E.g. Ctrl-<cursor_right> moves by word and cursor movement with SHIFT enabled extends the selection.

[Aug 22 2025]

  • CLEANUP: Remove various tools from the manpce/0 window.
  • CLEANUP: PceEmacs: Remove Pce popup from Prolog mode
  • ADDED: epilog_insert_menu/2 and epilog_insert_menu_item/4. Compatible with old win_insert_menu/2 and win_insert_menu_item/4. These predicates let an application control the menus.
  • ADDED: menu_bar->append: before argument.
  • ADDED: Implement app config hook to set the window title. This sets the title when running swipl-win file.pl ...
  • ADDED: Epilog: Allow loading a file from the window popup.
  • ADDED: `terminal_image<-url` to get the link url from a location.

[Aug 20 2025]

  • FIXED: Use PceEmacs *Documentation* for help.
  • FIXED: PceEmacs popup for Documentation Run in Epilog window. Actually, we should use xpce to display the HTML.
  • FIXED: Class list_browser binding for backspace.
  • FIXED: Keyboard focus handling for completer windows. If there is a grabbing window, redirect all keyboard input to the grabbing window.
  • FIXED: class list_browser to handle arrow keys.
  • FIXED: Avoid destroying the completion browser. This is now a transient frame

[Aug 19 2025]

  • FIXED: When running as epilog, disable debugging the main thread.

[Aug 7 2025]

  • FIXED: Establish platform dependent resource defaults. This notably makes Apple keybindings default on MacOS.
  • ENHANCED: class terminal_image to use methods for copying This allows for redefining terminal_image->copy.
  • FIXED: UTF8ToString() created a name for ASCII strings.

[Aug 6 2025]

  • FIXED: Locking for Windows.
  • CLEANUP: Simplify and share locking code between Windows and POSIX
  • FIXED: Make all xpce stack related variables thread specific.

[Aug 5 2025]

  • FIXED: Support multiple threads in xpce variable handling This patch makes @arg1, etc. supporting multiple Prolog threads making progress.
  • FIXED: Possible variable block corruption in expression evaluation.
  • ADDED: Implement selection for class text.
  • FIXED: Feedback for class path selection when using dark theme.
  • FIXED: re-colour bitmaps to fore and background. Accessed @nil as colour.
  • FIXED: Releasing and reacquire the xpce global lock. Caused incorrect lock counts if the lock was held by another thread when called.
  • FIXED: Deadlock after new/2 fails due to module error.
  • BUG: Temporarily disabled library(pce_unclip). Getting this to work requires changes due to modern restrictions of event grabbing.

[Aug 4 2025]

  • CLEANUP: Track frame position relative to its display.
  • ADDED: Process keypad command keys when not in numlock mode.
  • ENHANCED: Draw window initial content before showing the window.
  • ENHANCED: When hovering a menu bar, first open the next popup before closing the old. This avoids flickering the main window due to regaining/loosing focus.
  • FIXED: Honour frame->input_focus if there is a subwindow that has defined a keyboard_focus.
  • FIXED: Windows handling multiple epilog windows.
  • MODIFIED: Handle Alt-right (Alt-Gr) as possible text input.
  • FIXED: Possible crash in click detection.

[Aug 3 2025]

  • ENHANCED: Better font defaults and allow controlling the fonts via CMake.
  • DOC: Updated Defaults.user with information on how to map fonts.
  • FIXED: Font viewer (swapped arguments)

[Aug 2 2025]

  • FIXED: Deal with distinguishing text input from other keyboard events.
  • FIXED: Allow or Unicode strings in resource files.
  • FIXED: Start fontviewer from scratch
  • FIXED: PceDraw attribute editor failed to open.
  • FIXED: Dark theme: draw selection handles using the foreground colour. Used to be fixed to black. Also fixed class bezier that has its own code.

[Aug 1 2025]

  • FIXED: Windows pipe size for epilog threads. This seems to fix two issues: much faster console output and no more pending output.
  • FIXED: Thread monitor called between/3 using a float. This is due to fonts that now have float sizes.
  • FIXED: Only reset xpce on aborts in the xpce thread.
  • FIXED: Invoking display->confirm with non-visual for argument.
  • ENHANCED: Allow frame->expose to be called from any thread.
  • ADDED: class(epilog) as application managing all epilog frames. The object @epilog can be used to find and act on existing epilog windows.

[Jul 31 2025]

  • ENHANCED: Debug message browser. Use close for closing the window, make help open the web page on library(debug) and provide a class variable for styling.
  • FIXED: frame->open_centered on systems that respect position hints.
  • ENHANCED: PceEmacs sgml mode to avoid dark blue. Makes it more usable with a dark theme.
  • FIXED: Avoid accessing SDL main functions for creating a window. This ensures no SDL restrictions are violated when creating an xpce window in a thread.
  • DEBUG: Add debugging code to verify we do not call any SDL function from the wrong thread.
  • ENHANCED: Ask the user what to do if the main console is closed.
  • ADDED: library(pce_openframes) Checks still open frames and allow the user to act on them.
  • ADDED: Set the SDL_VIDEO_DRIVER from a Prolog flag. This allows controlling the video driver without using the environment.

[Jul 30 2025]

  • ADDED: Type num. This is the next step in migrating the non-object type Int to support floating point numbers. As yet, the type may be used but int and num behave the same except for conversion from class real and from a string.
  • FIXED: Cmd-+ to enlarge font on MacOS (set to default)
  • ADDED: Epilog support for rescaling the font.
  • FIXED: terminal_image->font to rescale the terminal.
  • ADDED: `font<-rescale` Also fixes the generated object reference to allow for sub-pixel sizes.
  • ADDED: Support frame->set when the window is visible. This allows for progamatic changes to the size and position of already open windows.
  • ADDED: Support updating the displays if a display is moved by the user.
  • FIXED: Exploit new prolog_trace_interception/4 halt This fixes halting from the GUI tracer.
  • PORT: Fixed building on Windows.

[Jul 29 2025]

  • FIXED: Removed normalise argument to ->open
  • ENHANCED: Capture xpce messages in the epilog console. This patch redirects direct console output and Prolog print_message/2 that would print to the Prolog console to an Epilog window. If the message is associated to a thread with an epilog window, use that. Else use the last used Epilog window or just any of them as last resort.
  • ENHANCED: Do exception handling for xpce's main loop.
  • ADDED: Change selection on cycle menus based on the mouse wheel.
  • FIXED: Placement of popup menus on secondary display on MacOS SDL's normalization of the window position on secondary displays is broken. This patch works around this issue.

[Jul 28 2025]

  • FIXED: Make Window creation display aware. On Wayland, new window positions are ignored, but Wayland creates new windows on the "active" display. On MacOS, windows are always created on the primary display unless we place them in the area of a specific display. Our code now tracks the "active" display and opens new windows on this display.
  • MODIFIED: Signatures for opening windows and frames. All these methods now have the signature
    ->open: [position], [display], [grab].

    We need to pass this display if we want to controll the display on which the window is opened.

[Jul 29 2025]

  • ENHANCED: Always enable hyperlinks in Epilog terminals.

[Jul 27 2025]

  • MODIFIED: Font handling This commit removes all outdated X11 oddities from class font and adds modern Pango based naming and behaviour. This adds support for explicit font weight manipulation. This commit also completely rewrites the FontViewer demo program, providing good insight in the available fonts and mapping to xpce.

    Applications using font aliases (fixed, normal, bold, etc.) should work as before. Applications that use explicit font/3 or font/4 terms must be updated in most cases. They keep working, but will often show the default normal font.

  • MODIFIED: Deleted normalised argument for ->open. SDL does not provide the required information and normalises itself.
  • THEME: Control the text colour of cycle menus.
  • FIXED: Type char now accepts the whole unicode range
  • FIXED: Release XPCE lock on method callback to Prolog.
  • FIXED: Avoid deadlock Release XPCE lock when doing I/O through Cprintf() and friends. When output is redirected to an Epilog window this causes a deadlock.

[Jul 26 2025]

  • ADDED: Allow specifying the Pango name and retrieving it.
  • FIXED: Tab handling Now using floats and using `font<-avg_char_width` rather than `<-ex` which is a height rather than a width.
  • ADDED: class(font)->list_fonts
  • MODIFIED: Migrated font resources from class display to class font.
  • MODIFIED: Removed font alias table from display. There is now a global table `@font_aliases`.

[Jul 25 2025]

  • FIXED: Avoid failure building manual index if methods are deleted.
  • CLEANUP: Deleted class monitor. Monitors are represented by instances of class display.
  • CLEANUP: Remove unsupported X11 selection interface details.
  • CLEANUP: Manu X11 specific details.
  • CLEANUP: Remove display->draw_in. Non-portable.

[Jul 24 2025]

  • FIXED: Support MacOS natural scrolling.
  • MODIFIED: Move theme setup from epilog to xpce initialization. As a result, not only swipl-win or epilog/0 listen to the theme, but any xpce application.
  • BUILD: Support older CMake versions Building xpce fails by not finding SDL3::SDL3 when doing compile configuration tests.

[Jul 22 2025]

  • ADDED: Allow user specified theme using display.theme resource. Add this to the GUI Preferences to force a theme. Use default to stop loading a theme file.

    display.theme: dark

  • FIXED: XPCE locking

[Jul 21 2025]

  • MODIFIED: The default image <-> kind is now pixmap.
  • ADDED: image->pixel support.
  • ADDED: Interpret monochrome images as bitmaps.
  • ADDED: Use syntax_table to describe word chars for the terminal.
  • ADDED: Terminal support for select_all.
  • ADDED: Epilog console support for triple-click
  • CLEANUP: Locking types
  • MODIFIED: display->{inform,confirm} Changed signature to Visual, Title, Format, ...
  • ENHANCED: Use system message box for display->{inform,confirm,report} Exploit SDL_ShowMessageBox(). Need to handle the title and window.
  • FIXED: Destroy SDL renderers for subwindows when unmapping a frame.

[Jul 20 2025]

  • ENHANCED: xpce cross referencer GUI Added class variables to support dark theme and show directory names more informative.
  • ENHANCED: Make size of cursor in open_look style a resource.
  • FIXED: Correct layout for text with leading or trailing spaces
  • ENHANCED: xpce demo for HSV colours Show the 3 closest matching named colours and show both the colour box and text in the target colour using the default background.
  • ADDED: `colour<-distance` to compute Ī”E₀₀ distance.
  • ADDED: @colour_list, providing the colour names in logical colour ordering.

[Jul 19 2025]

  • THEME: Make xpce profiler support dark theme. This also requires updating Prolog as there is the dark theme itself defined. This patch only adds class variables to the various colours rather than using hard coded values.
  • FIXED: Class list_browser: incremental search. Failed to grab keyboard
  • FIXED: Access NIL table cell.

[Jul 18 2025]

  • ENHANCED: Fixed dark mode for inspector.
  • ADDED: Resource text_colour for class text_item Allow for different colours for the label and text field.
  • FIXED: Overruling class-variables Failed if the class variable already appeared in the hash table.
  • ENHANCED: Image and text alignment of class toc_image
  • MODIFIED: Allow images of kind bitmap. If such an image is displayed, its black pixels are translated to the current foreground and its white pixels to the current background.
  • ADDED: Provide support for alpha channal to colours.
  • MODIFIED: Simplify the colour model. Remove all legacy X11 support and simply represent colours internally as uint32_t. RGB values are now communicated as integers in the range 0..255 (was 16 bits).
  • CLEANUP: Remove empty RAY backend
  • CLEANUP: Deleted class colour_map

[Jul 16 2025]

  • FIXED: insert key binding set handling of RET, TAB, etc.

[Jul 15 2025]

  • ADDED: Set the colour of accelerators in popup menus.
  • ADDED: Bind copy/cut/paste to Shift-Ctrl-{C,X,V}
  • ADDED: `key_binding <-accelerator_label` Moved from PceEmacs to extensions to library(pce_keybinding).
  • MODIFIED: Key-names for named function keys are now between angle brackets. This is consistent with Emacs, although some keys still have different names.
  • ADDED: Function key (F1..F12) mapping. These used to be called key_top_<n>. They are now called more conventionally `f1..f12`.
  • MODIFIED: `key_binding<-binding` to return a chain Old implementation just returned the first match. Now we return all key events for some function. This allows for rendering the preferred one, such as the one bound to an Apple command key.

[Jul 14 2025]

  • PORT: Use Apple Command key for save/copy/cut/paste.
  • MODIFIED: Sync common function keys with Emacs naming.
  • ADDED: Distinguish accelerator @nil from @default. Using @nil explicitly disables.

[Jul 13 2025]

  • ADDED: gui modifier, supporting Windows key or Apple command key.

[Jul 12 2025]

  • FIXED: possible crash in getRootGraphical()

[Jul 10 2025]

  • ADDED: Setup epilog theme from system preferences
  • CLEANUP: Remove a lot of duplicate declarations. Ongoing work.
  • ADDED: `display<-system_theme` Get the user theme preference

[Jul 9 2025]

  • FIXED: Init TERM when needed.

[Jul 8 2025]

  • FIXED: Ensure the "mouse tracking window" is not reclaimed.

[Jul 7 2025]

  • FIXED: MacOS sometimes reports a mouse-up associated to no window. As a work-around, we implicitly associate it with the window that got the last down event.
  • FIXED: Draw resize line correct on hires displays.
  • FIXED: Conversion of UTF-8 to xpce objects Converted always to UTF-16 rather than only on Windows.

[Jul 5 2025]

  • FIXED: Do not keep swipl-win open if there are only hidden or unmapped frames.
  • FIXED: window->redraw must invalidate rather than draw.
  • ENHANCED: gxref/0: do the heavy work in a background thread. This keeps the GUI responsive.
  • FIXED: Position logic for windows using a decorator displayed on other windows. Notably the cross-referencer uses this.
  • ADDED: Support cursors created from images.
  • FIXED: Colour browser interpretation of hash values. The current version adds the alpha channel.

[Jul 3 2025]

  • PORT: Fixed wide pce string <-> UTF-8 conversion. PceString is for now UTF-16 on Windows. We might change that, but for now we do UTF-16 <-> UTF-8 conversion that deals with surrogates.
  • ADDED: Add a line between resizable windows.

[Jul 2 2025]

  • FIXED: Avoid deadlock in Epilog paste on Windows. It appears WriteFile() blocks if there is no read in progress on Windows. As this must happen in the same thread, this does not work. We now use the sdlinput.c async I/O to also handle asynchronous writes.
  • FIXED: EOF and error handling on Windows pipes.
  • ADDED: display->list_fonts Temporary work-around. Eventually should return an xpce data structure.

[Jul 1 2025]

  • PORT: Make Epilog work somewhat on Windows. Requires git version of Prolog and latest version of winlibedit.

[Jun 28 2025]

  • ADDED: pce_open_terminal_image/4 to get access to the terminal client streams Using `terminal_image<-pty_name` does not work on Windows and we cannot safely transfer Windows HANDLE or Prolog IOSTREAM* over the xpce method API, so we need an additional predicate.

[Jun 26 2025]

  • PORT: Connect Windows PseudoConsoles to class terminal_image. This also adds terminal_image->launch, which allows running processes in the terminal.

[Jun 27 2025]

  • ADDED: Implement OSC 0 (window title) terminal escape

[Jun 19 2025]

  • COMPAT: Changed dispatch handling to pass an IOSTREAM that must be watched.

[Jun 17 2025]

  • PORT: Working on Windows port.
  • BUILD: Make -DSDL=ON the only option. This version of xpce no longer supports X11 and Win32
  • ADDED: Epilog Clear screen in popup.

[Jun 16 2025]

[Jun 15 2025]

  • FIXED: Get image file path

[Jun 14 2025]

  • FIXED: Input lag on stdin.

[May 24 2025]

  • ADDED: library(terminal): provide embedded terminal.

[May 23 2025]

  • FIXED: Removing watched streams

[May 22 2025]

  • ADDED: pce->open_url to use SDLs primitives for opening a URL.

[May 20 2025]

  • FIXED: Images may not be opaque even if they do not have a mask.
  • FIXED: Compute offset of graphicals to the frame when using nested window. This fixes the popup offset in PceEmacs.

[May 19 2025]

  • MODIFIED: Using @nil for an image background sets the background to transparent
  • FIXED: Avoid extra space around popup menus.
  • FIXED: Redraw after change of window size.

[May 18 2025]

  • ADDED: sdl_send() to execute messages on the SDL main thread

[May 10 2025]

  • MODIFIED: Removed several built-in bitmaps. Use colours for filling.

[May 5 2025]

  • TMP: This should be undone at some point.

[May 4 2025]

  • BUILD: Introduce src/namedb.txt to get smooth rebuilding if NAME_ changed

[May 3 2025]

  • PORT: Added SDL binding as stubs
  • ADDED: src/sdl dir for future SDL2 binding
  • PORT: Added empty new low-level binding. This binding aims at binding to raylib, but that is only refected in the name of the binding directory (src/ray). Otherwise it merely implements a completely empty binding based on stubs generated by ChatGPT.

[Apr 25 2025]

  • MODIFIED: WM_CLASS handling Recent desktop environments such as Gnome 46 and later ignore the _NET_WM_ICON property to set an icon for a frame (toplevel window). We can set the icon through a .desktop file using StartupWMClass where all windows of a process are bundled under the same icon. But, xpce set WM_CLASS from the xpce class name.

    This patch adds `display<->wm_class` to set the WM_CLASS for all toplevel windows. The default is SWI-Prolog. By setting this to @default, the old behavior is restored.

[Apr 23 2025]

  • FIXED: emacs/1: allow non-existing file. This also fixes ?- edit(file(File)) to create a new file as advertised.

[Apr 18 2025]

  • FIXED: Profiler IDE: link to website. Renamed "exit" to "quit", removed "statistics" (is shown anyway) and "about" (useless).

[Apr 11 2025]

  • PORT: Do not install Xserver.pl on Windows versions.

[Apr 10 2025]

  • COMPAT: Handle changes to '$qlf_sources'/2

[Apr 9 2025]

[Apr 7 2025]

  • PORT: Avoid partial lists in DCGs

[Mar 27 2025]

  • ENHANCED: PceEmacs: reload styles if new style facts are added. This is necessary if Prolog files that hold highlight declarations are loaded after creating the editor.

[Mar 26 2025]

  • BUILD: Build xpce library index before running qlf_make/0

[Mar 24 2025]

  • ENHANCED: PceEmacs: deal with possibly not-installed sources.

[Mar 22 2025]

  • FIXED: Add dependencies to make qlf compile work qlf_make/0 now reorders based on file dependencies. This means we can add the dependencies here and avoid hacks.

[Mar 19 2025]

  • FIXED: Load library(emacs_extend) explicitly in mode files This is required to ensure that the term expansion is applied when generating the .qlf files.

[Mar 18 2025]

  • CLEANUP: Remove pce_boot search path. Now using hard paths to resolve references between the various boot files.

[Mar 17 2025]

  • BUILD: Better support building .qlf files without an X11 display
  • CLEANUP: Removed forgotten HTTP implementation

[Mar 15 2025]