TinyFugue Setup for Icesus
TinyFugue (TF) is a venerable, terminal-native MUD client. It is small, fast, scriptable, and pleasant over SSH. The pieces that matter for an Icesus session are visual mode (a fixed command input line at the bottom of the terminal), UTF-8 with proper 8-bit handling for äöå, a world definition that doubles as autoconnect, and a small auto-reconnect handler for daily reboots. This guide gives you a working ~/.tfrc.
Connection Settings
| Host | icesus.org |
| Port | 4000 |
| Encoding | UTF-8 |
| Browser client | play.icesus.org |
Install TinyFugue
TinyFugue exists in two versions, and the difference matters for Icesus:
- TF4 — what most distro packages still ship (
apt install tfon Debian/Ubuntu,dnf install tfon Fedora,brew install tfon macOS). Works for plain ASCII, but treats the terminal as 8-bit Latin-1. Finnish characters in player names come out mangled. - TF5 — the maintained fork at github.com/ingwarsw/tinyfugue, with proper UTF-8 support. This is the one you want for Icesus.
If your distro happens to package TF5, use the package. If you are not sure which version it ships, install it, run tf -v, and check. If it reports a 4.x version or you see äöå render as garbage in player names after connecting, build TF5 from source:
git clone https://github.com/ingwarsw/tinyfugue.git
cd tinyfugue
./configure
make
sudo make install
Arch's AUR (yay -S tinyfugue) tracks TF5. Other distro situations vary — check before relying on the package.
Run tf to start it. On first launch it reads ~/.tfrc; everything below goes there.
~/.tfrc — The Whole Thing
Read it through once, then the sections after walk through the parts that matter.
;; UTF-8 / 8-bit character support (äöå)
/set meta_esc off
/set istrip off
/set encoding utf-8
/set default_charset UTF-8
;; General settings
/visual on
/more on
/set beep off
/def bg = /fg -n
/set always_on 1
;; Auto-reconnect to Icesus on disconnect (e.g. reboot)
/def -p1 -hDISCONNECT -msimple -t"icesus" recon_icesus = \
/echo %%% Disconnected from Icesus. Reconnecting in 15 seconds...%;\
/repeat -60 1 /connect icesus
;; Worlds
/addworld -T"lp" icesus your-character your-password icesus.org 4000
UTF-8 and Finnish Characters
Icesus sends UTF-8. TF5 understands that, but the relevant settings have to be turned on explicitly because TF was originally designed in a 7-bit world. Four lines do the work:
| Setting | Why |
|---|---|
meta_esc off | Stops TF from interpreting bytes with the high bit set as meta-escape sequences. Without this, accented characters get reinterpreted as keyboard shortcuts. |
istrip off | Tells TF to keep the high bit on incoming data. Stripping it would mangle every UTF-8 multibyte sequence. |
encoding utf-8 | The display encoding TF assumes for output. Set this to match your terminal's locale. |
default_charset UTF-8 | The charset advertised to the MUD over Telnet CHARSET negotiation. Icesus replies UTF-8 if you ask. |
If your terminal locale is wrong, TF cannot fix it from inside. Confirm with locale on the shell that your LC_ALL or LANG ends in UTF-8.
Visual Mode
/visual on is the equivalent of TinTin++'s #split. It pins the input line at the bottom of the terminal and lets MUD output scroll above it without ever overwriting what you are typing. During heavy combat or chat bursts, this is the difference between knowing what you typed and guessing.
Companions:
/more on— pages long output a screen at a time so a flood does not blow past you. Press space (or/more) to continue./set beep off— silences the terminal bell. Icesus channels and tells trigger BEL by default in some clients; this keeps the room quiet./def bg = /fg -n— a small alias to switch to the next background world. Useful only if you have several worlds defined./set always_on 1— a small but pleasant default that keeps the input line responsive even when output is busy.
Worlds and Autoconnect
TF organises connections as worlds. /addworld registers one:
/addworld -T"lp" icesus your-character your-password icesus.org 4000
Pieces, left to right:
-T"lp"— world type tag.lpworks well for LPMud-derived games like Icesus; it sets reasonable telnet defaults.icesus— the short name you will use to connect./world icesusor/connect icesusopens it.your-character— your in-game name. Send-on-login text.your-password— your in-game password.icesus.org 4000— host and port.
If you want autoconnect on TF startup, add /connect icesus at the end of ~/.tfrc. Without that line, TF reads the config and waits for you to type /connect icesus. Either is reasonable; the explicit form is friendlier when you want to read recent log lines before joining.
You can register a second world for the dev server in the same file:
/addworld -T"lp" ice-dev your-character your-password icesus.org 5000
~/.tfrc holds your password in plain text. Set tight permissions: chmod 600 ~/.tfrc. Do not commit the file to a dotfiles repo without redacting the password line first. If you would rather not store it on disk, leave the password slot blank and TF will prompt you on connect.
Auto-reconnect
Icesus reboots, networks blip. The /def -hDISCONNECT hook fires when TF loses a world's connection. Yours says: if the disconnected world is icesus, print a message and try to reconnect once a second for 60 seconds.
/def -p1 -hDISCONNECT -msimple -t"icesus" recon_icesus = \
/echo %%% Disconnected from Icesus. Reconnecting in 15 seconds...%;\
/repeat -60 1 /connect icesus
Pieces:
-p1— priority 1, makes this the first DISCONNECT handler considered.-hDISCONNECT— the hook this responds to.-msimple -t"icesus"— only react to disconnects of the world namedicesus, not other worlds you may add later./repeat -60 1 /connect icesus— runs/connect icesusonce a second, up to 60 times. Stop earlier with/purge -P recon_icesusif you do not want it retrying.
If you prefer a longer gap between attempts, replace /repeat -60 1 with /repeat -20 15 (20 attempts, 15 seconds apart). One reconnect a second is fine for a single user; tune it down if you ever notice TF spinning during a real outage.
Logging
TF logs per world. After connecting:
/log ~/icesus-logs/today.log
You can also automate it with a hook:
/def -hLOGIN -t"icesus" log_icesus = /log ~/icesus-logs/$[ftime("%%Y-%%m-%%d")].log
That hook fires on world login and starts a dated log automatically. /log off stops it.
Aliases and Macros
/def defines aliases and triggers. A few patterns that come up:
;; Simple text alias
/def q = /quit
;; Alias with a single argument
/def as = /send cast arrow of steam at %1
;; Highlight all "newbie" channel lines
/def -t"^newbie:" -F hl_newbie = /echo %t
Like in any client, the safest aliases are explicit. If a one-letter alias can quietly send a private tell or hit the wrong target, give it a longer name.
Common First Problems
- Foreign characters look broken: confirm
localeshows UTF-8 and that~/.tfrchas all four UTF-8 settings, not justencoding. - Login does not happen automatically: the
/addworldline stores send-on-login text. If you blanked the password slot, TF will prompt you on connect. - Reconnect storm:
/purge -P recon_icesuscancels the pending repeat. Edit the interval if it is too tight. - Visual line missing: some terminals need
/visual onissued after the first/connect. If yours behaves that way, add/visual onat the very end of~/.tfrc. - Lines clip at the right edge: resize your terminal first, then run
screensizeorterm ansiin-game so Icesus sees your real width.
Related Guides
Want the fastest working client before you customize anything?
Open the browser client