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

Hosticesus.org
Port4000
EncodingUTF-8
Browser clientplay.icesus.org

Install TinyFugue

TinyFugue exists in two versions, and the difference matters 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:

SettingWhy
meta_esc offStops TF from interpreting bytes with the high bit set as meta-escape sequences. Without this, accented characters get reinterpreted as keyboard shortcuts.
istrip offTells TF to keep the high bit on incoming data. Stripping it would mangle every UTF-8 multibyte sequence.
encoding utf-8The display encoding TF assumes for output. Set this to match your terminal's locale.
default_charset UTF-8The 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:

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:

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:

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

Related Guides

Want the fastest working client before you customize anything?

Open the browser client