No description
Find a file
Vadim Peretokin e118c672ce fix: pasted text goes in at the cursor, not at the start of the line
TBuffer::paste() built QPoint P_current(cx, y), where cx is the index into the
clipboard chunk, and handed that to insertInLine() as the destination column - so
the clipboard always landed at column 0 whatever column the cursor was on. The
cursor's x was read only by the function's early bail. Insert at x + cx (#9867).

That bail - x >= buffer.at(y).size() - also dropped a paste at or past the end of
a line silently, with no error and no return value, so the ordinary
moveCursor(w, #getCurrentLine(w), y) + paste(w) idiom did nothing (#9868).
insertInLine() already pads a line out to an out-of-range column, which is what
insertText() does from the same cursor position, so letting the insert through is
enough. Its own x < 0 check does not cover paste, which offsets by x + cx: at
x = -1 only the first character would be rejected and the rest would land one
column early, so paste keeps a guard of its own.

The loop's append branch went with them: needAppend was a const false, so the
branch was gated purely on y >= getLastLineNumber(), and the only caller,
TConsole::paste(), guards on buffer.size() - 1 > mUserCursor.y(). Instrumented
tracing of the whole busted suite entered it zero times. The trailing wrapLine()
call sat under the hasAppended flag only that branch could set, so it never ran
either.

Dropping the bail also drops the buffer.at(y) whose FIXME warned of an exception
on an empty buffer; insertInLine() range-checks y itself and falls back to
appendLine().

Links are still not remapped into the destination's link store, so a pasted
hyperlink can fire an unrelated command (#9869). That is pre-existing, is not
observable from Lua, and wants its own change.

Five specs in the existing copy/paste block, four of which discriminate: against
development's TBuffer.cpp the run is 583 successes / 4 failures - 'betaxxxxx'
where 'xxbetaxxx' is expected, 'xxxxx' where the paste should have landed, and
the colour readback off by one run - and 587 / 0 with the fix. The fifth pins the
x < 0 guard, which passes either way but stops the guard being removed as
redundant. The pre-existing "paste places the copied selection at the target
cursor" spec is renamed: a cleared target has no line after the cursor's, so
TConsole::paste() appends there and never reaches TBuffer::paste() at all.

Assisted-by: Claude:claude-opus-5
2026-08-13 18:04:35 +02:00
.agents/skills Infra: Add CMake presets for every platform, and one home for AI assistant skills (#9742) 2026-08-12 21:28:13 +02:00
.claude Infra: Add CMake presets for every platform, and one home for AI assistant skills (#9742) 2026-08-12 21:28:13 +02:00
.devcontainer Infrastructure: update edbee-lib submodule & use system oniguruma if present (#9156) 2026-04-06 16:28:46 +01:00
.github fix: undoing the game's line wrapping no longer merges list entries (#9836) 2026-08-13 11:39:13 +02:00
.signpath Infrastructure: disable signing MudletCrashReporter.exe temporarily (#8880) 2026-02-04 18:29:23 +01:00
.vscode add: 3rd party definition files for Lua (#8966) 2026-03-25 16:38:21 +11:00
3rdparty fix: notepad, IRC client and toolbars outliving their profile (#9706) 2026-08-11 19:13:19 +02:00
CI fix: preloading a sound no longer plays it, and IRC settings stop losing your password (#9817) 2026-08-12 20:31:43 +02:00
cmake infrastructure: harden the Widgets audit script and refresh its baseline (#9516) 2026-07-26 18:05:59 +02:00
docker improve: remove qt5 checks (#7736) 2025-02-24 06:59:51 +01:00
docs Infra: Add CMake presets for every platform, and one home for AI assistant skills (#9742) 2026-08-12 21:28:13 +02:00
src fix: pasted text goes in at the cursor, not at the start of the line 2026-08-13 18:04:35 +02:00
templates Update license to be GPLv2 or later. 2014-09-03 23:56:01 -07:00
test fix: saved variables holding functions come back empty again instead of half-filled (#9860) 2026-08-13 15:49:17 +02:00
translations Infrastructure: Update text for translation in Crowdin (#9718) 2026-08-07 02:38:22 +00:00
.clang-format infrastructure: apply clang-format style to tests too (#9201) 2026-04-20 11:56:29 +02:00
.clang-tidy Infrastructure: update .clang-tidy with version 16 checks (#7213) 2024-05-26 22:57:20 +00:00
.crowdin.yml Infrastructure: give a danger-friendly PR title to Crowdin updates (#5605) 2021-11-07 22:17:49 +01:00
.cursorrules Infrastructure: update info for LLM agents (#8245) 2025-09-23 07:06:06 +02:00
.DirIcon Fix: Add StartupWMClass and .DirIcon for AppImage icon recognition (#8480) 2025-11-13 23:16:22 +01:00
.git-blame-ignore-revs fix: Clang-format hash in .git-blame-ignore-revs (#8882) 2026-02-26 16:31:06 +01:00
.gitattributes improve: ship every default package as an mpackage (#9626) 2026-08-04 10:18:48 +02:00
.gitignore Infrastucture: ignore multiple build targets (#9562) 2026-08-02 22:23:12 +02:00
.gitmodules Fix: updater to work with github releases (#9125) 2026-04-08 20:19:41 +02:00
.imgbotconfig Infrastructure: Add .imgbotconfig file to set a PR Title which conforms with our danger checks (#5714) 2021-11-30 15:01:03 -05:00
AGENTS.md Infrastructure: update info for LLM agents (#8245) 2025-09-23 07:06:06 +02:00
asan-suppressions.txt infrastructure: stop suppressing QString leaks in LSan enforcement (#9602) 2026-08-03 11:39:32 +02:00
CLAUDE.md Infrastructure: update info for LLM agents (#8245) 2025-09-23 07:06:06 +02:00
CMakeLists.txt Infrastructure: add Mudlet lua files to those shown by Qt Creator (#9409) 2026-07-12 20:08:02 +00:00
CMakePresets.json Infra: Add CMake presets for every platform, and one home for AI assistant skills (#9742) 2026-08-12 21:28:13 +02:00
COMMITMENT Add COMMITMENT (#2109) 2019-01-04 08:46:15 +01:00
COMPILE Update COMPILE 2017-05-14 10:40:35 +02:00
COPYING Move files to the root of the tree 2009-03-05 02:11:35 -05:00
CPPLINT.cfg Fix typo in cppfg 2020-03-20 15:33:54 +01:00
dangerfile.js Infrastructure: trial new guideline - no TODOs as they dont actually add value (#6446) 2022-11-27 22:41:08 +01:00
icon_1024x1204.png [ImgBot] Optimize images 2020-10-23 22:28:38 +01:00
icon_dev_1024x1204.png [ImgBot] Optimize images 2020-10-23 22:28:38 +01:00
icon_ptb_1024x1204.png [ImgBot] Optimize images 2020-10-23 22:28:38 +01:00
mudlet.desktop add: telnets:// link support for secure TLS connections (#9153) 2026-04-12 17:37:37 +02:00
mudlet.png [ImgBot] Optimize images (#2684) 2019-06-29 19:37:00 +02:00
mudlet.svg [ImgBot] Optimize images 2019-10-21 07:25:43 +02:00
README.md Infrastructure: Add SignPath Foundation attribution to README (#8895) 2026-02-06 08:35:13 +01:00
SECURITY.md Infrastructure: Bump development version to 4.20.0 (#8919) 2026-02-07 19:15:47 +01:00
UI-design-philosophy.md Add UI-design-philosophy.md (#8002) 2025-08-12 07:02:24 +02:00


Mudlet
Mudlet

Play immersive, multiplayer, pure-text RPGs on Mudlet.

CodeFactor

AboutKey FeaturesDownloadHow To UseRoadmapCreditsLicense

Interfaces players have created with Mudlet

About

Mudlet is a quality MUD client, designed to take mudding to a new level.

Its a modern breed of a client on the gaming scene with an intuitive user interface, a specially designed scripting framework, and a very fast text display. That, along with cross-platform capability and an open-source development model result in a very likable game client.

Key Features

  • Simple to use
  • Very, very fast
  • Active development
  • Big, thriving community
  • Powerful trigger engine
  • Rich Lua-based coding functionality (API)
  • Excellent script editor
  • 2D and 3D mapper with autowalk
  • Powerful and simple to use GMCP
  • Discord integration
  • Completely themable
  • Open-source and Free
  • Cross platform: runs on Windows, macOS and Linux
  • Full compatibility: run same scripts on any of the above
Explain?

Easy to use client

Were big on usability, and as such, creating an easy to use client and interface is one of the defining goals of the project. This applies to both the power users and usual gamers everyone will feel at home with Mudlet, without having to waste too much time figuring out how to do something.

Designed for speed

Mudlet is designed and built to be very fast and efficient right from the start. Its scripting engine is designed to scale to large systems without bogging down and the text display is designed to handle thousands of lines in under a second. All in all, we are very serious about Mudlet being quick and take all measures to make it so.

Powerful Scripting

Mudlet features a scripting framework using Lua a small, fast and efficient scripting language. This allows Mudlet to leverage the existing community and large ecosystem of existing packages for Lua without the many drawbacks of creating a Mudlet specific scripting language. Best of all, the Lua API is seamlessly integrated in Mudlet and shared by all aliases, triggers, scripts, keybindings, buttons and other Mudlet components.

Cross-Platform love

We believe in making Mudlet available to people on all major platforms, and we work on keeping cross-platform compatibility right from start. Mudlet is available on Linux (both 32bit and 64bit), Windows, and macOS; you may be able to run it on additional platforms as well.

Download

Download for free from mudlet.org.

How To Use

  1. Download and double-click on Mudlet to run
  2. Pick an existing game and hit Connect
  3. ... or play one of your choosing:
    1. Click New
    2. Enter Server address and Port of your game (found on the game's website, e.g. mygame.com and 2003)
    3. Pick a Profile name
    4. Hit Connect

Compiling

If you'd like to compile Mudlet yourself instead of downloading, you can find instructions to do so here.

Vision

Mudlet's vision is to build the best text gaming experience possible to nurture & grow this niche scene.

Roadmap

See the project's roadmap to get an idea of where it's headed

Contribute

Join in, contributions are welcome! Find out how you can start Contributing.

Credits

Author: Mudlet Makers.

This software wouldnt've been possible without these open source packages:

Credit to Markdownify for the README inspiration.

Windows code signing provided by SignPath.io, certificate by SignPath Foundation.

License

GPL2+


website  ·  forums  ·  manual