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.
LOCALConversion happens in this browser tab. Files are not uploaded.
Generated module
Focus here, then use Ctrl/Cmd+A and Ctrl/Cmd+C to copy all
Installing the module
- Download the active
.tsmodule, or extract the all-modules ZIP. - Move the generated
.tsfiles into themodulesfolder for the relevant server. - 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++ input | Generated smudgy code |
|---|---|
#alias | Direct createAlias(...) calls. Simple sends use native inline templates; complex bodies use callbacks. Runtime replacement and removal use smudgy’s aliases registry. |
#action | Direct native createTrigger(...) calls using priority and fallthrough: false for TinTin++ first-match behavior. Runtime definitions retain only a small handle registry. |
#gag, #highlight, #substitute | Readable createTrigger rules using line.gag, line.highlight, and line.replace. |
<099>, xterm, and RGB color codes | Named, reusable smudgy styles and highlight color options, including skip/default channels, whitespace elision, and substitution style restoration. |
#variable, #local | Reload-safe vars seeds and callback-local values, including nested table selectors. |
#function, #if, loops, lists | Local TypeScript functions and structured control flow, with common math, regexp, replacement, and list operations translated directly. |
#ticker, #delay, #macro, #event | Native timers, recognized hotkeys, and typed smudgy system-event subscriptions with replacement and removal lifecycle. |
#class, runtime #read | Precompiled class groups. Native alias handles toggle Alias.enabled; a runtime read can re-enable a selected class file. |
#format, #line gag, #write | Verified formatting and queued gag helpers. Writes become an explicit no-op because smudgy persists vars automatically. |
#split, #draw, terminal events | A responsive smudgy pane where practical; terminal-owned redraw and sizing workarounds become warning-backed no-ops. |
#read | Selected static dependencies are expanded in place. Missing, ambiguous, variable-driven, and cyclic reads remain visible diagnostics. |
| Command abbreviations | TinTin++ first-prefix abbreviations follow the pinned 2.02.61 command table. |
#nop | A regular TypeScript comment kept beside the construct it documented, including aliases collapsed to inline templates. |
| Unsupported input | A 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
#readcan 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.