Changes in this build since the previous PTB (Mudlet-5.0.0-ptb-2026-10-26-de91689)
Improved:
- Decode floods of game text on a second CPU core #12166
- Less work per trigger fire #12167
- Less time spent timestamping lines during floods of text #12161
- Less work per trigger fire during floods of text #12163
- matching triggers on several threads is off by default, with a setting and statistics to judge it #11841
- faster GMCP processing #12095
- Faster, smaller storage for game text lines #12154
- faster 2D map drawing with room borders on #12139
- Faster processing of game text that no script reacts to #12152
- faster sending of commands on games that use a non-UTF-8 encoding #12130
- Starter UI and generic mapper check for a map without reading every room #12149
- Faster trigger processing with a write barrier in Lua #12170
- Faster profile loading by building the script editor on first open #12143
- Faster text processing with the generic mapper installed #12107
- Paint the console at 30 fps during floods of text #12164
- faster substring trigger search #12159
- Faster wrapping of long lines #12157
- Faster trigger processing for packages with large trigger groups #12155
- Load profiles and packages faster #12153
- Faster map loading on big maps #12151
- Faster speedwalk routing after map changes #12150
- Faster getRooms and getAreaRooms on big maps #12148
- Faster echo of plain and multi-line text #12147
- keep the 3D map scene when scripts store room user data #12135
- faster profile open and reset #12125
- Less CPU spent redrawing the starter UI's health bars #12119
- Faster text processing with the starter UI installed #12116
- blinking text no longer redraws the whole console 30 times a second #12114
- faster text display in narrow windows #12102
- faster 2D map panning on maps with many labels #12088
- faster Chinese, Japanese and Korean text decoding #12086
Fixed:
- The MCP bridge no longer drops replies when its input closes early #12179
- MXP links only open web and email addresses #12111
- Web links in link menus open in the browser #12104
- A link that starts while another is open ends that one #12121
- Script editor shows the right on/off state for items a script toggled while it was closed #12142
- Linux screen readers read the right word when moving by word through the main window #12141
- scrolling to a line lands on that line, even when it opens the split screen #12140
- The text area resizes when a button bar is shown or hidden #12138
- stop IRC from logging a "needs fixing" warning for normal server messages #12137
- Dragging a double-click selection to the left keeps the clicked word #12136
- Text no longer stops short of the command line when something covers the top of the main window #12133
- getMousePosition() no longer offset by a button bar along the top or left #12131
- Trigger highlights work when the match reaches the end of the line #12129
- No two items in a detached window's menu answer to the same key #12126
- Clicking a room over a background map image no longer picks up the image #12123
- Viewing a running timer in the editor no longer restarts it #12117
- Room highlights are no longer drawn under the rooms around them #12106
- Room symbols from icon fonts now show on the map #12105
- Package Manager no longer gives a same-named package a repository package's links or updates #12101
- Editor sections showing an empty form when nothing is selected #12100
- Room symbol preview in room properties now matches the map #12099
- Running tests warns when a test file is missing or broken #12098
- Hiding one room's name on the map works again #12097
- Report line numbers wrapLine() can't find in the window #12094
- Rewrapping text with a wrap indent no longer indents it twice #12093
- The map opens at a usable width #12091
- Copied text keeps bold, italic, underline and see-through backgrounds #12090
- MorgenGrauen and Icesus loaders now report download and install failures #12089
- Refuse NaN in text-to-speech settings and alert durations #12087
- The generic mapper no longer changes the utf8 functions #12085
- Mapper routes and speedwalks always take the shortest way #12084
- Label font, style and color changes no longer break hecho, decho and cecho text #12083
- Mudlet starts again on macOS 27.2 #12176
Infrastructure:
- Run Windows C++ tests at twice the core count #12196
- Speed up the slowest C++ tests #12195
- Let the pathfinding benchmark run on small maps #12146
- Halve the Lua test suite's run time #12192
- Build Lua 5.1 from source on every platform #12169
- Faster debug builds by making a debug-only line color check cheap #12124
- Warn when a PR edits a file synced from another project #12175
- Fix getLuaString() answering a stale Lua stack slot #12073
- Test that the main window draws its full width once a left border is removed #12103
- Sounds can play from the left or right, and move as they play #12034
- Starter UI can put a picture behind the whole window #12038
- Optional Folders view in the script editor #11992
- Experiments section in profile preferences #11946
- search the whole map from the 3D mapper #11971
- stitch neighbouring areas and portal previews in the 3D mapper #11968
- route planner for the 3D mapper's world atlas #11960
- semantic zoom from rooms to world graph in the 3D mapper #11957
- Area graph with a saved world layout for the mapper #11948
- DreamLand as a default game #11899
- show a picture of each 3D map style in Preferences #12004
- diorama style for the 3D mapper #11967
- inkwash style for the 3D mapper #11959
- Hologram style for the 3D mapper #11956
- Transit style for the 3D mapper #11953
- Terminal style for the 3D mapper #11952
- Blueprint style for the 3D mapper #11950
- Map style presets for the 3D mapper #11949
- Pick, select, speedwalk and edit rooms from the 3D map #11928
- SvenskMUD support to the generic mapper #11947
- Scripts can hide the mapper's built-in right-click menu items #11620
- A pointer to the redesigned Settings for upgrading players #11872
- Allow Mudlet to be controlled by Claude / ChatGPT #8576
- Show split colors in legacy Chinese, Japanese and Korean characters #11240
- A script can cancel listening without sending what was half-said #10992
- Pause, resume and stop buttons for replay playback #10859
- SVG background image support with transforms for labels #8935
- More speech recognition engines, including the one built into macOS #10332
- deb and rpm packages for Ubuntu, Debian and Fedora #10822
- alpha channel support to level colors in map #10584
- Games can turn off Mudlet's starter UI with a GMCP message #10278
- Toolbar buttons and menu items for packages #9983
- Speech-to-text backend for scripts and packages #9982
- A mapperButton setting decides what the built-in map buttons do #10196
- Scripts can tell when Mudlet is not the active application #10145
- Czech (Čeština) translation #10198
- Map room symbol font settings to setConfig/getConfig #10166
- Rites of Passage MUD as a default game #10183
- Decode floods of game text on a second CPU core #12166
- Less work per trigger fire #12167
- Less time spent timestamping lines during floods of text #12161
- Less work per trigger fire during floods of text #12163
- matching triggers on several threads is off by default, with a setting and statistics to judge it #11841
- faster GMCP processing #12095
- Faster, smaller storage for game text lines #12154
- faster 2D map drawing with room borders on #12139
- Faster processing of game text that no script reacts to #12152
- faster sending of commands on games that use a non-UTF-8 encoding #12130
- Starter UI and generic mapper check for a map without reading every room #12149
- Faster trigger processing with a write barrier in Lua #12170
- Faster profile loading by building the script editor on first open #12143
- Faster text processing with the generic mapper installed #12107
- Paint the console at 30 fps during floods of text #12164
- faster substring trigger search #12159
- Faster wrapping of long lines #12157
- Faster trigger processing for packages with large trigger groups #12155
- Load profiles and packages faster #12153
- Faster map loading on big maps #12151
- Faster speedwalk routing after map changes #12150
- Faster getRooms and getAreaRooms on big maps #12148
- Faster echo of plain and multi-line text #12147
- keep the 3D map scene when scripts store room user data #12135
- faster profile open and reset #12125
- Less CPU spent redrawing the starter UI's health bars #12119
- Faster text processing with the starter UI installed #12116
- blinking text no longer redraws the whole console 30 times a second #12114
- faster text display in narrow windows #12102
- faster 2D map panning on maps with many labels #12088
- faster Chinese, Japanese and Korean text decoding #12086
- Opt-in error reporting for getExitWeights, getMapLabels and setRoomWeight #12075
- Mudlet's sounds play nicely with Bluetooth headphones #12033
- Labels marked as live are read out when their text changes #12012
- The generic mapper says which rooms it merged #12037
- Buttons made from labels can be reached and pressed with the keyboard #12011
- Starter UI reads enemy health from fight messages #12031
- Screen readers can tell what a script's label is and press it #11937
- The 3D map's error links to the setting that turns the modern mapper off #11996
- The 3D map switches to the world view at a size that suits each area #12000
- The 3D map stays fast on huge maps #11954
- Starter UI shows health from Swedish LK prompts #12027
- The generic mapper can start mapping without an area name #11936
- draw terminal map exits as dim phosphor-green dots #12017
- keep diorama labels sharp, see through buildings in front of the player, and outline highlights #12014
- let the other map levels sit back quietly behind the viewed one #12010
- make room names on the 3D map readable in every style #12007
- Faster trigger matching with large trigger sets #12006
- Faster handling of large bursts of game text on Windows #12015
- Skip the wrap pass for incoming lines that already fit #12020
- Faster handling of incoming game text #12019
- f() string interpolation runs faster #11575
- getCollisionLocationsInArea is faster on large areas #11692
- close the last 3D map gaps with the 2D map #11945
- make the 3D map easier to read #11939
- Edit the map in the modern 3D view as in 2D #11933
- draw exits, doors and labels in the modern 3D map like the 2D map #11921
- modern 3D map shows room colors, symbols, highlights and player marker like the 2D map #11909
- Passwords are typed into a dedicated box instead of a masked command line #11126
- calcFontSize can report the width consoles lay text out on #11789
- Make screen reader descriptions plain text #9329
- New Crowdin updates #10350
- Skip the unpacking popup for small packages #11275
- deleting a big folder in the editor is faster and uses less memory #11601
- MXP games process plain text more than twice as fast #11607
- undoing the delete of a big folder in the editor is much faster #11600
- faster search stepping in large scrollback #11595
- decho2cecho and hecho2cecho are 19 times faster #11289
- busy games stay smooth once a profile has shown a link #11591
- recalling a command from a long history is faster #11619
- leaving a big folder in the editor no longer stalls #11618
- searching a big note stays responsive #11617
- dragging rooms around a big map stays smooth #11615
- dragging a selection box over a big map stays smooth #11614
- generic mapper speed when mapping and sending commands #11613
- creating many timers from scripts stays fast #11612
- game links that start out selected no longer slow down busy output #11610
- restyling a button no longer redraws every button bar #11609
- screen reader responsiveness with a long scrollback #11608
- status bar labels no longer restyle when their style is unchanged #11606
- installing several packages in a row #11605
- table.n_collect is fast on lists of tables #11604
- creating stopwatches stays fast when a script keeps many #11603
- undoing a delete in the editor reads each item only once #11602
- deleting many selected items in the editor is much faster #11599
- reading dates from a database is much faster #11598
- whole-word search in the script editor is much faster #11597
- Tab completion responds faster #11596
- copy2decho and copy2html are faster on long lines #11594
- deleting a large area or many rooms no longer takes seconds #11593
- killing thousands of temporary triggers no longer freezes Mudlet #11592
- typed commands are checked against aliases faster #11589
- XML maps import faster by indexing each area's rooms once #11588
- binary maps load faster by skipping a file size check for empty lists #11587
- XML maps load faster with the mapper open #11586
- dock widgets repaint faster with the Fusion style #11585
- XML map import is faster because map paint no longer copies every room id #11584
- createMapLabel() is up to 35x faster, and creating thousands of labels no longer slows down #11583
- table.n_complement() and table.n_intersection() are hundreds of times faster on big lists #11582
- Maps load faster #11287
- Copied text no longer breaks where word wrap split a line #11263
- open the editor's Variables view faster with large tables #11557
- uninstalling a package no longer slows down with folder size #11521
- New profiles load faster #11523
- Flush the log file once per event loop pass, not per line #11546
- Map load skips per-room custom line index upkeep #11503
- Speedwalk paths are ready sooner after the map changes #11482
- Faster map drawing with upper and lower levels shown #11316
- createRoomID() stays fast on large maps #11313
- generic mapper handles each line without building a table for it #11431
- adding a Geyser menu item no longer restyles the others #11463
- Geyser gauges update faster #11447
- Geyser labels echo faster by remembering named colors #11440
- Faster deleteFull(), patternEscape() and table.n_collect() #11292
- a trigger with nothing to run skips handing its captures to Lua #11469
- events cost less to raise #11453
- Scripts that echo many lines in a row run faster #11485
- Lines of plain text are laid out for painting faster #11479
- Faster display of Chinese and Korean game text #11314
- Echoing colored text to a label is twice as fast #11288
- Build each logged line in one string #11554
- Build HTML log lines without per-character lookups #11549
- ansi2decho looks each colour up as it needs it #11516
- ansi2decho looks up the 16 basic colours once per call #11512
- record a room's entrances without building a hash of its exits #11499
- maps where many rooms lead to one room load and edit faster #11494
- Profiles save faster #11488
- copy() and appendBuffer() copy each line whole instead of per character #11458
- copy() reuses the clipboard instead of building a buffer per call #11422
- Geyser getters skip the terms that are always zero #11409
- Geyser layouts resize nearly twice as fast #11291
- starter UI remembers which vitals shapes a line matched #11444
- starter UI reads prompts without building a table per reading #11415
- starter UI only tries vitals shapes a line could match #11404
- New profiles process incoming text faster #11350
- Draw each line's glyphs in one call per color #11356
- Main console redraws skip filling cells already cleared to their color #11510
- Full redraws of the main console clear the screen once #11476
- Main console paints its own background when nothing shows through #11389
- Hover and selection repaints copy only the rows they redraw #11376
- Scrolling the main console redraws faster #11365
- cecho, decho and hecho are faster #11281
- Commands go through aliases nearly twice as fast #11280
- getRoomsByPosition() is over 100 times faster #11265
- searchRoom() finds rooms by name faster on large maps #11272
- JSON maps save and load nearly three times as fast #11271
- string.trim and table.contains are faster #11270
- getEpoch() is six times faster #11269
- Killing temporary timers, aliases and keys stays fast with many of them #11268
- Geyser labels and gauges update twice as fast #11267
- f-strings run about 1.5 times as fast #11266
- Events reach their handlers three times faster #11264
- Move the color space workaround to the Compatibility settings #11058
- Draw game text twice as fast with cached glyphs #11184
- Faster triggers when scripts don't read matches or line #10846
- Faster trigger matching and game text display #10842
- Zoomed-out 2D map draws nearly twice as fast on huge areas #11036
- Stay-open triggers no longer slow down profiles with many triggers #10984
- Fix O(area count) quadratic slowdown creating many areas #10591
- Compact input line tip now caps at 3 shows like the split-screen tip #10982
- Faster map building and 2D map rendering on large maps #10581
- Trigger prescan hands out only regex work, and reads its knobs from Mudlet.ini #10717
- Spell check reads its dictionary as soon as it is turned on #10456
- Scan each read once for the MXP mode switch escape #10548
- Skip wrap analysis for lines too short to reach the wrap column #10508
- Move each line out of the accumulator and settle the decoder per encoding #10549
- Append received text to the buffer a run at a time #10507
- Profiles with thousands of highlight triggers no longer stall #10372
- Use 16 bytes instead of 44 for every character in the scrollback buffer #10506
- Stop building unused translated exit names during map audit #10583
- Scripts are told when mute and other settings change #10596
- Substring triggers skip lines they cannot match #10347
- Line colors are copied only when a trigger changes them #10352
- Profiles with many packages load faster #10329
- Color triggers check single-colored lines faster #10346
- Label the trigger editor's advanced options toggle #10366
- [ImgBot] Optimize images #10318
- Less bookkeeping per line of game text #10295
- Mudlet handles incoming game text faster #10293
- Color sequences reach the parser without allocating #10299
- parse SGR colour sequences without allocating #10267
- Trigger capture groups reach scripts faster #10297
- Faster trigger dispatch on every incoming line #10296
- Triggers match faster on every line #10294
- substring triggers match faster by preparing each pattern's search once #10304
- Every new profile gets the starter interface, with chat capture #10316
- include what we use in profile objects and persistence (3 of 3) #10283
- include what we use in profile objects and persistence (2 of 3) #10282
- include what we use in profile objects and persistence (1 of 3) #10281
- Redesigned settings dialog with search and instant apply #10237
- the starter UI appears at once on a game that already sent data #10266
- Fed2 logo image #10273
- New Crowdin updates #10233
- filters, pause and clear for the debug window #9688
- Fast game output no longer redraws the screen for every message #10195
- Faster still 2D map rendering when zoomed out on very large maps #10200
- Much faster 2D map rendering on very large maps #10175
- Pathfinding no longer slows down as your map grows #10174
- New Crowdin updates #9721
- Game text and color triggers are faster #10171
- shrink mpackage icons #10080
- game text is faster by not rescanning the buffer for links that were never created #10110
- db:create says how to fix a list-form sheet it refuses #10061
- The MCP bridge no longer drops replies when its input closes early #12179
- MXP links only open web and email addresses #12111
- Web links in link menus open in the browser #12104
- A link that starts while another is open ends that one #12121
- Script editor shows the right on/off state for items a script toggled while it was closed #12142
- Linux screen readers read the right word when moving by word through the main window #12141
- scrolling to a line lands on that line, even when it opens the split screen #12140
- The text area resizes when a button bar is shown or hidden #12138
- stop IRC from logging a "needs fixing" warning for normal server messages #12137
- Dragging a double-click selection to the left keeps the clicked word #12136
- Text no longer stops short of the command line when something covers the top of the main window #12133
- getMousePosition() no longer offset by a button bar along the top or left #12131
- Trigger highlights work when the match reaches the end of the line #12129
- No two items in a detached window's menu answer to the same key #12126
- Clicking a room over a background map image no longer picks up the image #12123
- Viewing a running timer in the editor no longer restarts it #12117
- Room highlights are no longer drawn under the rooms around them #12106
- Room symbols from icon fonts now show on the map #12105
- Package Manager no longer gives a same-named package a repository package's links or updates #12101
- Editor sections showing an empty form when nothing is selected #12100
- Room symbol preview in room properties now matches the map #12099
- Running tests warns when a test file is missing or broken #12098
- Hiding one room's name on the map works again #12097
- Report line numbers wrapLine() can't find in the window #12094
- Rewrapping text with a wrap indent no longer indents it twice #12093
- The map opens at a usable width #12091
- Copied text keeps bold, italic, underline and see-through backgrounds #12090
- MorgenGrauen and Icesus loaders now report download and install failures #12089
- Refuse NaN in text-to-speech settings and alert durations #12087
- The generic mapper no longer changes the utf8 functions #12085
- Mapper routes and speedwalks always take the shortest way #12084
- Label font, style and color changes no longer break hecho, decho and cecho text #12083
- Mudlet starts again on macOS 27.2 #12176
- A sound played by its full path still plays after the file is moved #12042
- Stopping media by priority also stops media at that priority #12040
- denyCurrentSend() no longer swallows an unrelated later command #12078
- Generic mapper only edits the map while mapping #12077
- highlights and selectCaptureGroup() in later triggers after an earlier trigger edits the line #12057
- Labels with the default colour use the proportional font again #12065
- closeUserWindow and cut answer nil and why for a window that does not exist #12072
- saved tables keep both names for a shared table across a save #12071
- Link, popup and insertText functions say a label cannot take them #12069
- Scripts containing a NUL character are no longer cut short when saved #12068
- a module's failing script no longer runs twice as the profile opens #12067
- Scrolling over a map view while its profile closes no longer crashes #12066
- Dark app and profile stylesheets darken the Settings dialog again #12064
- Multi-line map labels fit inside their box #12063
- Match-all triggers slowing down on long lines with patterns like (\w*) #12062
- new map windows open on the player's area instead of blank #12061
- Attached container border follows set_constraints() and reposition() #12060
- match-all highlights and filters pick the wrong captures when matches differ in group count #12059
- Switching password storage says when a saved password could not be read #12058
- Say so when the keychain refuses a password and it is saved in the profile instead #12056
- Dialogs opened from a floating map stay with the map on Qt 6.12 #12055
- Geyser colors and Label:echo no longer slow down past 1000 colors #12054
- Multi-line MMCP snoop data keeps its line breaks #12052
- An exit weight filter no longer lets routes through locked rooms and exits #12051
- Cursor-forward spacing is kept on lines longer than the wrap width #12050
- matches keeps the captured text after selectCaptureGroup() and replace() #12049
- Generic mapper stops mapping when a map loads #12048
- rawget(_G, "matches") and "line" work in triggers again #12047
- CJK text no longer draws slower once over 4096 distinct characters #12046
- setBackgroundImage(label, "") clears the label's image again #12045
- addAreaName() no longer overwrites an area made with setAreaName() #12044
- an unfinished escape sequence in feedTriggers() text no longer eats the next feed's text #11826
- a prompt followed by an unfinished OSC is shown when the game pauses #11819
- a hidden Adjustable.Container gives its border back and retakes it on show #11648
- Adjustable.Container:attachToBorder("Left") works in any case #11647
- regex trigger and alias creators refuse a pattern that does not compile #11799
- a failed named timer or event re-registration keeps the working one #11793
- Saving or reading a stored password no longer takes seconds on some builds #12028
- A game toggling ECHO quickly no longer turns password hiding off #11912
- environment colors 257 to 272 are right before a map is loaded #11709
- colour triggers still match after an earlier trigger deletes a line #11800
- passwords are no longer saved with a key anyone can work out when the key file cannot be written #11813
- Generic mapper keeps up with your SvenskMUD prompt #12016
- feedTriggers() with CRLF line endings no longer adds a blank line after each line #11825
- keep a refused install's files out of a folder that was already in the profile #11663
- sysTelnetEvent hands binary option data over unchanged #11822
- selecting a profile in the connection dialog no longer writes files into it #11816
- the connection dialog says when a saved password could not be read #11814
- Lua functions report argument errors under their own name #11808
- an alias whose command expands into another alias keeps its own matches #11748
- script installs wait out a profile save instead of reporting early success #11666
- resuming from the emergency stop keeps a timer whose script does not compile #11803
- raise install events for a module whose XML stopped part-way #11661
- remember() and saveVars() document that saving is manual #11641
- 3D map stays blank or fails to start on Wayland #11995
- Sound files that share a name in different folders no longer play each other #11993
- delete every line of a range in TBuffer::deleteLines() #11837
- --mirror now copies trigger echoes, echoLink() text and commands at a prompt #11834
- a line held for server-wrap joining stays held while "Save profile?" is asked #11824
- bytes held across a server encoding change are no longer decoded in the new encoding #11821
- "Replace blank lines with a space" no longer adds a space line after each burst #11820
- the secure connection setting in Preferences is no longer undone on the next connect #11817
- a stray IRC end-of-list reply no longer cuts short the MOTD or WHOIS being shown #11812
- a Discord status update from the game without a party no longer clears the party #11811
- nine Lua errors no longer arrive split across two lines #11807
- report errors raised in a spawn() callback #11806
- report scripts whose body fails as the profile loads #11805
- a repeating tempTimer() with empty code no longer errors forever #11804
- tempButton() and tempButtonToolbar() return nil and a message on refusal #11802
- exists() and findItems() skip killed items awaiting cleanup #11801
- tempComplexRegexTrigger treats an empty sound file as no sound #11798
- showCaptureGroups() works on triggers with named capture groups #11794
- personal dictionary words are no longer silently lost #11792
- saved IRC and profile passwords are readable by their owner only #11757
- a nested feedTriggers() no longer empties the caller's matches #11747
- expandAlias(command, nil) echoes the command like expandAlias(command) #11746
- denyCurrentSend() in an alias that sends nothing no longer swallows the next command #11745
- screen readers are told the whole selection, last character included #11733
- installPackage() reports a bad argument like its sibling functions #11681
- report a package trigger or alias whose pattern does not compile #11665
- reloadModule() reports an unknown module and a failed reinstall #11658
- db:create moves a single-column UNIQUE to the column it now names #11630
- a button bar in a package uses its own stylesheet and layout #11414
- a button bar moved into another bar leaves no copy of itself behind #11413
- Games can stream media, and stop all media with an empty stop message #12024
- the starter UI leaves the map to a game interface that opens it while installing #11778
- Removing a profile says when its saved password or sign-in stays behind #11906
- Mudlet copes better when saved passwords and sign-ins can't be read #11905
- Mudlet only promises an automatic sign-in it will make #11616
- JSON map round trip keeps each area's 2D map zoom #11711
- mudlet -qv and -fh print and exit without needing a display #11754
- the generic mapper no longer sends anything when the map first opens #11773
- a map file that cannot be read leaves the loaded map alone #11744
- sort a new variable into place in the Variables view once it is named #11766
- a label link whose Lua command holds a colon runs again #11727
- JSON map round trip keeps label outline colors and fonts #11704
- Starter UI no longer leaves an empty strip on the right after a restart #11997
- the display font comes back when a package brings its font again #11787
- consume a CSI with an intermediate byte through its final byte #11782
- a label without click callbacks no longer hides the console's context menu #11738
- setBackgroundColor() and setCmdLineAction() say why they refuse, not "not found" #11724
- setFont() refuses a font name with an embedded NUL #11723
- exportAreaImage() returns false for a path it cannot write to #11712
- JSON map import keeps an area whose name is blank #11708
- JSON map export keeps the door on compass-direction exit stubs #11705
- JSON map import keeps the alpha of translucent colors #11703
- Saving the profile also writes the application-wide settings to Mudlet.ini #11765
- createCommandLine() and createTextEdit() refuse with false like the other creators #11718
- nested labels close and go away with the label they belong to #11714
- deleting a room drops it from the mapper's room selection #11696
- package exporter keeps counting items after a dialog closed early #11688
- package manager says so when a package is missing from its index #11686
- window functions answer nil and why for a window that does not exist #11680
- a carriage return in saved text survives a profile reload #11655
- Geyser HBox/VBox children tile without one pixel gaps #11651
- Adjustable.Container:lockContainer() refuses a lock style it does not have #11646
- RGB2Hex() and decho2hecho() clamp color components to 0-255 #11642
- Lua's unzip() works again and extracts archives safely #11035
- Let screen reader users reach the menu bar with Alt #9323
- feedTelnet() and feedTriggers() no longer cut their text off at a NUL #11818
- the starter UI reads health, mana and moves maxima from Char.MaxStats #11777
- Lua compile errors are plain text and only syntax errors are called so #11749
- Discord no longer shows a random known game for an empty or partial server address #11810
- emergency stop also stops offset timers #11797
- isActive() checks ancestors when given an item ID #11796
- key groups no longer store an out-of-range key code #11795
- a missing spell-check dictionary is reported, not loaded empty #11791
- a failed editor-theme update says so and stays on show #11790
- reloading a module keeps the fonts it ships #11786
- detect MXP from an ESC[#z split between two reads #11785
- leave MXP in open mode after the MXP subnegotiation #11783
- keep the attributes after an unusable SGR colour type #11781
- ignore a 256-colour index outside the palette #11780
- gui-drop keeps images dropped into user windows and stops when uninstalled #11775
- new Medievia profiles always get MedUI installed #11774
- scroll to a trigger pattern chosen from the editor's search results #11767
- setConfig() refuses IRC values the dedicated IRC setters refuse #11762
- setConfig() takes the map settings before a mapper is open #11761
- setConfig() with a table now reports whether its keys were applied #11759
- closing a profile while Mudlet waits for its save can no longer crash #11758
- saving a profile setting that fails to reach the disk is reported #11756
- mudlet --version no longer warns about Qt's own options, and warns on stderr #11753
- the first thing typed after detaching a profile tab reaches its command line #11752
- one Ctrl+Z undoes adding an editor item #11751
- Saving the map leaves area user data as scripts set it #11743
- changing the audio output device keeps media volume and mute working #11739
- a damaged command line index in profile.ini cannot overflow #11737
- a push-down button saved down no longer sends its command on every load #11736
- Copy in the editor with nothing selected no longer pops a modal box #11735
- unsaved new variables in the Variables editor no longer leak #11734
- Space activates the focused link in caret mode again #11732
- Client.Media Pause, Stop and numeric volume 0 handled as the protocol says #11730
- a label hyperlink shows the pointing hand cursor #11728
- setLinkStyle() no longer corrupts links that hold quotes #11726
- setFontSize() refuses a size too large to render #11722
- the border setters refuse negative and overflowing sizes #11720
- getTextFormat() names the main console 'main' in its refusals #11719
- getLabelFormat() refuses a name that is not a label #11717
- Geyser.Label:changeMenuIndex() reports an out-of-range index clearly #11716
- setLabelCursor() refuses an unknown cursor name instead of raising #11715
- setRoomIDbyHash() refuses a missing room or an empty hash #11713
- JSON map import warns about a room whose id is already taken #11710
- saving a map no longer adds system keys to area and room user data #11707
- JSON map import replaces the map user data instead of merging it #11706
- speedwalk events match the walk that actually happened #11702
- addCustomLine refuses a colour table with fewer than three components #11701
- room functions return nil and a message for a room that does not exist #11700
- map label and map menu functions report what they could not do #11699
- createMapImageLabel refuses an image file it cannot read #11698
- a custom exit line is no longer drawn over by the plain exit back #11697
- a refused db:create no longer breaks db:fetch on that sheet #11635
- db:add, db:update and db:set refuse a value holding a NUL byte #11634
- db:fetch sorts by a column called desc or asc #11633
- db:create warns about an unknown underscored sheet option #11632
- db:create no longer rebuilds indexes on underscored column names #11631
- db:create reports a sheet, column or index sqlite refused #11629
- do not register a package file nothing could be read out of #11660
- table.save round-trips every key and value it writes #11639
- Removing a profile also removes its saved sign-in #11880
- secondary map views follow a change of colour scheme #11695
- deleting an exit in the room exits dialog also clears its speedwalk lock #11693
- getPath reports large route weights exactly and survives extreme coordinates #11691
- closing the package exporter mid-export no longer blocks later exports #11687
- package manager keeps its package list when a refresh fails #11685
- HTTP header errors blame the name or the value, whichever is wrong #11684
- HTTP functions only fetch http and https URLs #11683
- installPackageFromUrl() installs even when another download finishes first #11682
- getUserWindowSize refuses a name no user window has #11679
- getLines reads a reversed range downward from its first line #11677
- refuse to create a mini console, scroll box, command line or text edit over a label's name #11678
- color triggers keep the game's colors after a trigger recolors and edits a line #11676
- setFontSize and getFontSize reach a label, as setFont and getFont do #11675
- setLink, setPopup, insertLink and insertPopup refuse when there is nothing to link #11674
- copy2decho and copy2html keep every character of a line with an emoji #11673
- log when the window layout file cannot be opened for saving #11671
- report the syntax error of a label or command line callback string #11670
- install nothing from an empty Client.GUI package download #11664
- refuse package and unzipAsync() archives with entries outside the destination #11662
- a refused uninstallPackage() says why #11657
- a package can no longer take over or delete the profile's own folders #11656
- a saved NaN comes back as NaN instead of 0 #11654
- saved numbers keep their exact value across a profile reload #11653
- Adjustable.Container:setPadding() refuses a negative or non-numeric padding #11645
- an invalid Geyser constraint raises an error naming the element and value #11650
- Geyser.Container:flash(time, false) flashes visible containers again #11649
- minimizing an Adjustable.Container twice no longer loses its height #11644
- string.cut() counts characters, not bytes #11643
- getRGB() reports an unknown color name clearly #11640
- shms() formats negative second counts consistently #11638
- table.deepcopy copies a table that refers to itself #11637
- datetime:parse() accepts a format with no date part #11636
- an inactive timer dragged into an inactive folder keeps its icon #11731
- setPackageInfo() and setModuleInfo() refuse what they cannot set #11729
- resetBackgroundImage() also takes away a stylesheet background image #11725
- disableScrolling() and enableScrolling() refuse the main console by any name #11721
- saveProfile() to a folder it cannot write to returns nil and a reason #11659
- text the game sends just before closing the connection is no longer lost #11827
- a large MCCP compressed burst is no longer cut short and garbled #11823
- make the MXP reset escape select open mode #11784
- ansi2string() and ansi2decho() drop non-SGR escape sequences #11779
- the update dialog forgets an answered install and a withdrawn offer #11772
- Faster and Slower rescale the wait a replay is already holding #11771
- detached windows' Show Toolbar item and menu bar follow the settings #11770
- reattaching a detached profile puts its tab back where it came from #11769
- mudlet --help says why it could not use the interface language #11755
- dragging a tab out after Qt reordered it detaches that tab #11768
- saveProfile() raises for a first argument that is not a string #11764
- setConfig() range-checks commandLineHistorySaveSize #11763
- getConfig() with no arguments includes the IRC, CHARSET and NEW-ENVIRON keys #11760
- picking the stand-in font in the preferences settles for it #11788
- 3D mapper camera, zoom and area-following in the modern view #11901
- Rendering glitches and debug clutter in the modern 3D mapper #11898
- A saved sign-in that can't be read back is no longer deleted #11883
- uninstalling the Mudlet Tutorial gives back the input, speedwalk and windows it took #11776
- expandAlias() from a timer, key or event sets "command" again, so Repeater works #11625
- Text fed with feedTriggers() shows straight away again #11862
- Secondary map views zoom with the mouse wheel again #11571
- Add install rule to src/CMakeList.txt #11590
- Limit memory a chat peer can make Mudlet use #11101
- Keep all of a long MMCP snoop frame #11093
- Command line right-click menu no longer leaks memory #11117
- Spell checking missed words next to punctuation #11116
- IRC WHOIS no longer shows a 1970 sign-on time #11105
- Each line of an IRC WHOIS or WHOWAS reply is shown on its own #11070
- IRC window no longer lets others plant markup or open non-web links #11069
- Saving a map no longer adds hidden entries to its areas' user data #11667
- a map with an invalid exit stub direction no longer aborts a later JSON export #11472
- map views list areas a script adds, renames or deletes #11420
- Uninstalling a package removes the toolbar and menu commands it added #11326
- clearWindow() puts the cursor back on the line it leaves #11402
- a detached window's mute items show what is muted #11417
- an MXP frame can no longer take over a script's window of the same name #11320
- moving, spreading or shrinking a selection whose centre room a script deleted no longer reads freed memory #11464
- A package's command no longer takes the key of a switched-off key binding #11371
- lines written out by the MXP watchdog or a disconnect run their triggers in trigger context #11425
- a cursor column near INT_MAX no longer pads a line until memory runs out #11459
- colour inserts land after non-ASCII text, and missing windows answer nil #11509
- selected text stays readable on a translucent console background #11438
- a room the map audit renumbers is no longer listed, or stood in, under its old ID #11382
- Re-selecting a capture group after replace() selects the replacement #11104
- Settings search finds the colour settings when searching for "colour" #11433
- printCmdLine() and appendCmdLine() leave the caret after all the text #11405
- an empty portable.txt gets a notice that says so #11378
- pausing a replay no longer moves the Pause button out from under the mouse #11383
- a script's right-click action gets nils, not old coordinates, when nothing is selected #11448
- a profile in a background tab reports the right width when its borders change #11426
- Settings > Shortcuts warns when a Mudlet shortcut takes a package command's key #11388
- a password in the encrypted file is found even while the keychain does not answer #11387
- MXP brings a frame's first tab to the front when a frame is nested in it #11410
- a GMCP merge key sent as a plain value no longer leaves __needMerge in gmcp #11487
- a wrap narrower than the timestamps no longer reports a huge NAWS width #11421
- a map view closed with its X button is closed, not just hidden #11442
- picking a map menu item whose map event was removed no longer crashes #11460
- asking where to install speech recognition no longer stops it being found #11373
- an MXP external frame opened in a background tab gets its width #11436
- a user window docked beside another gets a share of the area #11439
- caret keys no longer crash after deleteLine() empties or shortens a console #11536
- enableModuleSync() and disableModuleSync() keep a script's module priority #11412
- a dropped package with broken scripts says which ones #11391
- getIrcConnectedHost() forgets the server once its connection ends #11407
- getTimestamp() reads the first line of a console #11392
- getSelection() reads the line the selection is on #11394
- replace() redraws the line it changes #11406
- inserted text is rewrapped at the console's own wrap width #11424
- a buffer window keeps its wrap width and indents when recoloured #11441
- saving a key binding keeps its "already used by Mudlet" warning #11434
- clicking the category a Settings search started from ends the search #11432
- Button toolbars no longer stack copies of their buttons when rebuilt #11497
- Speech recognition after an error no longer blames a missing model #11328
- IRC /close shows the server buffer after the server renamed it #11408
- detached-window moves no longer leave a duplicate tab, and empty posts no longer mark tabs #11624
- button bar menus no longer pile up in memory each time a bar redraws #11611
- a malformed Mudlet.ini is reported at startup again #11379
- setConfig() refuses a map room size below 1 #11393
- Tabs in detached windows now show new activity #11237
- match-all triggers and aliases find no extra empty match inside an accented letter #11386
- setFont() refuses a missing font written as a list or in quotes again #11381
- a chat peer snooping you no longer sees a "?" after every prompt #11380
- half a Big5/GBK/EUC-KR character no longer swallows the game's next line ending or colour code #11515
- regex triggers and aliases starting with (*NO_JIT) fire again #11455
- editor Undo and Redo no longer leave a trigger or script switched off #11385
- switching spell check or its dictionary rechecks the input line again #11384
- Settings room size arrows can step past 7 #11430
- unticking "Use maximum lines possible" brings back the scrollback size chosen before #11429
- Esc in a Settings shortcut box closes Settings instead of becoming the shortcut #11427
- Settings keeps a picked older map and ticked copy destinations #11456
- Settings no longer applies a number while it is still being typed #11390
- table.save() taking quadratic time on tables of tables #11558
- Keep transparent-background text in one span in HTML logs #11550
- ansi2decho survives a cut-short colour and keeps it under bold #11514
- Scripts holding DLE, DC1, ETB or CAN characters survive a save #11489
- Speech recognition can use the microphone in macOS release builds #11572
- a custom line point beyond the range of room coordinates no longer aborts the 2D map #11473
- exporting after deleting an item the package exporter lists no longer touches freed memory #11466
- f() shows your variable called lookup again #11366
- crash or freeze installing a package whose config.lua errors without a message or never finishes #11346
- getLines() running out of memory on a huge line range #11312
- selectString() freezing Mudlet on an empty line with a large match count #11311
- a wrap indent close to the wrap width no longer exhausts memory #11307
- crash closing the room exits or properties dialog after its room is deleted #11306
- crash when a sysManualLocationSetEvent handler deletes the room #11302
- Mudlet freezing when a window is moved into itself #11286
- a damaged binary map no longer asks for gigabytes or hangs loading #11147
- crash when a map filter or map info script deletes rooms #11283
- crashes from game-defined MXP elements that close tags or refer to themselves #11284
- MXP no longer hoards game text in memory, and a stray VAR end tag no longer crashes #11315
- crash when a script closes or resets its own profile and then loads, closes or connects to another #11290
- destroying the main window with the map dock open no longer corrupts memory #11150
- Exporting area images in quick succession no longer crashes #11145
- crash when closing a profile that had opened a map widget #11293
- a console buffer limit worked out as zero lines no longer crashes Mudlet #11309
- pathfinding crash after loading a JSON map #11285
- a game asking to move the cursor a huge distance no longer crashes Mudlet #11308
- pasting only blank lines into a trigger pattern no longer crashes #11321
- a replay file that changes while it plays no longer crashes Mudlet #11322
- a Lua finaliser running while trigger captures are prepared no longer crashes Mudlet #11324
- a game nesting compressed data inside compressed data no longer corrupts memory #11323
- quitting while text-to-speech is still talking no longer crashes Mudlet #11331
- crash picking a right-click menu item whose mouse event was just removed #11341
- crash installing a package or loading a profile that lists an incomplete module #11343
- redrawing a window whose lines were all deleted no longer crashes Mudlet #11355
- closing a profile while its unzipAsync() is still extracting no longer crashes Mudlet #11362
- a spawn()ed program that prints after its profile closed no longer crashes Mudlet #11369
- chatting to a profile that has closed no longer crashes Mudlet #11370
- redoing the deletion of a button bar no longer crashes Mudlet #11418
- closing the script editor no longer crashes after its detached window is gone #11435
- calling closeMudlet() twice no longer crashes Mudlet #11318
- closing Mudlet no longer crashes when a profile close is still pending #11443
- right-clicking past the room colors no longer crashes or deletes the wrong one #11465
- installing from the package repository no longer reads freed list items #11467
- a second close of a profile while its save question is open no longer crashes #11468
- deleting an area while the map is exported to JSON no longer reads freed memory #11470
- Removing an exit also removes its weight, door, lock and custom line #11109
- editing a point on a custom line removed while its menu is open no longer crashes #11461
- setMapZoom() refuses a zoom that is not a finite number #11475
- triggers or aliases that feed themselves more than once no longer freeze Mudlet #11483
- a huge media loop count no longer freezes Mudlet #11490
- calling a database or directory object's method without the object no longer crashes Mudlet #11492
- accepting custom line properties after a script deleted the room no longer writes to freed memory #11493
- connectExitStub() accepts direction codes 2 to 11, and in/out no longer abort debug builds #11496
- a Big5-HKSCS character outside the BMP no longer crashes Mudlet #11500
- a package config.lua that leaves its globals in an awkward state no longer crashes Mudlet #11501
- Windows reserves enough stack to repaint thousands of sibling widgets #11504
- zooming in on a big map label runs Mudlet out of memory #11351
- a huge map image label no longer freezes Mudlet allocating its image #11533
- extending a Shift selection across a cleared window no longer crashes #11541
- dragging a line selection across a cleared window no longer crashes #11542
- choosing an editor search result after a script changed items no longer crashes #11562
- undoing a delete no longer reads the freed command after a nested save #11566
- a chat peer's name can no longer crash Mudlet #11518
- clicking into the script editor's code area lets you type there again #11449
- Mudlet no longer crashes now and then as it exits on macOS #11565
- Color triggers scan the whole line again after an earlier trigger lengthens it #11191
- keep Lua autocomplete popup from stealing editor focus #10780
- --help and --version no longer crash now and then #11357
- Opening a map view no longer crashes before the map window was ever opened #11282
- multiline triggers with a Lua function body get multimatches #11081
- multiline triggers with an expiry count keep their named captures #11077
- An MCCP stream that inflates past the cap is refused, not left desynced #11079
- Text sent instead of an MCCP stream is shown in full #11075
- A broken MCCP stream is refused as the version it used #11074
- Restarting MCCP compression no longer leaks memory #11062
- Settings explain why options are greyed out when no profile is open #11141
- Switched-off items run their scripts again after a profile reset #11107
- setConfig refusals name the right setting and what it accepts #11063
- Editor undo now fully restores color triggers, patterns and event handlers #11113
- Commit a game-wrapped line held back with no main console view #11155
- MXP frames inside a tab fit it when opened in a background profile #11232
- MXP frames inside a separate window follow it when it is resized #11200
- MXP frames nested in an external frame or a tab now appear inside it #11172
- wrapLine() on the main window uses the profile's wrap width #11192
- Deleting a group no longer reads the group after it is destroyed #11129
- A deleted user window no longer squeezes the next one to no height #11160
- A saved sign-in's own record is kept in the profile, not the keychain #11033
- An unclosed hyperlink no longer makes every later line clickable #11023
- Saved sign-in tokens follow the password storage preference #11032
- A locked keychain is no longer asked once per storage layout #11031
- Quote game text safely in MXP links #11096
- setConfig("mapExitSize") keeps sizes like 12.5 and rejects invalid ones #11071
- Pause, resume and stop a sound by the absolute path it was played from #11099
- hasExitLock() errors now say what type of direction they got #11142
- Loading a map no longer drops a room whose ID is below one #11108
- Map audit no longer empties the room list of an area it renumbers #11087
- A spoken phrase goes to the game that heard it, not the one that took the microphone #10986
- A model loaded from a speech error handler is no longer thrown away #10987
- Games with their own interface no longer get the starter UI too #11134
- Stop game text from injecting MMCP chat commands #11100
- Blank lines corrupting MMCP snoop output #11094
- Drop the stray quotes around the unknown docking area message #11092
- Removed special exits no longer leave their weight, lock or area exit behind #11089
- Importing a JSON map with an unknown door type no longer crashes #11088
- getConfig("mapRoomSize") answers in the unit setConfig takes #11064
- Broken UTF-8 from the game no longer eats line endings and colors #11068
- A saved sign-in now works on games that only offer password login #10964
- Configure areas dialog no longer preselects the wrong area, mislinks renames, autosaves, or blanks the map #10597
- Unanswered keychain prompt no longer hangs the connect dialog #10555
- Stuck password masking now clears itself after login #10554
- User windows no longer crash when resized or moved after their profile closes #11025
- Say so when a key binding uses a key Mudlet has already taken #10814
- 2D mapper no longer aborts on a room at the coordinate limit #10995
- Crash when a command line is destroyed while a focus retry is pending #10486
- Speech no longer kills a macOS build that was started from a terminal #11022
- Alias, timer, script and key editor icons also coalesce Lua toggles into one tree walk #10817
- unreadable theme error, cut-off package name and artwork that breaks in silence #10939
- say when a package installs but not everything in it works #10915
- Empty personal dictionaries load with newer spell checkers #10477
- Copying a triple-clicked line no longer cuts it short #10836
- A timer set to zero seconds no longer uses 100% CPU #10835
- System messages no longer paint an opaque black background #10592
- Show the full Lucide icon license in the About dialog #10961
- createMapper() works again after the map window is closed #10886
- Triggers set to match all no longer crawl on very long lines #10892
- Show main toolbar setting now reaches windows that are already detached #10940
- extra slash in the file path saveProfile() reports back #10938
- --mirror now copies the game's text as well as the client's #10916
- saved passwords are no longer readable by other accounts on Linux and macOS #10914
- show --version and --help without needing a display #10913
- connection dialog opens with one of your games picked #10912
- Dragging a tab out of the window now takes the same effort for every tab #10902
- the interface tour keeps answering the keyboard after you click Next #10901
- IRC kicks now say why, and being kicked yourself is still readable #10900
- two containers on opposite window edges no longer leave the console without room for text #10898
- Color codes survive a game that pauses right after the escape character #10894
- creating a window element in a window that does not exist no longer drops it on the main console #10893
- MSDP group and party lists from games now reach scripts #10891
- Mudlet no longer crashes when a package removes itself as it installs #10890
- Script editor autocompletion offers clean function names again #10899
- Linux .deb and .rpm packages no longer install developer-only files #10937
- northwest stub controlling north's locked-door choice #10889
- double space in openUserWindow's bad-argument-#1 error message #10888
- broken UI-design-philosophy.md link in docs/CONTRIBUTING.md #10887
- an attached container's border follows its own edge drag #10594
- Speech errors no longer trap a script in its own handler #10790
- a negative wrap indent no longer crashes Mudlet #10392
- Crash cancelling the map label dialog after the map was cleared #10541
- Move to position takes a room's custom exit lines with it #10519
- Spread and Shrink no longer skew a room's custom exit lines #10518
- A map label dragged out upwards or to the right lands where it was drawn #10515
- Creating a new map no longer flips the mapper into viewing mode #10511
- Clicking a room while editing now ends a hands-free middle-button pan #10502
- replays from games with compression failing to load or playing slowly #10843
- Crash draining a large compressed read on Windows #10425
- Crash restyling Mudlet after a package download dialog was replaced #10435
- Text is no longer garbled when the game pauses mid-character #10815
- The 2D mapper no longer freezes on a map with a room at the coordinate limit #10784
- an attached container's border follows the window as it is dragged #10590
- A stalled password lookup no longer leaves the profiles dialog unusable #10781
- Saved sign-ins no longer get lost or left behind #10726
- Key bindings taken by packages, and profiles with no server address #10791
- a media start position now starts the track there in all cases on Linux #10464
- The trigger editor shows five pattern rows and opens on the first #10813
- Game text can no longer make Mudlet send IRC commands of its choosing #10801
- expandAlias() no longer wipes the captures of the script that called it #10799
- Console scroll bar is visible again on Windows #10574
- ttsSpeechQueued reports a position the rest of the queue API accepts #10805
- A media request Mudlet cannot play is refused instead of half-played #10811
- feedTelnet() and feedTriggers() errors arrive on one line #10807
- appendScript() says the script is missing instead of blaming your code #10804
- Crash when an IRC server sends a stray message-of-the-day line #10800
- Large stopwatch adjustments no longer flip to a negative time #10793
- Timers keep running after the emergency stop is switched off #10792
- A profile font the system resolves, like Helvetica, is used again #10787
- Mapper context menu items no longer pile up on the map widget #10540
- Trigger editor icons no longer lag after enableTrigger()/disableTrigger() #10605
- Words added to your dictionary are still there after a restart #10809
- Key bindings inside a group made by permGroup() now work #10802
- An older Mudlet still finds the saved password of a long profile name #10788
- Dismissing the settings no longer turns MMCP auto-accept calls off #10785
- Label click callbacks work again with links, and no stray Qt menu #10783
- Miniconsoles and user windows are the size they were created at #10782
- Report a profile.ini that cannot be parsed again #10786
- replace() no longer crashes Mudlet when the selection runs backwards #10389
- Adjustable containers connected to a border follow the window again #10349
- correct encoding table defects #10520
- attaching a container to a window edge no longer leaves the console without room for text #10602
- Saved sign-ins work on unencrypted games, and games learn if sign-ins are kept #10586
- Editing a room's exits redraws the map and marks it unsaved #10610
- Crash when Mudlet exits shortly after starting up #10461
- path to AI-ASSISTANTS.md #10607
- Room exits dialog no longer leaks its two column delegates #10582
- Crash after deleting the special exit being edited in the room exits dialog #10447
- Crash opening the editor when the profile's theme is missing #10417
- A map label you pick up follows the mouse again #10492
- Text no longer wraps to the wrong width after resizing or switching profiles #10490
- IRC kicks are shown, server text cannot inject markup, and scripts get the text as sent #10465
- Crash reporting no longer starts up during test runs #10462
- Placeholder text below WCAG AA in dark mode on older Qt #10238
- MSP's Off request now stops the sound it is playing #10481
- The starter interface no longer turns MSDP back on at every profile open #10500
- moving a window over the main output no longer loses text #10336
- Crash closing Mudlet while a profile is still loading #10430
- Crash from an alias that keeps expanding into itself #10424
- Match-all triggers no longer hold onto memory from their biggest line #10345
- Crash when using a scroll box or text box after its window was deleted #10364
- game text no longer vanishes behind a window moved over it #10343
- the mouse cursor stops being a hand after leaving a link #10275
- copy2decho no longer copies the wrong line's text #10274
- script editor reopens where it was left, not centred #10317
- Update window no longer offers a version that is out of date #10322
- re-land the package uninstall and download fixes lost by a stacked merge #10323
- A large burst of game text no longer stops part-way #10290
- MSDP tables keep their shape and unfinished variables stop half-arriving #10199
- an element removed from an adjustable container is no longer deleted with it #10279
- a hidden link no longer overwrites text after lines are removed #10179
- Copy from the trigger pattern right-click menu works again #10334
- Broken CFGUI Source URL #10333
- Auto-login works again on games that offer no GMCP sign-in method #10328
- macOS Lua tests job crashes because deferred package installs re-enter themselves #10321
- Typing on the connection window picks a game again, instead of renaming a profile #10310
- Code formatter no longer fails on Windows #10312
- Profile tab bar clipping and theme switching glitches #10292
- stray 'm' characters in game text on games using reserved ANSI parameter bytes #10288
- MSDP scripts that subscribe on connect work again #10277
- an install that fails now says why instead of failing silently #10005
- A frame emptied by the game no longer keeps a selection over the deleted text #10262
- Selecting a capture group no longer breaks the next selection #10301
- Re-applying a room or exit lock no longer marks the map as changed #10197
- Undefined behavior on profile load, from a flag read before it exists #10253
- The Map button no longer builds a second mapper over a scripted one #10193
- an embedded mapper keeps working after another map view closes #10191
- a pasted link no longer runs a different link's command #10178
- Missing colon on toolbar visibility label #10239
- Missing fonts fall back to the default instead of a random one #10134
- Writing to a console emptied by deleteLine() no longer crashes #10225
- undefined behaviour when the script editor's undo stack is destroyed #10232
- undefined behaviour on every profile load, from resetting the telnet session too early #10229
- trigger pattern highlighter read an uninitialised flag on every pattern row #10228
- undefined behaviour when creating or deleting any trigger, alias, timer, key, script or button #10227
- Lua UI functions no longer crash when a profile has no window #10186
- only the Next button advances the interface tour #10190
- Mudlet Tutorial's give command, hints and intro panels #10163
- MSDP values containing control codes no longer go missing #10143
- Console output no longer slows down as the window gets bigger #10173
- Long profile and character names no longer share one saved password #10147
- Dragging inside the input line no longer scrolls its text out of place #10167
- a skipped _unique no longer freezes the sheet's other constraints #10170
- Reject malformed version numbers instead of misreading them #10151
- phpTable entries holding false can now be updated and deleted #10150
- Turning off NEW-ENVIRON mid-session now stops sending data to the game #10148
- Keep the loaded map when a download is canceled or returns no map #10146
- Databases are still created when a unique constraint names a column that isn't there #10144
- Switching map areas no longer leaves rooms selected off-screen #10029
- Tab detach threshold silently stayed at 50px instead of the intended 80px #10127
457 more changes are not listed here, as GitHub limits how long release notes can be - see the pull requests merged in this period.
Full changelog since last release (Mudlet-5.0.2)
Added:
Improved:
Fixed: