TinTin++ migration

TinTin++ smudgy

Turn related TinTin++ scripts into readable smudgy TypeScript modules.

Drop all related TinTin++ scripts here

Select the scripts you use together, including anything they #read.

Download format

LOCALConversion happens in this browser tab. Files are not uploaded.

Installing the module

  1. Download the active .ts module, or extract the all-modules ZIP.
  2. Move the generated .ts files into the modules folder for the relevant server.
  3. Start a session for that server. If it is already open, reload its scripts.

Each generated file is a self-contained entry module with its selected static #read dependencies expanded in place. The ZIP simply collects every generated entry module.

Windows
Documents\smudgy\<Server>\modules\
macOS and Linux
~/Documents/smudgy/<Server>/modules/

Editing module-created automations

tt2smudgy creates a smudgy module. Automations created by a module are read-only in the automations window; otherwise, rerunning the module could overwrite changes made there. To change an alias, trigger, or hotkey, edit the generated .ts file.

Conversion reference

TinTin++ inputGenerated smudgy code
#aliasDirect createAlias(...) calls. Simple sends use native inline templates; complex bodies use callbacks. Runtime replacement and removal use smudgy’s aliases registry.
#actionDirect native createTrigger(...) calls using priority and fallthrough: false for TinTin++ first-match behavior. Runtime definitions retain only a small handle registry.
#gag, #highlight, #substituteReadable createTrigger rules using line.gag, line.highlight, and line.replace.
<099>, xterm, and RGB color codesNamed, reusable smudgy styles and highlight color options, including skip/default channels, whitespace elision, and substitution style restoration.
#variable, #localReload-safe vars seeds and callback-local values, including nested table selectors.
#function, #if, loops, listsLocal TypeScript functions and structured control flow, with common math, regexp, replacement, and list operations translated directly.
#ticker, #delay, #macro, #eventNative timers, recognized hotkeys, and typed smudgy system-event subscriptions with replacement and removal lifecycle.
#class, runtime #readPrecompiled class groups. Native alias handles toggle Alias.enabled; a runtime read can re-enable a selected class file.
#format, #line gag, #writeVerified formatting and queued gag helpers. Writes become an explicit no-op because smudgy persists vars automatically.
#split, #draw, terminal eventsA responsive smudgy pane where practical; terminal-owned redraw and sizing workarounds become warning-backed no-ops.
#readSelected static dependencies are expanded in place. Missing, ambiguous, variable-driven, and cyclic reads remain visible diagnostics.
Command abbreviationsTinTin++ first-prefix abbreviations follow the pinned 2.02.61 command table.
#nopA regular TypeScript comment kept beside the construct it documented, including aliases collapsed to inline templates.
Unsupported inputA complete source-located TODO(tt2smudgy ...) plus a conversion warning; unsupported behavior is not silently guessed.

What to check

These TinTin++ and smudgy semantic differences deserve review after conversion:

  • TinTin++ uses first-match alias priority. Generated aliases are independent native smudgy aliases, so overlapping patterns can both run.
  • Action priority is preserved within displayed-text or raw-color actions. Smudgy evaluates raw triggers first, so review rules that overlap across those two input classes.
  • TinTin++ substitutions and highlights cascade across every occurrence. Generated line transforms see the original line and edit the first occurrence.
  • Runtime-dependent patterns, unrecognized terminal key sequences, and events outside the verified system-event subset remain source-located TODOs.
  • A runtime #read can only re-enable a class already found in the selected files; it cannot load a new file from disk.
  • Terminal rows, rounded boxes, screen-column queries, and redraw workarounds are approximated with smudgy’s responsive pane APIs.