# Ann: SWI-Prolog 9.3.29

**URL:** <https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-29/9241>\
**Category:** Releases\
**Created:** [September 1, 2025, 3:31pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-29/9241 "2025-09-01T15:31:39Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![jan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/jan/32/4_2.png) [@jan](https://swi-prolog.discourse.group/u/jan)\
**Post date:** [September 1, 2025, 3:31pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-29/9241/1 "2025-09-01T15:31:39Z")

</div>

Dear SWI-Prolog user

SWI-Prolog 9.3.29 is ready for download. Most of the changes are  
enhancements to the new xpce and the xpce based `swipl-win`. Some  
other highlights:

- Fixed bug in resolving procedures to modules when loading  
.qlf files or saved states. This bug was introduced when  
moving the libraries to .qlf format. It broke SWISH.

- Exploit larger fast integer range in term\_hash/2. This  
can reduce non-determinsm.

- Properly inherit the `max_integer_size` Prolog flag. This  
could break large integer support in threads.

- WASM: Avoid leaking strings in `Prolog.get_chars()`

# SWI-Prolog Changelog since version 9.3.28

- FIXED: prolog: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`.

- 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

- FIXED: WASM: Avoid leaking 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()`

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

- TEST: Fixed test for simplified ansi\_format/3.

- FIXED: Inherit the Prolog flag `max_integer_size` in new threads.

- 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.

- 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`.

- 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.

## Package xpce

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

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

- 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.

- 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.

- 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.

- 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.

- 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

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

---

<div class="post-metadata">

**Author:** ![joseph-vidal-rosset](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/joseph-vidal-rosset/32/2594_2.png) [@joseph-vidal-rosset](https://swi-prolog.discourse.group/u/joseph-vidal-rosset)\
**Post date:** [September 3, 2025, 9:36am UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-29/9241/2 "2025-09-03T09:36:41Z")

</div>

```prolog
joseph@mx:/usr/local/swipl-devel$ swipl --version
SWI-Prolog version 9.3.29 for x86_64-linux

```
