Command palette — version history
A command palette: the user presses a shortcut, types three letters and reaches any action of the application without looking for it in the menus. A non-visual object that opens its own window over the application. Introduced in 2.0.
4.0 — October 2026 #
New #
of_insert_command(as_key, as_label, as_group, ai_index): a command at a chosen position (from 1; beyond the end = at the end).of_anchor_under: the palette placed under a control, in screen pixels.- On the command handle (
of_command):is_group,is_hint,is_keywordsandis_icon. - The palette speaks the application's language (
PBT_SetLanguage): placeholder, "Recently used" header, empty-list message; anis_placeholderyou set is not translated. - Search ignores accents:
preferencesfinds "Préférences". - Pressing the palette's chord while it is open closes it.
- Tens of thousands of commands open and filter without a wait: only the visible lines are drawn.
Fixed #
- A destroyed palette object (page or window closed) takes its chord with it and closes the palette it had opened; the chord used to stay armed and swallow the key in the window.
- Shortcuts shown on a line work on a non-Latin keyboard, with a digit and Shift, with
Ctrl+Space,Ctrl+Up,Ctrl+Del, or with a single F key; the Windows key is never a modifier; an AZERTY keyboard readsCtrl+Acorrectly; a character typed with AltGr (€) never triggers a command. - While typing in the search box,
Ctrl+C,Ctrl+V,Ctrl+ZandCtrl+Akeep their editing role instead of launching a command bearing that shortcut. - A group declared in several times (File, Edit, then File again) shows a single header, where it first appeared, keeping the order of its commands.
- With
POSITION_ABSOLUTE,il_x/il_yhold even when a command's text contains "x" or "y", and the palette goes to the screen of the requested point on a multi-monitor setup. - A window's own chord takes precedence over an application-wide chord (no
ipo_owner) on the same key. - At 150 % display scaling, a click inside the palette no longer closes it as if it were outside.
- A disabled command is readable in every theme, and the active line stays visible when it is disabled; Tab no longer leaves the search box.
- Near the bottom of the screen, a palette whose height is cut shows a scrollbar.
- Opening the palette twice in a row no longer leaves an orphan window behind.
- When the palette closes, the focus goes back to the element that had it (the code editor's caret no longer vanished).
- A runtime error in one of your palette events reaches the application's
SystemErrorlike any script error, and the following events are still delivered (it used to be swallowed silently). - With no language chosen by the application, the component announces English to screen readers (it announced French).
- The application accent (
PBT_SetDefaultThemeAccent) survives a change of theme, is followed as long as the component has no accent of its own, and repaints everything derived from it (hover, pressed, selections); Windows high contrast is supported. - Two palettes on the same
ipo_ownerno longer share their events (one could receive the other'sue_closed), and each keeps its own chord. - Typing a character with AltGr in a PowerBuilder field (the euro of a French keyboard, AltGr+E) no longer fires a
Ctrl+Altshortcut of that key.
Behavior changes #
ue_closedbecomesue_closed(string as_reason)and follows everyof_openthat returned0:"",cancelled,failedorblocked— even when the palette died before appearing.- Only one palette is on screen at a time; each object now answers only for its palette and its chord:
of_is_open,of_closeandof_resetno longer report or close another object's palette, and destroying an object no longer removes the chord another object took over. of_add_commandreturns-5for a key already taken (it used to create twin commands) or containing/,|or a comma;of_remove_commandreturns-5for an unknown key.of_openandof_register_shortcutreturn-5withoutipo_owneroripo_receiver(no event could ever arrive);of_register_shortcutreturns-5for a key the library cannot hear (the previous chord is kept) and2whenis_shortcutis empty and no chord was set;of_openwithout the WebView2 runtime returns-6.of_resetalso emptiesis_recent, closes an open palette and brings the chord back toSHORTCUT_DEFAULT.pbm_custom02of theipo_ownerwindow is no longer triggered; only an explicitly setipo_receiverstill receives it.inv_pumpis no longer public;of_countreturns along.- Details and how to adapt: Migrating from 3.0 to 4.0, sections 11.3 and 11.36.
of_openandof_register_shortcutno longer return-5when neitheripo_ownernoripo_receiveris set: the events always arrive. The same chord registered by a second palette of the same window goes to it (migration page, section 11.46).of_countreturns alongandof_keys_attakes alongrank.
3.0 — September 2026 #
New #
- Events arrive on their own: the palette delivers
ue_shortcut,ue_opened,ue_command_selectedandue_closedby itself — settingipo_owneris enough, with no receiver object, nopbm_custom02and no call toof_process_events.ipo_receiverbecomes optional.
Fixed #
- The active line is readable in the Office 2007 themes, light and dark.
2.0 — September 2026 #
New #
- A palette window over the application, opened by a chord heard from anywhere in the window (
is_shortcut,Ctrl+Kby default, constantsSHORTCUT_DEFAULT/SHORTCUT_NONE,of_register_shortcut);ue_shortcutlets the application decide, and the chord toggles the palette. - Commands with a label, a group, a hint, a displayed shortcut and search keywords (
of_add_command); multi-word search over label, group and keywords. - Usage memory: recently launched commands come first (
is_recent,il_max_recent). - Placement: centered on the window, on the screen, or at a given point (
POSITION_*,il_x,il_y); a click elsewhere closes the palette and still reaches its target. - Command handles (
of_command) to rename, change the shortcut, disable or hide a command;of_remove_command,of_clear_commands,of_count,of_keys_at,of_has. ue_command_selected(as_key),ue_opened,ue_closed: the palette reports the chosen key and the application acts.