[Home] [Downloads] [Search] [Help/forum]

Release notes for MUSHclient version 3.43

Version 3.43

Released on 10 Feb 2004

1. Added selector 63 to world.GetInfo - return host name (ie. the name of your PC)

2. Fixed problem where doing a Hyperlink with a URL (ie. to go to the web) the hints field was ignored. Now if it is present it is displayed if you let the mouse hover over the hyperlink.

3. If you use Alt+Up-arrow to recall a partially-typed command, if one is found that is an exact match for what you type, it is skipped (presumably you want a *longer* command, not what you actually typed).

4. Fixed GetChatOption and SetChatOption which accidentally had two "user" fields - user name and user value. The remote user name has been renamed "username".

5. Removed some dialogs from the executable that were no longer used.

6. Amended the "constants" files that ship for VB/Jscript/Perl/Python to include the code for "other colour" when used with triggers (ie. colour number 16).

7. Fixed bug where, if you created a new world file, and immediately tried to install a plugin, you would get the message "No world ID specified".

8. Changed the way that XML documents are written (eg. world files, copy to clipboard) to read:

<?xml version="1.0" encoding="US-ASCII">

Earlier versions claimed to be writing UTF-8 encoding which was incorrect. By making this change, it will be possible to detect genuine UTF-8 files.

However if the UTF-8 flag is set for the world, then the encoding will say UTF-8.

9. Fixed a bug where if you unchecked "wrap at column" in the output configuration, and a line wrapped at the edge of the screen, it would revert to the wrong colour at the start of the new line.

10. Changed the way triggers are written (in XML) so that if you have not specified "other" trigger colouring, and the other colours are still both black, then the following lines will not be written:


(they are the default colours anyway).

11. Fixed a problem that seemed to happen occasionally, that a particular world would just "go quiet" - that is sending commands to it would not cause anything to happen. The speculation is that a FD_WRITE message has gone missing, and thus the client waits forever to be told it is OK to send data to the world. If that single message disappears (eg. because the message queue fills up) then it will stop sending to that world. The fix involves retrying the send, every time you need to send things to the world, which should work better.

12. Fixed bug where if a plugin had a "menu" alias, and the alias did a "send to script" then the script executed in the main world script space, not the plugin script space.

13. Fixed bug where if a plugin alias/trigger/timer did a "send to script" and there were no script commands in the plugin (other than in aliases/triggers/timers) then you would get an error message about "script engine not loaded". This was because loading the script engine was not done because it thought it wasn't needed.

14. Fixed bug where if you changed your chat name in the Chat configuration dialog, the name would not be changed immediately, and you would see something like: "Chat name changed from <name-not-set> to <name-not-set>.

15. Fixed bug where if you did not want a message if you could not connect to a MUD, you still got one if the host name could not be resolved.

16. Added new selector to GetTimerInfo (22) which returns the name (label) of the timer.

17. When you Ctrl+Click to display the menu of aliases which are menu items, disabled aliases no longer appear on the menu.

18. Fixed bug where if you made an alias with the auto-mapper, and then tried to use that alias, without first closing and re-opening that world, MUSHclient would either not notice the alias existed, or crash.

19. Fixed problem with telnet negotiation where in response to IAC DO SUPPRESS-GO-AHEAD MUSHclient would response IAC WILL SUPPRESS-GO-AHEAD more than once. Now it only does it once in a session, thus possibly avoiding telnet negotiation loops. Ditto for TERMINAL_TYPE and ECHO.

20. Fixed problem where it was possible to put line breaks (newlines) into places where they should not be (eg. trigger match text) which would cause problems later when the world file was being read in.

21. Added new script routine "GetFrame" - this lets you get the address of the main MUSHclient window (the enclosing frame).

22. Fixed bug where if a plugin required a MUSHclient version later than you have installed it would say "you require version X" where X was the current version, not the required version. This was confusing because you would think you already had the required version.

23. Added support for recognising Pueblo servers version 2.50.

24. Fixed bug where if a trigger matched, but the requested colours did *not* match, it would still play the trigger sound (if any).

25. When doing a script call "OpenLog" you can now supply a blank (empty) file name, and MUSHclient will use the current "auto log" file name, if any, substituting dates etc. as usual.

26. Changed contact details from our email address to:


This is our new interactive "support ticket" web page. This is because of the increasing amounts of email spam, it is quite possible for a genuine support request to be swamped by spam, or accidentally marked as spam by our mail filters. The new web page does not use email and will be monitored for support requests.

27. MXP processing now supports <v> as a synonym for <var>.

28. Fixed bug in commented-softcode sending where #-commenting did not correctly output lines.

29. Removed message for unregistered users: "As a registered user you will receive notification of updates to MUSHclient by email". This is no longer true. For notifications of updates users should now subscribe to the "news and updates" part of the Gammon Software Forum. (suggestion # 507)

30. Changed the global preferences dialog box screen 1 (list of worlds) to show the full name of the currently selected world in the world list. Previously a very long path name would have been truncated on the right, making it hard to distinguish between different names if they were all in the same folder. (suggestion # 505).

31. If auto-say is active *and* auto-say is set to "send response to command interpreter" then we no longer check for an open connection. This is so you can auto-say chats without having to be connected to a world. In other words, you can set the "auto-say" string to be "#chatall " and check "Send auto-say response to command interpreter" and then chat away to your friends even if the MUD is down, or not connected in the first place.

However if the auto-say string attempts to send to the world, the check is done then, for instance if you auto-say "say" then the check would still be done (the check is done on the re-evaluation of the command).

32. You can now use the field "temporary" in SetTriggerOption, SetAliasOption, and SetTimerOption (and the "Get" variants).

33. In SetTriggerOption (and GetTriggerOption) you have two new fields, "match_style" and "new_style".

The field match_style can be in the range 0 to 65535, and controls what style of text the trigger matches on (the default is zero, which is any style).

The other possibilites are 16 bits, as follows:


Each bit means:

i : 1 = match on inverse setting
I : whether to match inverse on or off (1 = on)

b : 1 = match on blink (italic) setting
B : whether to match blinking (italic) on or off (1 = on)

u : 1 = match on underline setting
U : whether to match underline on or off (1 = on)

h : 1 = match on hilite (bold) setting
H : whether to match hilite on or off (1 = on)

X : 1 = match background colour
xxx : background colour bits

0 = black
1 = red
2 = green
3 = yellow
4 = blue
5 = magenta
6 = cyan
7 = white

Y : 1 = match foreground colour
yyy : foreground colour bits (see above list for colours)

Putting all this together, if you wanted to make a trigger that matched on red text on green background, when the text was bold, you would do this:

0001 : match on bold setting
1010 : match on background, colour is green (1 + 010)
1001 : match on foreground, colour is red (1 + 001)
0001 : bold setting must be on

Thus, concatenating that we get: 0001101010010001

Use a scientific calculator to convert to decimal, and it is 6801.

Finally, we set the trigger option:

world.SetTriggerOption "mytrigger", "match_style", "6801"

I know it is complicated, but it is there for people who really want to do this stuff. :)

An easier way of doing "match_style" than fiddling with bits would be to set up an example trigger in the GUI configuration screen, and then look at the option value.

eg. - Set up an example of the style you are trying to match on, and then type the script command:

/world.note gettriggeroption ("mytrigger", "match_style")


Next, the other option "new_style" is somewhat simpler. You can have a number from 0 to 7 which controls what the triggered text is to be changed to, as follows:

0 : (no change)
1 : Make bold
2 : Make underline
4 : Make italic

You can combine those, so if the trigger should display bold italic, you would use 5.

For example:

world.SetTriggerOption "mytrigger", "new_style", "5"

(suggestion # 504)

34. Upgraded the regular expression processor (PCRE) from version 3.1 to 4.3.

This fixes various bugs and adds enhancements, a summary of some of them follows:

a. If the pattern /((Z)+|A)*/ was matched agained ZABCDEFG it matched Z instead
of ZA. This was just one example of several cases that could provoke this bug,
which was introduced by change 9 of version 2.00. The code for breaking
infinite loops after an iteration that matches an empty string was't working

b. If an octal character was given, but the value was greater than \377, it
was not getting masked to the least significant bits, as documented. This could
lead to crashes in some systems.

c. Perl 5.6 (if not earlier versions) accepts classes like [a-\d] and treats
the hyphen as a literal. PCRE used to give an error; it now behaves like Perl.

d. Unknown escapes inside character classes (e.g. [\M]) and escapes that
aren't interpreted therein (e.g. [\C]) are literals in Perl. This is now also
true in PCRE, except when the PCRE_EXTENDED option is set, in which case they
are faulted.

e. Support for UTF-8 added.

f. PCRE was incorrectly assuming anchoring (either to start of subject or to
start of line for a non-DOTALL pattern) when a pattern started with (.*) and
there was a subsequent back reference to those brackets. This meant that, for
example, /(.*)\d+\1/ failed to match "abc123bc". Unfortunately, it isn't
possible to check for precisely this case. All we can do is abandon the
optimization if .* occurs inside capturing brackets when there are any back
references whatsoever.

g. When there was a very long string of literal characters (over 255 bytes
without UTF support, over 250 bytes with UTF support), the computation of how
much memory was required could be incorrect, leading to segfaults or other
strange effects.

h. Added a new extension: a condition to go with recursion. If a conditional
subpattern starts with (?(R) the "true" branch is used if recursion has
happened, whereas the "false" branch is used only at the top level.

i. Although correctly diagnosing a missing ']' in a character class, PCRE was
reading past the end of the pattern in cases such as /[abcd/.

j. Added an error diagnosis for escapes that PCRE does not support: these are
\L, \l, \N, \P, \p, \U, \u, and \X.

k. Added support for Perl's \C escape. This matches one byte, even in UTF8
mode. Unlike ".", it always matches newline, whatever the setting of
PCRE_DOTALL. However, PCRE does not permit \C to appear in lookbehind
assertions. Perl allows it, but it doesn't (in general) work because it can't
calculate the length of the lookbehind. At least, that's the case for Perl
5.8.0 - I've been told they are going to document that it doesn't work in

l. PCRE now gives errors for /[.x.]/ and /[=x=]/ as unsupported POSIX
features, as Perl does. Previously, PCRE gave the warnings only for /[[.x.]]/
and /[[=x=]]/. PCRE now also gives an error for /[:name:]/ because it supports
POSIX classes only within a class (e.g. /[[:alpha:]]/).

m. Some bugs concerning the handling of certain option changes within patterns
have been fixed. These applied to options other than (?ims). For example,
"a(?x: b c )d" did not match "XabcdY" but did match "Xa b c dY". It should have
been the other way round.

n. PCRE now supports the \G assertion. It is true when the current matching
position is at the start point of the match. This differs from \A when the
starting offset is non-zero. Used with the /g option of pcretest (or similar
code), it works in the same way as it does for Perl's /g option. If all
alternatives of a regex begin with \G, the expression is anchored to the start
match position, and the "anchored" flag is set in the compiled expression.

o. A change of greediness default within a pattern was not taking effect at
the current level for patterns like /(b+(?U)a+)/. It did apply to parenthesized
subpatterns that followed. Patterns like /b+(?U)a+/ worked because the option
was abstracted outside.

p. Added "possessive quantifiers" ?+, *+, ++, and {,}+ which come from Sun's
Java package. This provides some syntactic sugar for simple cases of what my
documentation calls "once-only subpatterns". A pattern such as x*+ is the same
as (?>x*). In other words, if what is inside (?>...) is just a single repeated
item, you can use this simplified notation. Note that only makes sense with
greedy quantifiers. Consequently, the use of the possessive quantifier forces
greediness, whatever the setting of the PCRE_UNGREEDY option.

q. Added support for the \Q...\E escape sequence. Characters in between are
treated as literals. This is slightly different from Perl in that $ and @ are
also handled as literals inside the quotes. In Perl, they will cause variable
interpolation. Note the following examples:

Pattern PCRE matches Perl matches

\Qabc$xyz\E abc$xyz abc followed by the contents of $xyz
\Qabc\$xyz\E abc\$xyz abc\$xyz
\Qabc\E\$\Qxyz\E abc$xyz abc$xyz

For compatibility with Perl, \Q...\E sequences are recognized inside character
classes as well as outside them.

r. Perl 5.8 has changed the meaning of patterns like /a(?i)b/. Earlier versions
were backward compatible, and made the (?i) apply to the whole pattern, as if
/i were given. Now it behaves more logically, and applies the option setting
only to what follows. PCRE has been changed to follow suit. However, if it
finds options settings right at the start of the pattern, it extracts them into
the global options, as before. Thus, they show up in the info data.

s. Added the class [:blank:] (a GNU extension from Perl 5.8) to match only
space and tab.

t. From 5.004, Perl has not included the VT character (0x0b) in the set defined
by \s. It has now been removed in PCRE. This means it isn't recognized as
whitespace in /x regexes too, which is the same as Perl. Note that the POSIX
class [:space:] *does* include VT, thereby creating a mess.

u. If a comment in an extended regex that started immediately after a meta-item
extended to the end of string, PCRE compiled incorrect data. This could lead to
all kinds of weird effects. Example: /#/ was bad; /()#/ was bad; /a#/ was not.

(suggestion # 502)


35. Fixed problem where if you double-clicked on a word in the output window to select it, and letters in the word contained letters with the 8-bit on (ie. in the range 128 to 255) then they may have been considered to be a space, and the word selected incorrectly. Ditto for tab-completion.


36. Added some support for Unicode.

For a description of the problems involved in doing this, see:


To activate Unicode support, go to the Output configuration screen and check the "UTF-8" checkbox. When checked, the following things are done:

a. The display routine decodes UTF-8 into Unicode and displays it. Note that you should select a font that is capable of displaying Unicode characters for this to work (eg. Times New Roman, Lucida Sans Unicode, Courier New, Comic Sans MS).

b. If you double-click to select a word it should correctly calculate the word boundaries based on the Unicode characters.

c. When accepting data from the MUD, the lines will wrap at *character* boundaries, not byte boundaries. Putting this another way, a line consisting of entirely Unicode chararacters (eg. Greek) might take 2 bytes per letter (or more), so the output is wrapped at 80 characters (if you are wrapping at column 80) which may be 160 bytes, rather than at 80 bytes, as it used to.

d. The regular expression parser has been upgraded to recognise UTF-8 when scanning for text. The difference would apply in situations where you wanted to match on (say) exactly 4 letters. Now, it will match on 4 Unicode letters, which may be 8 bytes.

e. When you copy to the clipboard, or paste from the clipboard, MUSHclient will look for Unicode text in preference to normal text (if present) and convert it to UTF-8 internally. This *should* allow you to copy/paste Unicode to/from MUSHclient.


37. When logging in HTML colour, background changes are now also written using the <span> ... </span> tag.

(suggestion # 501)

38. Added support for telnet negotiation to turn MXP mode off: IAC DONT MXP.

(suggestion # 503)

39. Added a check to the logging configuration, and the logging confirmation dialogs, that if you do not have "log output" checked you will be asked to confirm. This is to prevent you logging a lengthy session, and later discovering that nothing (from the MUD) was actually logged. (suggestion # 444).

40. Fixed problem in world.Execute where if you used it from a plugin, the current plugin context would be discarded, so that after doing a world.Execute in a plugin you reverted to the main world "context". Now the current plugin is saved and restored, so even nesting such calls will still work correctly.

(bug # 500)

41. Changed the way that included triggers/timers/aliases are handled in their respective lists. Previously an included item (ie. from an include file) could be seen in the list but not edited.

Now, you can click the "edit" button to view it, however not save changes. That way you can at least see what they do.

(suggestion # 490)


42. Added new help file - this file has been available on the MUSHclient web site for a while for testing, it is now integrated into the program.

This help file is basically a rewrite of the old one, with (hopefully) all the new features in recent versions covered. In particular, you should find:

a. Every dialog box explained (excepting simple ones with a Yes/No question in them)

b. Every command explained (eg. Connection -> Quick Connect) with a link to relevant dialog boxes

c. Every script function documented (this is virtually identical to the script functions pages on the Internet)

d. Extensive cross-referencing - for example, related script functions refer to each other, and various topics refer to relevant script functions.

Also the "Contents" section of the help file has an alphabetic listing of all script functions and internal commands.

Basically there are four types of things in it ...

i. Command reference - this documents each menu command. Commands (which are different from script functions) are things (generally from a menu) like File -> Open, View -> Status Bar. Where relevant, they are cross-referenced to the dialog box that the command will show you.

ii. Dialog reference - this explains each dialog box, describing what each field means, what the check boxes do, and so on. The only exceptions are the occasional small box like "do you want to delete X?" which are not implemented internally as individual dialog boxes.

iii. Function reference - this documents each script function, like the current script function pages on this web site.

iv. General topics - this describes things (like what triggers are) which are not related to a specific command or dialog box.

43. Added some debugging messages to program initialisation. Some users are reporting that MUSHclient silently fails to start. These message should help work out why.

44. In full-screen mode, right-clicking to bring up the context menu now appends to the bottom of the menu, all of the MUSHclient menus (under the sub-menu "Full Screen") so that you can still access all menus (even though the menu bar is not visible).

(suggestion #477).

45. Upgraded to NSIS 2.0 installer (improved installer).

(suggestion #492).

View all MUSHclient release notes

Quick links: MUSHclient. MUSHclient help. Forum shortcuts. Posting templates. Lua modules. Lua documentation.

Information and images on this site are licensed under the Creative Commons Attribution 3.0 Australia License unless stated otherwise.


Written by Nick Gammon - 5K   profile for Nick Gammon on Stack Exchange, a network of free, community-driven Q&A sites   Marriage equality

Comments to: Gammon Software support
[RH click to get RSS URL] Forum RSS feed ( https://gammon.com.au/rss/forum.xml )

[Best viewed with any browser - 2K]    [Hosted at FutureQuest]