|
|
@@ -0,0 +1,1675 @@
|
|
|
+<!DOCTYPE html>
|
|
|
+<html>
|
|
|
+<head>
|
|
|
+<meta http-equiv='content-type' content='text/html; charset=utf-8'>
|
|
|
+<meta name='viewport' content='width=device-width, initial-scale=1.0'>
|
|
|
+<style type='text/css'>
|
|
|
+body {font-family:Consolas;font-size:12pt}
|
|
|
+a {text-decoration:none}
|
|
|
+a:link {color:#06b}
|
|
|
+a:visited {color:#6b0}
|
|
|
+a:hover {text-decoration:underline}
|
|
|
+a:active {color:#b06}
|
|
|
+</style>
|
|
|
+<body bgcolor='#000000'>
|
|
|
+</head>
|
|
|
+<pre>
|
|
|
+<span style='background-color:#000'><span style='color:#FFF'>
|
|
|
+ <a href='#CHARACTERS'> CHARACTERS</a> <a href='#COLORS'> COLORS</a> <a href='#COORDINATES'> COORDINATES</a> <a href='#EDITING'> EDITING</a> <a href='#ESCAPE CODES'> ESCAPE CODES</a>
|
|
|
+ <a href='#GREETING'> GREETING</a> <a href='#INDEX'> INDEX</a> <a href='#KEYPAD'> KEYPAD</a> <a href='#LISTS'> LISTS</a> <a href='#MAPPING'> MAPPING</a>
|
|
|
+ <a href='#MATHEMATICS'> MATHEMATICS</a> <a href='#METRIC SYSTEM'> METRIC SYSTEM</a> <a href='#MOUSE'> MOUSE</a> <a href='#MSDP'> MSDP</a> <a href='#MSLP'> MSLP</a>
|
|
|
+ <a href='#PCRE'> PCRE</a> <a href='#REPEAT'> REPEAT</a> <a href='#SCREEN READER'> SCREEN READER</a> <a href='#SESSIONNAME'> SESSIONNAME</a> <a href='#SPEEDWALK'> SPEEDWALK</a>
|
|
|
+ <a href='#STATEMENTS'> STATEMENTS</a> <a href='#SUBSTITUTIONS'> SUBSTITUTIONS</a> <a href='#SUSPEND'> SUSPEND</a> <a href='#TIME'> TIME</a>
|
|
|
+
|
|
|
+
|
|
|
+<a name='INDEX'></a>
|
|
|
+
|
|
|
+</span><span style='color:#FF5'> INDEX
|
|
|
+
|
|
|
+</span><span style='color:#AAA'> On this page you'll find an introduction to using TinTin++. Additional
|
|
|
+ information can be found in the individual help sections.
|
|
|
+</span><span style='color:#5F5'>
|
|
|
+ Starting and Ending
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ The syntax for starting TinTin++ is: ./tt++ [command file]
|
|
|
+
|
|
|
+ Read more about the command file in the files section below. Remember
|
|
|
+ one thing though. All actions, aliases, substitutions, etc, defined
|
|
|
+ when starting up TinTin++ are inherited by all sessions.
|
|
|
+
|
|
|
+ If you want to exit TinTin++ type '#end' or press ctrl-d on an empty
|
|
|
+ line.
|
|
|
+
|
|
|
+ For the WinTin++ users, if you want to paste text use shift-insert,
|
|
|
+ text is automatically copied upon selection. This is typical Linux
|
|
|
+ behavior, but it can take some getting used to.
|
|
|
+
|
|
|
+</span><span style='color:#5F5'>
|
|
|
+ Basic features
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ I'll start by explaining some of the very basic and important features:
|
|
|
+
|
|
|
+ All TinTin++ commands starts with a '#'.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #help -- #help is a client command, and isn't send to the server.
|
|
|
+
|
|
|
+ All TinTin++ commands can be abbreviated when typed.
|
|
|
+
|
|
|
+ #he -- Typing #he is the same as typing #help though it's suggested to
|
|
|
+ use at least 3 letter abbreviations just in case another command is
|
|
|
+ added that starts with 'he'.
|
|
|
+
|
|
|
+ All commands can be separated with a ';'.
|
|
|
+
|
|
|
+ n;l dragon;s;say Dan Dare is back! -- do these 4 commands
|
|
|
+ There are 3 ways ';'s can be overruled.
|
|
|
+
|
|
|
+ \say Hello ;) -- Lines starting with a '\' aren't parsed by TinTin++.
|
|
|
+ say Hello \;) -- The escape character can escape 1 letter.
|
|
|
+ #config verbatim on -- Everything is sent as is except '#' commands.
|
|
|
+</span><span style='color:#5F5'>
|
|
|
+ Connecting to a server
|
|
|
+</span><span style='color:#FFF'>
|
|
|
+Command</span><span style='color:#AAA'>: #session </span><span style='color:#FFF'>{</span><span style='color:#AAA'>session name</span><span style='color:#FFF'>} {</span><span style='color:#AAA'>server address</span><span style='color:#FFF'>} {</span><span style='color:#AAA'>port</span><span style='color:#FFF'>}</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ Example: #session someone tintin.sourceforge.net 4321
|
|
|
+
|
|
|
+ You can have more than one session, in which case you can switch
|
|
|
+ between sessions typing #<session name>.
|
|
|
+
|
|
|
+ You can get a list of all sessions by typing: #session. The current
|
|
|
+ active session is marked with (active). Snooped sessions with
|
|
|
+ (snooped). MCCP sessions (compression) with (mccp 2) and (mccp 3).
|
|
|
+
|
|
|
+</span><span style='color:#5F5'>
|
|
|
+ Split
|
|
|
+</span><span style='color:#FFF'>
|
|
|
+Command</span><span style='color:#AAA'>: #split
|
|
|
+
|
|
|
+ The split command will create a separated input and output area.
|
|
|
+
|
|
|
+ Using the #prompt command you can capture the prompt and place it on
|
|
|
+ the split line. To get rid of the split interface you can use #unsplit
|
|
|
+ which will restore the terminal settings to default.
|
|
|
+
|
|
|
+</span><span style='color:#5F5'>
|
|
|
+ Alias
|
|
|
+</span><span style='color:#FFF'>
|
|
|
+Command</span><span style='color:#AAA'>: #alias </span><span style='color:#FFF'>{</span><span style='color:#AAA'>name</span><span style='color:#FFF'>} {</span><span style='color:#AAA'>commands</span><span style='color:#FFF'>}</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ The syntax of the #alias command is almost like alias in csh.
|
|
|
+ Use this command to define aliases. The variables %0, %1.. %9 contain
|
|
|
+ the arguments to the aliased command as follows:
|
|
|
+ the %0 variable contains all the arguments.
|
|
|
+ the %1 variable contains the 1st argument
|
|
|
+ ....
|
|
|
+ the %9 variable contains the 9th argument
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #alias greet say Greetings, most honorable %1
|
|
|
+
|
|
|
+ If you want an alias to execute more commands, you must use braces.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #alias ws </span><span style='color:#FFF'>{</span><span style='color:#AAA'>wake;stand</span><span style='color:#FFF'>}</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ To delete an alias use the #unalias command.
|
|
|
+
|
|
|
+ WARNING! TinTin++ doesn't baby sit, and hence does not check for
|
|
|
+ recursive aliases! You can avoid recursion by escaping the entire
|
|
|
+ line.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #alias put \put %1 in %2
|
|
|
+
|
|
|
+ Or by using the send command.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #alias put #send put %1 in %2
|
|
|
+
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> Action
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Command</span><span style='color:#AAA'>: #action </span><span style='color:#FFF'>{</span><span style='color:#AAA'>action-text</span><span style='color:#FFF'>} {</span><span style='color:#AAA'>commands</span><span style='color:#FFF'>}</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ Use this command to define an action to take place when a particular
|
|
|
+ text appears on your screen. There are 99 variables you can use as
|
|
|
+ wildcards in the action-text.
|
|
|
+
|
|
|
+ These variables are %1, %2, %3 .... %9, %10, %11 ... %97, %98, %99.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #action </span><span style='color:#FFF'>{</span><span style='color:#AAA'>You are hungry</span><span style='color:#FFF'>} {</span><span style='color:#AAA'>get bread bag;eat bread</span><span style='color:#FFF'>}</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #action </span><span style='color:#FFF'>{</span><span style='color:#AAA'>%1 has arrived.</span><span style='color:#FFF'>}</span><span style='color:#AAA'> shake %1 -- shake hands with people arriving.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #action </span><span style='color:#FFF'>{</span><span style='color:#AAA'>%1 tells you '%2'</span><span style='color:#FFF'>}
|
|
|
+ {</span><span style='color:#AAA'>tell bob %1 told me '%2'</span><span style='color:#FFF'>}</span><span style='color:#AAA'> -- forward tells.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #action </span><span style='color:#FFF'>{</span><span style='color:#AAA'>tells you</span><span style='color:#FFF'>}</span><span style='color:#AAA'> #bell -- beep on tell.
|
|
|
+
|
|
|
+ You can have TinTin++ ignore actions if you type '#ignore actions on'.
|
|
|
+
|
|
|
+ You can see what commands TinTin++ executes when an action triggers
|
|
|
+ by typing '#debug actions on'.
|
|
|
+
|
|
|
+ You can remove actions with the #unaction command.
|
|
|
+
|
|
|
+</span><span style='color:#5F5'>
|
|
|
+ Command files
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ When you order TinTin++ to read a command file, it parses all the text
|
|
|
+ in the file. You can use command files to keep aliases/actions in,
|
|
|
+ login to a server (name, password etc..) and basically all kinds of
|
|
|
+ commands.
|
|
|
+
|
|
|
+ You can make the command files with either a text editor (suggested),
|
|
|
+ or use the #write command to write out a file.
|
|
|
+
|
|
|
+ Commands for files:
|
|
|
+
|
|
|
+ #read filename -- read and execute the file.
|
|
|
+
|
|
|
+ #write filename -- write all actions/aliases/substitutes/etc known for
|
|
|
+ the current session to a file.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>:
|
|
|
+ #session x mymud.com 1234
|
|
|
+ myname
|
|
|
+ mypassword
|
|
|
+ #split
|
|
|
+ #action {^You are hungry.} {eat bread}
|
|
|
+
|
|
|
+ If you save the above five lines to a file named 'mymud.tin' you can
|
|
|
+ use 'tt++ mymud.tin' to start tintin and execute the file, connecting
|
|
|
+ you to your mud, logging in, enabling split mode, and setting an action
|
|
|
+ to eat a bread whenever you go hungry.
|
|
|
+</span><span style='color:#5F5'>
|
|
|
+
|
|
|
+ Highlight
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Command</span><span style='color:#AAA'>: #highlight </span><span style='color:#FFF'>{</span><span style='color:#AAA'>text</span><span style='color:#FFF'>} {</span><span style='color:#AAA'>color</span><span style='color:#FFF'>}</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ This command works a bit like #action. The purpose of this command is
|
|
|
+ to substitute text from the server with color you provide. This command
|
|
|
+ is a simplified version of the #substitute command.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #high </span><span style='color:#FFF'>{</span><span style='color:#AAA'>Snowy</span><span style='color:#FFF'>} {</span><span style='color:#AAA'>light yellow</span><span style='color:#FFF'>}</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #high </span><span style='color:#FFF'>{</span><span style='color:#AAA'>%*Snowy%*</span><span style='color:#FFF'>} {</span><span style='color:#AAA'>light yellow</span><span style='color:#FFF'>}</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ Use #unhigh to delete highlights.
|
|
|
+
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> Speedwalk
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ If you type a command consisting ONLY of letters and numbers n, e, s,
|
|
|
+ w, u, d - then this command can be interpreted as a serie of movement
|
|
|
+ commands.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: ssw2n -- go south, south, west, north, north
|
|
|
+
|
|
|
+ If you have problems with typing some commands that actually ONLY
|
|
|
+ consists of these letters, then type them in CAPS. For example when
|
|
|
+ checking the NEWS or when asked to enter NEW as your name.
|
|
|
+
|
|
|
+ You must enable speedwalking with: #config speedwalk on.
|
|
|
+
|
|
|
+</span><span style='color:#5F5'>
|
|
|
+ Ticker
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Command</span><span style='color:#AAA'>: #ticker </span><span style='color:#FFF'>{</span><span style='color:#AAA'>name</span><span style='color:#FFF'>} {</span><span style='color:#AAA'>commands</span><span style='color:#FFF'>} {</span><span style='color:#AAA'>seconds</span><span style='color:#FFF'>}</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ The name can be whatever you want it to be, and is only required for
|
|
|
+ the unticker command. The commands will be executed every x amount of
|
|
|
+ seconds, which is specified in the interval part.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #tick </span><span style='color:#FFF'>{</span><span style='color:#AAA'>tick</span><span style='color:#FFF'>} {</span><span style='color:#AAA'>#delay 50 #show 10 SECONDS TO TICK!;#show TICK!!!</span><span style='color:#FFF'>} {</span><span style='color:#AAA'>60</span><span style='color:#FFF'>}</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ This creates a ticker with the name </span><span style='color:#FFF'>{</span><span style='color:#AAA'>tick</span><span style='color:#FFF'>}</span><span style='color:#AAA'> which will print TICK!!!,
|
|
|
+ as well as print a warning when the next tick will occure.
|
|
|
+
|
|
|
+ You can remove tickers with #untick
|
|
|
+
|
|
|
+</span><span style='color:#5F5'>
|
|
|
+ Repeating Commands
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ You can repeat a command, the syntax is: #number command
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #5 cackle -- if you just killed bob the wizard.
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #10 </span><span style='color:#FFF'>{</span><span style='color:#AAA'>buy bread;put bread bag</span><span style='color:#FFF'>}</span><span style='color:#AAA'> -- repeat these 2 commands 10 times.
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #100 ooc w00t w00t!!!!! -- nochannel yourself.
|
|
|
+
|
|
|
+</span><span style='color:#5F5'>
|
|
|
+ History
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ TinTin++ has a limited subset of the csh history features.
|
|
|
+
|
|
|
+ ! -- repeat the last command
|
|
|
+ !cast -- repeat the last command starting with cast
|
|
|
+ ctrl-r -- enter the reverse history search mode.
|
|
|
+
|
|
|
+</span><span style='color:#5F5'>
|
|
|
+ Map commands
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ TinTin++ has a powerful highly configurable automapper. Whenever
|
|
|
+ you type n/ne/e/se/s/sw/w/nw/n/u/d tt++ tries to keep track of your
|
|
|
+ movement.
|
|
|
+
|
|
|
+ Commands for map:
|
|
|
+
|
|
|
+ #map create -- create a map.
|
|
|
+ #map goto 1 -- go to the first room in the map, created by default.
|
|
|
+ #map map -- display the map.
|
|
|
+ #map undo -- undo your last map alteration.
|
|
|
+ #map write <filename> -- save the map to file.
|
|
|
+ #map read <filename> -- load a map from file.
|
|
|
+
|
|
|
+ There are many other map options and it's beyond the scope of this
|
|
|
+ help section to explain everything there is to know, but I'll give
|
|
|
+ a set of commands that will get most people started.
|
|
|
+
|
|
|
+ #map create
|
|
|
+ #split 12 1
|
|
|
+ #map flag unicode on
|
|
|
+ #map flag vt on
|
|
|
+ #map goto 1
|
|
|
+
|
|
|
+ These commands will create a 12 row vt100 split section at the top of
|
|
|
+ your screen where a map drawn using unicode characters is displayed.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #action </span><span style='color:#FFF'>{</span><span style='color:#AAA'>There is no exit in that direction.</span><span style='color:#FFF'>} {</span><span style='color:#AAA'>#map undo</span><span style='color:#FFF'>}</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ The map will be automatically created as you move around.
|
|
|
+
|
|
|
+</span><span style='color:#5F5'>
|
|
|
+ Help
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Command</span><span style='color:#AAA'>: #help </span><span style='color:#FFF'>{</span><span style='color:#AAA'>subject</span><span style='color:#FFF'>}</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ The help command is your friend and contains the same helpfiles
|
|
|
+ inside TinTin++ as are available on the website. If you type #help
|
|
|
+ without an argument you will see the various available help subjects
|
|
|
+ which try to explain the TinTin++ commands and features in greater
|
|
|
+ detail. Entries in cyan describe commands, while entries in white
|
|
|
+ describe various features, often in greater detail.
|
|
|
+
|
|
|
+</span><span style='color:#5F5'>
|
|
|
+ That's all for the introduction, enjoy</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Related</span><span style='color:#AAA'>: <a href='#CHARACTERS'>characters</a>, <a href='#COLORS'>colors</a>, <a href='#COORDINATES'>coordinates</a>, <a href='#EDITING'>editing</a>, <a href='#ESCAPE_CODES'>escape_codes</a>, <a href='#GREETING'>greeting</a>, <a href='#KEYPAD'>keypad</a>, <a href='#LISTS'>lists</a>, <a href='#MAPPING'>mapping</a>, <a href='#MATHEMATICS'>mathematics</a>, <a href='#SCREEN_READER'>screen_reader</a>, <a href='#SESSIONNAME'>sessionname</a>, <a href='#SPEEDWALK'>speedwalk</a>, <a href='#STATEMENTS'>statements</a>, <a href='#SUSPEND'>suspend</a> and <a href='#TIME'>time</a>.
|
|
|
+<a name='CHARACTERS'></a>
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> CHARACTERS
|
|
|
+
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ The following special characters are defined:
|
|
|
+
|
|
|
+# The hashtag is the default character for starting a command and is
|
|
|
+ subsequently known as the command character or tintin character.
|
|
|
+ When loading a command file the command character is set to the
|
|
|
+ first character in the file. The character can also be redefined
|
|
|
+ using #config.
|
|
|
+
|
|
|
+; The semi-colon is used as the command separator and can be used to
|
|
|
+ separate two commands. Multiple commands can be strung together as
|
|
|
+ well. Trailing semi-colons are ignored when reading a script file
|
|
|
+ as this is a common error.
|
|
|
+
|
|
|
+{ } Curly brackets aka braces are used for separating multi word command
|
|
|
+ arguments, nesting commands, and nesting variables. Braces cannot
|
|
|
+ easily be escaped and must always be used in pairs.
|
|
|
+
|
|
|
+" " Quote characters are used for strings in the #math, #if, #switch,
|
|
|
+ and #case commands. It is however suggested to use a set of braces
|
|
|
+ { } to define strings instead, particularly when checking strings
|
|
|
+ that may contain quotes.
|
|
|
+
|
|
|
+! The exclamation sign is used to repeat commands, see #help history.
|
|
|
+ The character can be redefined using #config.
|
|
|
+
|
|
|
+\ An input line starting with a backslash is sent verbatim if you are
|
|
|
+ connected to a server. This character can be configured with
|
|
|
+ #config, and is itself send verbatim when the verbatim config mode
|
|
|
+ is enabled.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Related</span><span style='color:#AAA'>: <a href='#COLORS'>colors</a>, <a href='#ESCAPE'>escape</a>, <a href='#FUNCTION'>function</a>, <a href='#MATHEMATICS'>mathematics</a>, <a href='#PCRE'>pcre</a> and <a href='#VARIABLE'>variable</a>.
|
|
|
+<a name='COLORS'></a>
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> COLORS
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Syntax</span><span style='color:#AAA'>: <xyz> with x, y, z being parameters
|
|
|
+
|
|
|
+ Parameter 'x': VT100 code
|
|
|
+
|
|
|
+ 0 - Reset all colors and codes to default
|
|
|
+ 1 - Bold
|
|
|
+ 2 - Dim
|
|
|
+ 3 - Italic
|
|
|
+ 4 - Underscore
|
|
|
+ 5 - Blink
|
|
|
+ 7 - Reverse
|
|
|
+ 8 - Skip (use previous code)
|
|
|
+
|
|
|
+ Parameter 'y': Foreground color
|
|
|
+ Parameter 'z': Background color
|
|
|
+
|
|
|
+ 0 - Black 5 - Magenta
|
|
|
+ 1 - Red 6 - Cyan
|
|
|
+ 2 - Green 7 - White
|
|
|
+ 3 - Yellow 8 - Skip
|
|
|
+ 4 - Blue 9 - Default
|
|
|
+
|
|
|
+ For xterm 256 colors support use <aaa> to <fff> for RGB foreground
|
|
|
+ colors and <AAA> to <FFF> for RGB background colors. For the grayscale
|
|
|
+ foreground colors use <g00> to <g23>, for grayscale background colors
|
|
|
+ use <G00> to <G23>.
|
|
|
+
|
|
|
+ The tertiary colors are as follows:
|
|
|
+
|
|
|
+ <acf> - Azure <afc> - Jade
|
|
|
+ <caf> - Violet <cfa> - Lime
|
|
|
+ <fac> - Pink <fca> - Orange
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #show <acf>Azure <afc>Jade <caf>Violet
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #show <cfa>Lime <fac>Pink <fca>Orange
|
|
|
+
|
|
|
+ For 12 bit truecolor use <F000> to <FFFF> for foreground colors and
|
|
|
+ <B000> to <BFFF> for background colors.
|
|
|
+
|
|
|
+ For 24 bit truecolor use <F000000> to <FFFFFFF> for foreground
|
|
|
+ colors and <B000000> to <BFFFFFF> for background colors.
|
|
|
+
|
|
|
+ If the color code exceeds your configured color mode it will be
|
|
|
+ downgraded to the closest match.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Related</span><span style='color:#AAA'>: <a href='#CHARACTERS'>characters</a>, <a href='#COORDINATES'>coordinates</a>, <a href='#ESCAPE'>escape</a>, <a href='#MATHEMATICS'>mathematics</a> and <a href='#PCRE'>pcre</a>.
|
|
|
+<a name='COORDINATES'></a>
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> COORDINATES
|
|
|
+
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ When the 0,0 coordinate is in the upper left corner TinTin++ uses
|
|
|
+ a y,x / row,col notation, starting at 1,1. Subsequently -1,-1
|
|
|
+ will indicate the bottom right corner. This type of argument is
|
|
|
+ used by the #showme command.
|
|
|
+
|
|
|
+ When the 0,0 coordinate is in the bottom left corner tintin uses
|
|
|
+ a standard x,y notation. This type of argument is used by the
|
|
|
+ #map jump command.
|
|
|
+
|
|
|
+ The vast majority of tintin commands use y,x / row,col notation,
|
|
|
+ primarily because that is the notation used by the VT100 standard
|
|
|
+ used for terminal emulation.
|
|
|
+
|
|
|
+ </span><span style='color:#5F5'>Squares
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ A square argument takes 2 coordinates. The first coordinate defines
|
|
|
+ the upper left corner, the last coordinate defines the bottom
|
|
|
+ right corner. The upper left corner of the terminal is defined as
|
|
|
+ 1,1 and the bottom right corner as -1,-1. This type of argument is
|
|
|
+ used by #draw, #button and #map offset.
|
|
|
+
|
|
|
+ </span><span style='color:#5F5'>Panes
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ A pane argument takes 4 size values, which are: top pane, bottom
|
|
|
+ pane, left pane, right pane. When a negative value is provided the
|
|
|
+ size is the maximum size, minus the value. This type of argument
|
|
|
+ is used by the #split command.
|
|
|
+
|
|
|
+ </span><span style='color:#5F5'>Ranges
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ A range argument takes 2 values known as the upper bound and lower
|
|
|
+ bound. The upper bound (first value) defines the start of the
|
|
|
+ range, the lower bound (second value) the end. The first index of
|
|
|
+ a range is defined as 1. When a negative value is provides the last
|
|
|
+ index is defined as -1. This type of argument is used by #buffer
|
|
|
+ and #variable.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Related</span><span style='color:#AAA'>: <a href='#CHARACTERS'>characters</a>, <a href='#COLORS'>colors</a>, <a href='#ESCAPE'>escape</a>, <a href='#MATHEMATICS'>mathematics</a> and <a href='#PCRE'>pcre</a>.
|
|
|
+<a name='EDITING'></a>
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> EDITING
|
|
|
+
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>┌─────────────────────────┐┌────────────────────────────────────────────┐</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>alt b </span><span style='color:#0AA'>││</span><span style='color:#FFF'>cursor backward word </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>alt f </span><span style='color:#0AA'>││</span><span style='color:#FFF'>cursor forward word </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>└─────────────────────────┘└────────────────────────────────────────────┘</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>┌─────────────────────────┐┌────────────────────────────────────────────┐</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl a </span><span style='color:#0AA'>││</span><span style='color:#FFF'>cursor home </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl b </span><span style='color:#0AA'>││</span><span style='color:#FFF'>cursor backward </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl c </span><span style='color:#0AA'>││</span><span style='color:#FFF'>clear line </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl d </span><span style='color:#0AA'>││</span><span style='color:#FFF'>delete or exit </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl e </span><span style='color:#0AA'>││</span><span style='color:#FFF'>cursor end </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl f </span><span style='color:#0AA'>││</span><span style='color:#FFF'>cursor forward </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl g </span><span style='color:#0AA'>││</span><span style='color:#FFF'> </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl h </span><span style='color:#0AA'>││</span><span style='color:#FFF'>backspace </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl i </span><span style='color:#0AA'>││</span><span style='color:#FFF'>tab </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl j </span><span style='color:#0AA'>││</span><span style='color:#FFF'>enter </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl k </span><span style='color:#0AA'>││</span><span style='color:#FFF'>clear line right </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl l </span><span style='color:#0AA'>││</span><span style='color:#FFF'>redraw input </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl m </span><span style='color:#0AA'>││</span><span style='color:#FFF'>enter </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl n </span><span style='color:#0AA'>││</span><span style='color:#FFF'>input history next </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl o </span><span style='color:#0AA'>││</span><span style='color:#FFF'> </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl p </span><span style='color:#0AA'>││</span><span style='color:#FFF'>input history prev </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl q </span><span style='color:#0AA'>││</span><span style='color:#FFF'> </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl r </span><span style='color:#0AA'>││</span><span style='color:#FFF'>input history search </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl s </span><span style='color:#0AA'>││</span><span style='color:#FFF'> </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl t </span><span style='color:#0AA'>││</span><span style='color:#FFF'>scroll buffer lock </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl u </span><span style='color:#0AA'>││</span><span style='color:#FFF'>clear line left </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl v </span><span style='color:#0AA'>││</span><span style='color:#FFF'>convert meta characters </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl w </span><span style='color:#0AA'>││</span><span style='color:#FFF'>delete word left </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl x </span><span style='color:#0AA'>││</span><span style='color:#FFF'> </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl y </span><span style='color:#0AA'>││</span><span style='color:#FFF'>paste </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl z </span><span style='color:#0AA'>││</span><span style='color:#FFF'>suspend </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>└─────────────────────────┘└────────────────────────────────────────────┘</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>┌─────────────────────────┐┌────────────────────────────────────────────┐</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>arrow left </span><span style='color:#0AA'>││</span><span style='color:#FFF'>cursor left </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>arrow right </span><span style='color:#0AA'>││</span><span style='color:#FFF'>cursor right </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>arrow up </span><span style='color:#0AA'>││</span><span style='color:#FFF'>previous input line </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>arrow down </span><span style='color:#0AA'>││</span><span style='color:#FFF'>next input line </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>└─────────────────────────┘└────────────────────────────────────────────┘</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>┌─────────────────────────┐┌────────────────────────────────────────────┐</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl arrow left </span><span style='color:#0AA'>││</span><span style='color:#FFF'>cursor left word </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl arrow right </span><span style='color:#0AA'>││</span><span style='color:#FFF'>cursor right word </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>└─────────────────────────┘└────────────────────────────────────────────┘</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>┌─────────────────────────┐┌────────────────────────────────────────────┐</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>backspace </span><span style='color:#0AA'>││</span><span style='color:#FFF'>backspace </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>alt backspace </span><span style='color:#0AA'>││</span><span style='color:#FFF'>clear line left </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl backspace </span><span style='color:#0AA'>││</span><span style='color:#FFF'>clear line </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>└─────────────────────────┘└────────────────────────────────────────────┘</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>┌─────────────────────────┐┌────────────────────────────────────────────┐</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>delete </span><span style='color:#0AA'>││</span><span style='color:#FFF'>delete </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl delete </span><span style='color:#0AA'>││</span><span style='color:#FFF'>delete word right </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>└─────────────────────────┘└────────────────────────────────────────────┘</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>┌─────────────────────────┐┌────────────────────────────────────────────┐</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>end </span><span style='color:#0AA'>││</span><span style='color:#FFF'>cursor end </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl end </span><span style='color:#0AA'>││</span><span style='color:#FFF'>scroll buffer end </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>└─────────────────────────┘└────────────────────────────────────────────┘</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>┌─────────────────────────┐┌────────────────────────────────────────────┐</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>enter </span><span style='color:#0AA'>││</span><span style='color:#FFF'>enter </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>shift-enter </span><span style='color:#0AA'>││</span><span style='color:#FFF'>soft enter </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>└─────────────────────────┘└────────────────────────────────────────────┘</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>┌─────────────────────────┐┌────────────────────────────────────────────┐</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>home </span><span style='color:#0AA'>││</span><span style='color:#FFF'>cursor home </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>ctrl home </span><span style='color:#0AA'>││</span><span style='color:#FFF'>scroll buffer home </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>└─────────────────────────┘└────────────────────────────────────────────┘</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>┌─────────────────────────┐┌────────────────────────────────────────────┐</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>page up </span><span style='color:#0AA'>││</span><span style='color:#FFF'>scroll buffer up </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>page down </span><span style='color:#0AA'>││</span><span style='color:#FFF'>scroll buffer down </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>└─────────────────────────┘└────────────────────────────────────────────┘</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>┌─────────────────────────┐┌────────────────────────────────────────────┐</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>tab </span><span style='color:#0AA'>││</span><span style='color:#FFF'>complete word forward </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>├─────────────────────────┤├────────────────────────────────────────────┤</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>│</span><span style='color:#FFF'>shift-tab </span><span style='color:#0AA'>││</span><span style='color:#FFF'>complete word backward </span><span style='color:#0AA'>│</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#0AA'>└─────────────────────────┘└────────────────────────────────────────────┘</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Related</span><span style='color:#AAA'>: <a href='#CURSOR'>cursor</a>, <a href='#EDIT'>edit</a> and <a href='#MACRO'>macro</a>.
|
|
|
+<a name='ESCAPE CODES'></a>
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> ESCAPE CODES
|
|
|
+
|
|
|
+</span><span style='color:#AAA'> You may use the escape character \ for various special characters.
|
|
|
+
|
|
|
+ \a beep the terminal.
|
|
|
+ \c send a control character, \ca for ctrl-a.
|
|
|
+ \e start an escape sequence.
|
|
|
+ \f send a form feed.
|
|
|
+ \n send a line feed.
|
|
|
+ \r send a carriage return.
|
|
|
+ \t send a horizontal tab.
|
|
|
+ \x print an 8 bit character using hexadecimal, \xFF for example.
|
|
|
+ \x7B send the '{' character.
|
|
|
+ \x7D send the '}' character.
|
|
|
+ \u print a 16 bit unicode character, \uFFFD for example.
|
|
|
+ \u{} print a 8-21 bit unicode character, \u{2AF21} for example.
|
|
|
+ \U print a 21 bit unicode character, \U02AF21 for example.
|
|
|
+ \v send a vertical tab
|
|
|
+
|
|
|
+ Ending a line with \ will stop tintin from appending a line feed.
|
|
|
+ To escape arguments in an alias or action use %%0 %%1 %%2 etc.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Related</span><span style='color:#AAA'>: <a href='#CHARACTERS'>characters</a>, <a href='#COLORS'>colors</a>, <a href='#COORDINATES'>coordinates</a>, <a href='#MATHEMATICS'>mathematics</a> and <a href='#PCRE'>pcre</a>.
|
|
|
+<a name='GREETING'></a>
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> GREETING
|
|
|
+
|
|
|
+</span><span style='color:#0AA'> ####################################################################
|
|
|
+ #</span><span style='color:#AAA'> </span><span style='color:#0AA'>#
|
|
|
+ #</span><span style='color:#AAA'> T I N T I N + + 2.02.21b </span><span style='color:#0AA'>#
|
|
|
+ #</span><span style='color:#AAA'> </span><span style='color:#0AA'>#
|
|
|
+ #</span><span style='color:#AAA'> Code by Peter Unold, Bill Reis, and Igor van den Hoven </span><span style='color:#0AA'>#
|
|
|
+ #</span><span style='color:#AAA'> </span><span style='color:#0AA'>#
|
|
|
+ ####################################################################
|
|
|
+
|
|
|
+<a name='KEYPAD'></a>
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> KEYPAD
|
|
|
+
|
|
|
+</span><span style='color:#AAA'> When TinTin++ starts up it sends \e= to the terminal to enable the
|
|
|
+ terminal's application keypad mode, which can be disabled using #show {\e>}
|
|
|
+
|
|
|
+</span><span style='color:#FFF'> Configuration A Configuration B Configuration C</span><span style='color:#0AA'>
|
|
|
+ ╭─────┬─────┬─────┬─────╮ ╭─────┬─────┬─────┬─────╮ ╭─────┬─────┬─────┬─────╮
|
|
|
+ │</span><span style='color:#FFF'>num</span><span style='color:#0AA'> │</span><span style='color:#FFF'>/</span><span style='color:#0AA'> │</span><span style='color:#FFF'>*</span><span style='color:#0AA'> │</span><span style='color:#FFF'>-</span><span style='color:#0AA'> │ │</span><span style='color:#FFF'>num</span><span style='color:#0AA'> │</span><span style='color:#FFF'>/</span><span style='color:#0AA'> │</span><span style='color:#FFF'>*</span><span style='color:#0AA'> │</span><span style='color:#FFF'>-</span><span style='color:#0AA'> │ │</span><span style='color:#FFF'>Num</span><span style='color:#0AA'> │</span><span style='color:#FFF'>nkp/</span><span style='color:#0AA'> │</span><span style='color:#FFF'>nkp*</span><span style='color:#0AA'> │</span><span style='color:#FFF'>nkp-</span><span style='color:#0AA'> │
|
|
|
+ ├─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┤
|
|
|
+ │</span><span style='color:#FFF'>7</span><span style='color:#0AA'> │</span><span style='color:#FFF'>8</span><span style='color:#0AA'> │</span><span style='color:#FFF'>9</span><span style='color:#0AA'> │</span><span style='color:#FFF'>+</span><span style='color:#0AA'> │ │</span><span style='color:#FFF'>Home</span><span style='color:#0AA'> │</span><span style='color:#FFF'>Up</span><span style='color:#0AA'> │</span><span style='color:#FFF'>PgUp</span><span style='color:#0AA'> │</span><span style='color:#FFF'>+</span><span style='color:#0AA'> │ │</span><span style='color:#FFF'>nkp7</span><span style='color:#0AA'> │</span><span style='color:#FFF'>nkp8</span><span style='color:#0AA'> │</span><span style='color:#FFF'>nkp9</span><span style='color:#0AA'> │</span><span style='color:#FFF'>nkp+</span><span style='color:#0AA'> │
|
|
|
+ ├─────┼─────┼─────┤ │ ├─────┼─────┼─────┤ │ ├─────┼─────┼─────┤ │
|
|
|
+ │</span><span style='color:#FFF'>4</span><span style='color:#0AA'> │</span><span style='color:#FFF'>5</span><span style='color:#0AA'> │</span><span style='color:#FFF'>6</span><span style='color:#0AA'> │ │ │</span><span style='color:#FFF'>Left</span><span style='color:#0AA'> │</span><span style='color:#FFF'>Cntr</span><span style='color:#0AA'> │</span><span style='color:#FFF'>Right</span><span style='color:#0AA'>│ │ │</span><span style='color:#FFF'>nkp4</span><span style='color:#0AA'> │</span><span style='color:#FFF'>nkp5</span><span style='color:#0AA'> │</span><span style='color:#FFF'>nkp6</span><span style='color:#0AA'> │ │
|
|
|
+ ├─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┤
|
|
|
+ │</span><span style='color:#FFF'>1</span><span style='color:#0AA'> │</span><span style='color:#FFF'>2</span><span style='color:#0AA'> │</span><span style='color:#FFF'>3</span><span style='color:#0AA'> │</span><span style='color:#FFF'>Enter</span><span style='color:#0AA'>│ │</span><span style='color:#FFF'>End</span><span style='color:#0AA'> │</span><span style='color:#FFF'>Down</span><span style='color:#0AA'> │</span><span style='color:#FFF'>PgDn</span><span style='color:#0AA'> │</span><span style='color:#FFF'>Enter</span><span style='color:#0AA'>│ │</span><span style='color:#FFF'>nkp1</span><span style='color:#0AA'> │</span><span style='color:#FFF'>nkp2</span><span style='color:#0AA'> │</span><span style='color:#FFF'>nkp3</span><span style='color:#0AA'> │</span><span style='color:#FFF'>nkpEn</span><span style='color:#0AA'>│
|
|
|
+ ├─────┴─────┼─────┤ │ ├─────┴─────┼─────┤ │ ├─────┴─────┼─────┤ │
|
|
|
+ │</span><span style='color:#FFF'>0</span><span style='color:#0AA'> │</span><span style='color:#FFF'>.</span><span style='color:#0AA'> │ │ │</span><span style='color:#FFF'>Ins</span><span style='color:#0AA'> │</span><span style='color:#FFF'>Del</span><span style='color:#0AA'> │ │ │</span><span style='color:#FFF'>nkp0</span><span style='color:#0AA'> │</span><span style='color:#FFF'>nkp.</span><span style='color:#0AA'> │ │
|
|
|
+ ╰───────────┴─────┴─────╯ ╰───────────┴─────┴─────╯ ╰───────────┴─────┴─────╯
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ With keypad mode disabled numlock on will give you configuration A,
|
|
|
+ and numlock off will give you configuration B. With keypad mode
|
|
|
+ enabled you'll get configuration C.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'> Terminals that support keypad mode
|
|
|
+</span><span style='color:#AAA'> Linux Console, PuTTY, MinTTY, Eterm, aterm.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'> Terminals that do not support keypad mode
|
|
|
+
|
|
|
+</span><span style='color:#AAA'> RXVT on Cygwin, Windows Console, Gnome Terminal, Konsole.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'> Peculiar Terminals
|
|
|
+
|
|
|
+</span><span style='color:#AAA'> RXVT requires turning off numlock to enable configuration C.
|
|
|
+
|
|
|
+ Xterm may require disabling Alt/NumLock Modifiers (num-lock) in the
|
|
|
+ ctrl left-click menu. Or edit ~/.Xresources and add
|
|
|
+ XTerm*VT100.numLock:false
|
|
|
+
|
|
|
+ Mac OS X Terminal requires enabling 'strict vt100 keypad behavior' in
|
|
|
+ Terminal -> Window Settings -> Emulation.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Related</span><span style='color:#AAA'>: <a href='#COLORS'>colors</a>, <a href='#COORDINATES'>coordinates</a>, <a href='#ESCAPE'>escape</a>, <a href='#MATHEMATICS'>mathematics</a> and <a href='#PCRE'>pcre</a>.
|
|
|
+<a name='LISTS'></a>
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> LISTS
|
|
|
+
|
|
|
+</span><span style='color:#AAA'> There are several different types of lists in tintin which behave in a
|
|
|
+ fairly universal manner. To properly explain lists it's easiest to
|
|
|
+ explain the most basic variable type first before discussing more
|
|
|
+ complex types.
|
|
|
+
|
|
|
+ - Basic variable: The standard key = value variable.
|
|
|
+
|
|
|
+ - Simple list: A string that contains semicolon delimited fields.
|
|
|
+ {a;b;c}. Can be saved as a variable.
|
|
|
+
|
|
|
+ - Brace list: A string in which fields are delimited with braces.
|
|
|
+ {a}{b}{c}. Brace lists cannot be stored as a variable because tables
|
|
|
+ use braces as well, they must be stored as a simple list instead.
|
|
|
+
|
|
|
+ - Table: Think of this as variables nested within another variable. Or
|
|
|
+ as variables contained within another variable.
|
|
|
+
|
|
|
+ - List: A table that uses integers for its indexes. Also known as an
|
|
|
+ array. The #list command is a utility command for using tables as
|
|
|
+ arrays.
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> Simple Variables
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+</span><span style='color:#FFF'>Example:
|
|
|
+</span><span style='color:#AAA'> #variable {simple} {Hello World!}
|
|
|
+ #show $simple
|
|
|
+
|
|
|
+ To see if the 'simple' variable exists you can use &{simple} which
|
|
|
+ will display 0 if the variable does not exist, or the variable's index
|
|
|
+ if it exists.
|
|
|
+
|
|
|
+ If you have multiple variables they are sorted alphabetically and
|
|
|
+ numerically. While it's not all that relevant for simple variables,
|
|
|
+ the first variable has index 1, the second variable index 2, and so
|
|
|
+ on.
|
|
|
+
|
|
|
+ Variable names need to start with a letter and only exist of letters,
|
|
|
+ numbers, and underscores. If you need to use a non standard variable
|
|
|
+ name this is possible using braces.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example: </span><span style='color:#AAA'>#variable {:)} {Happy Happy!};#show ${:)}
|
|
|
+
|
|
|
+ Variables can be accessed using their index. While primarily useful
|
|
|
+ for tables it is possible to do this for simple variables. Use +1 for
|
|
|
+ the first variable, +2 for the second variable, etc. Use -1 for the
|
|
|
+ last variable, -2 for the second last variable, etc.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example:</span><span style='color:#AAA'> #show The first variable is: *{+1} with value: ${+1}
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> Removing Variables
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ To remove a variable, use #unvariable or #unvar (every command can be
|
|
|
+ abbreviated). It's possible to remove multiple variables at once
|
|
|
+ using #unvar {var 1} {var 2} {etc}
|
|
|
+
|
|
|
+ Variables are unique to each session, so if you have multiple
|
|
|
+ sessions, removing a variable from one session won't remove it from
|
|
|
+ other sessions.
|
|
|
+
|
|
|
+ If you remove a table variable, all variables contained within that
|
|
|
+ table variable are removed as well.
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> Simple Lists
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ A simple list is a string that contains semicolon delimited fields.
|
|
|
+ Commands can be entered as simple lists, for example:
|
|
|
+ #show {a};#show {b} will execute a single line as two commands.
|
|
|
+
|
|
|
+ Several commands take a simple list as their input, these are:
|
|
|
+ #foreach, #line substitute, #path load, #list create, and #highlight.
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> Brace Lists
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ A brace list is a string in which fields are delimited with braces.
|
|
|
+ Most commands take a brace list for their arguments, for example:
|
|
|
+ #session {x} {mud.com} {1234} {mud.tin}. The session command takes
|
|
|
+ 4 arguments, the 4th argument (command file) is optional.
|
|
|
+
|
|
|
+ Commands that take a simple list as their input will also accept a
|
|
|
+ brace list, keep in mind you'll have to embed the brace list in an
|
|
|
+ extra set of braces, for example: #path load {{n}{s}{w}{w}}, which is
|
|
|
+ identical to: #path load {n;s;w;w}.
|
|
|
+
|
|
|
+ Brace lists cannot be stored as variables because TinTin++ will
|
|
|
+ confuse them with tables. You can convert a brace list to a table
|
|
|
+ variable using: #list {bracelist} {create} {{a}{b}{c}} this will look
|
|
|
+ internally as: {{1}{a}{2}{b}{3}{c}}. You can then convert this table
|
|
|
+ back to a simple list using: #list {bracelist} {simplify} which will
|
|
|
+ change it to {a;b;c}.
|
|
|
+
|
|
|
+ Braces cannot easily be escaped in TinTin++. Using \{ or \} will not
|
|
|
+ work. The reason for this is due to several factors, but primarily
|
|
|
+ backward compatibility. To escape braces you must define them using
|
|
|
+ hexadecimal notation using \x7B and \x7D. See #help escape for a list
|
|
|
+ of escape options, and the help file will also remind you of how to
|
|
|
+ escape braces.
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> Tables
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ Tables are key/value pairs stored within a variable. Tables are also
|
|
|
+ known as associative arrays, dictionaries, maps, nested variables,
|
|
|
+ structures, and probably a couple of other names. There are several
|
|
|
+ ways to create and access tables.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example:</span><span style='color:#AAA'> #variable {friendlist} {{bob}{bob@mail.com} {bubba}{sunset@gmail.com}}
|
|
|
+
|
|
|
+ This will create a friendlist with two entries, the key is the name of
|
|
|
+ the friend, the value is the email address of the friend. You can see
|
|
|
+ the email address of bob using: #show {$friendlist[bob]}. You can
|
|
|
+ also define this table as following:
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example:</span><span style='color:#AAA'>
|
|
|
+ #variable {friendlist[bob]} {bob@mail.com}
|
|
|
+ #variable {friendlist[bubba]} {sunset@gmail.com}
|
|
|
+
|
|
|
+ This would create the exact same table as the single line declaration
|
|
|
+ used previously. To see the first key in the table use:
|
|
|
+ *friendlist[+1], to see the first value in the table use:
|
|
|
+ $friendlist[+1]. To see the size of the table use &friendlist[]. To
|
|
|
+ print a bracelist of all friends use *friendlist[], to print a
|
|
|
+ bracelist of all friends whose name starts with the letter 'a' you
|
|
|
+ would use: *friendlist[a%*]. Similarly to see the number of friends
|
|
|
+ you have whose name ends with the letter 'b' you would use:
|
|
|
+ &friendlist[%*b].
|
|
|
+
|
|
|
+ See #help regexp for a brief overview of regular expression options.
|
|
|
+ While TinTin++ supports PCRE (perl-compatible regular expressions), it
|
|
|
+ embeds them within its own regular expression syntax that is simpler
|
|
|
+ and less invasive, while still allowing the full power of PCRE for
|
|
|
+ those who need it.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example:</span><span style='color:#AAA'> #unvariable {friendlist[bubba]}
|
|
|
+
|
|
|
+ This would remove {bubba} from the friendlist. To remove the entire
|
|
|
+ friendlist you would use: #unvariable {friendlist}.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example:</span><span style='color:#AAA'> #variable {friendlist} {{bob} {{email}{bob@ma.il} {phone}{123456789}}}
|
|
|
+
|
|
|
+ There is no limit to the number of nests, simply add more braces. To
|
|
|
+ see Bob's email in this example you would use:
|
|
|
+ #show {$friendlist[bob][email]}.
|
|
|
+
|
|
|
+ To merge two tables the #cat command can be used.
|
|
|
+</span><span style='color:#FFF'>Example:
|
|
|
+</span><span style='color:#AAA'> #variable {bli} {{a}{1}{b}{2}}
|
|
|
+ #variable {blo} {{c}{3}{d}{4}}
|
|
|
+ #cat {blo} {$bli}
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> Lists
|
|
|
+
|
|
|
+</span><span style='color:#AAA'> Tables are sorted alphabetically with the exception of numbers which
|
|
|
+ are sorted numerically. If you want to determine the sorting order
|
|
|
+ yourself you can use use the #list command which helps you to use
|
|
|
+ tables as arrays.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example:</span><span style='color:#AAA'> #action {%1 chats %2} {#list chats add {%0}}
|
|
|
+
|
|
|
+ Each time a chat is received it's added to the end of the 'chats' list
|
|
|
+ variable. If you type #variable chats this might look like:
|
|
|
+
|
|
|
+ </span><span style='color:#FF5'>#</span><span style='color:#5FF'>VARIABLE </span><span style='color:#A0A'>{</span><span style='color:#FFF'>chats</span><span style='color:#A0A'>}
|
|
|
+ {
|
|
|
+ {</span><span style='color:#FFF'>1</span><span style='color:#A0A'>} {</span><span style='color:#FFF'>Bubba chats Hi</span><span style='color:#A0A'>}
|
|
|
+ {</span><span style='color:#FFF'>2</span><span style='color:#A0A'>} {</span><span style='color:#FFF'>Bob chats Hi bub</span><span style='color:#A0A'>}
|
|
|
+ {</span><span style='color:#FFF'>3</span><span style='color:#A0A'>} {</span><span style='color:#FFF'>Bubba chats Bye</span><span style='color:#A0A'>}
|
|
|
+ {</span><span style='color:#FFF'>4</span><span style='color:#A0A'>} {</span><span style='color:#FFF'>Bob chats bub bye</span><span style='color:#A0A'>}
|
|
|
+ }
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> Parsing
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ There are various ways to parse lists and tables, using either #loop,
|
|
|
+ #foreach, #while, or #<number>.
|
|
|
+
|
|
|
+ #loop takes two numeric arguments, incrementing or decrementing the
|
|
|
+ first number until it matches the second number. The value of the loop
|
|
|
+ counter is stored in the provided variable.
|
|
|
+
|
|
|
+ #foreach takes either a simple list or a brace list as its first
|
|
|
+ argument. Foreach will go through each item in the list and store the
|
|
|
+ value in the provided variable.
|
|
|
+
|
|
|
+ #while will perform an if check on the first argument, if the result
|
|
|
+ is true it will execute the commands in the second argument. Then it
|
|
|
+ performs an if check on the first argument again. It will continue to
|
|
|
+ repeat until the if check returns 0 or the loop is interrupted with a
|
|
|
+ control flow command. It takes special care to avoid infinite loops.
|
|
|
+
|
|
|
+ #<number> will execute the provided argument 'number' times. For
|
|
|
+ example: #4 {#show beep! \a}
|
|
|
+
|
|
|
+ Here are some examples.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example:</span><span style='color:#AAA'> #list friends create {bob;bubba;zorro}
|
|
|
+
|
|
|
+ Internally this looks like {{1}{bob}{2}{bubba}{3}{zorro}} and the
|
|
|
+ list can be parsed in various ways.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example:</span><span style='color:#AAA'> #foreach {$friends[%*]} {name} {#show $name}
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example:</span><span style='color:#AAA'> #foreach {*friends[%*]} {i} {#show $friends[$i]}
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example:</span><span style='color:#AAA'> #loop {1} {&friends[]} {i} {#show $friends[+$i]}
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example:</span><span style='color:#AAA'> #math i 1;#while {&friends[+$i]} {#show $friends[+$i];
|
|
|
+ #math i $i + 1}
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example:</span><span style='color:#AAA'> #math i 1;#&friends[] {#show $friends[+$i];#math i $i + 1}
|
|
|
+
|
|
|
+ Each of the five examples above performs the same task; printing the
|
|
|
+ three names in the friends list.
|
|
|
+
|
|
|
+ If you want to get a better look at what goes on behind the scenes
|
|
|
+ while executing scripts you can use '#debug all on'. To stop seeing
|
|
|
+ debug information use '#debug all off'.
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> List Tables
|
|
|
+
|
|
|
+</span><span style='color:#AAA'> List tables are also known as databases and the #list command has
|
|
|
+ several options to manipulate them.
|
|
|
+
|
|
|
+ For these options to work properly all tables need to have identical
|
|
|
+ keys. Here is an example list table.
|
|
|
+
|
|
|
+ #var {friendlist}
|
|
|
+ {
|
|
|
+ {1}{{name}{bob} {age}{54}}
|
|
|
+ {2}{{name}{bubba} {age}{21}}
|
|
|
+ {3}{{name}{pamela} {age}{36}}
|
|
|
+ }
|
|
|
+
|
|
|
+ To sort the list table by age you would use:
|
|
|
+
|
|
|
+ #list friendlist indexate age
|
|
|
+ #list friendlist order
|
|
|
+
|
|
|
+ To remove everyone whose name starts with a 'b' you would use:
|
|
|
+
|
|
|
+ #list friendlist indexate name
|
|
|
+ #list friendlist filter {} {b%*}
|
|
|
+
|
|
|
+ The filter option only supports regular expressions. To filter
|
|
|
+ using mathematics you would loop through the list backwards:
|
|
|
+
|
|
|
+ #loop &friendlist[] 1 index
|
|
|
+ {
|
|
|
+ #if {$friendlist[+$index][age] < 30}
|
|
|
+ {
|
|
|
+ #list friendlist delete $index
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Alternatively you can use the refine option.
|
|
|
+
|
|
|
+ #list friendlist indexate age
|
|
|
+ #list friendlist refine {&0 >= 30}
|
|
|
+
|
|
|
+ To add an item to a list table there are two options:
|
|
|
+
|
|
|
+ #list friendlist add {{{name}{hobo} {age}{42}}}
|
|
|
+ #list friendlist insert -1 {{name}{hobo} {age}{42}}
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> Optimization
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ TinTin++ tables are exceptionally fast while they remain under 100
|
|
|
+ items. Once a table grows beyond 10000 items there can be performance
|
|
|
+ issues when inserting and removing items in the beginning or middle of
|
|
|
+ the table.
|
|
|
+
|
|
|
+ The plan is to eventually implement an indexable and flexible data
|
|
|
+ structure for large tables.
|
|
|
+
|
|
|
+ If you load a large table from file it's important to make sure it's
|
|
|
+ sorted, when using #write to save a table it's automatically sorted.
|
|
|
+
|
|
|
+ If you notice performance issues on large tables it's relatively easy
|
|
|
+ to create a hash table.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example:</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ #alias {sethash}
|
|
|
+ {
|
|
|
+ #format hash %H %1;
|
|
|
+ #math hash1 $hash % 100;
|
|
|
+ #math hash2 $hash / 100 % 100;
|
|
|
+ #var hashtable[$hash1][$hash2][%1] %2
|
|
|
+ }
|
|
|
+
|
|
|
+ #function {gethash}
|
|
|
+ {
|
|
|
+ #format hash %H %1;
|
|
|
+ #math hash1 $hash % 100;
|
|
|
+ #math hash2 $hash / 100 % 100;
|
|
|
+ #return $hashtable[$hash1][$hash2][%1]
|
|
|
+ }
|
|
|
+
|
|
|
+ #alias {test}
|
|
|
+ {
|
|
|
+ sethash bli hey;
|
|
|
+ sethash bla hi;
|
|
|
+ sethash blo hello;
|
|
|
+ #show The value of bla is: @gethash{bla}
|
|
|
+ }
|
|
|
+
|
|
|
+ The above script will rapidly store and retrieve over 1 million items.
|
|
|
+ Looping through a hash table is relatively easy as well.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example:</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ #alias {showhash}
|
|
|
+ {
|
|
|
+ #foreach {*hashtable[%*]} {hash1}
|
|
|
+ {
|
|
|
+ #foreach {*hashtable[$hash1][%*]} {hash2}
|
|
|
+ {
|
|
|
+ #echo {%-20s = %s}
|
|
|
+ {hashtable[$hash1][$hash2]}
|
|
|
+ {$hashtable[$hash1][$hash2]}
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Related</span><span style='color:#AAA'>: <a href='#BREAK'>break</a>, <a href='#CONTINUE'>continue</a>, <a href='#FOREACH'>foreach</a>, <a href='#LOOP'>loop</a>, <a href='#PARSE'>parse</a>, <a href='#REPEAT'>repeat</a>, <a href='#RETURN'>return</a> and <a href='#WHILE'>while</a>.
|
|
|
+<a name='MAPPING'></a>
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> MAPPING
|
|
|
+
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ TinTin++ has a powerful automapper that uses a room system similar to
|
|
|
+ Diku MUDs which means that odd map layouts and weird exit
|
|
|
+ configurations aren't a problem. The mapper provides tools to improve
|
|
|
+ the visual map display. For basic path tracking see #help PATH.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'> #map create [size]
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ This command creates the initial map. The size is 50,000 by default
|
|
|
+ and can be changed at any time with the #map resize command. If you
|
|
|
+ play a MUD that uses MSDP or GMCP to provide room numbers you'll have
|
|
|
+ to increase it to the highest reported room number. Increasing the
|
|
|
+ size of the map doesn't decrease performance.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'> #map goto <location>
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ When you create the map you are not automatically inside the map. By
|
|
|
+ default room number (vnum) 1 is created, so you can go to it using
|
|
|
+ #map goto 1. Once you are inside the map new rooms are automatically
|
|
|
+ created as you move around. Movement commands are defined with the
|
|
|
+ pathdir command. By default n, ne, e, se, s, sw, w, nw, u, d are
|
|
|
+ defined.
|
|
|
+</span><span style='color:#FFF'>
|
|
|
+ #map map <rows> <cols> <append|overwrite|list|variable> <name>
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ To see the map you can use #map map. It's annoying to have to
|
|
|
+ constantly type #map map however. Instead it's possible to use #split
|
|
|
+ to display a vt100 map. To do so execute:
|
|
|
+
|
|
|
+ </span><span style='color:#FFF'>#split 16 1
|
|
|
+ #map flag vtmap on</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ The first command sets the top split lines to 16 and the bottom split
|
|
|
+ line to 1. If you want a smaller or larger map display you can use a
|
|
|
+ different value than 16.
|
|
|
+
|
|
|
+ If you don't need to display diagonal exits and prefer a more compact
|
|
|
+ look you can use #map flag AsciiGraphics off. This will enable the
|
|
|
+ standard display which uses UTF-8 box drawing characters, results may
|
|
|
+ vary depending on the font used.
|
|
|
+
|
|
|
+ If your terminal supports UTF-8 you can also give #map flag unicode on
|
|
|
+ a try.
|
|
|
+
|
|
|
+ If you want to display the map in a different location of the screen
|
|
|
+ use something like:
|
|
|
+
|
|
|
+ </span><span style='color:#FFF'>#split 0 1 0 -80
|
|
|
+ #map offset 1 81 -4 -1</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ This will display the map on the right side of the screen, if the
|
|
|
+ width of the screen is wide enough.
|
|
|
+</span><span style='color:#FFF'>
|
|
|
+ #map undo
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ If you accidentally walk into the wall on your MUD the mapper will
|
|
|
+ still create a new room. You can easily fix this mistake by using
|
|
|
+ #map undo. If you want to move around on the map without moving around
|
|
|
+ on the MUD you can use: #map move {direction}. To delete a room
|
|
|
+ manually you can use: #map delete {direction}. To create a room
|
|
|
+ manually you can use: #map dig {direction}.
|
|
|
+</span><span style='color:#FFF'>
|
|
|
+ #map write <filename>
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ You can save your map using #map write, to load a map you can use
|
|
|
+ #map read <filename>.
|
|
|
+</span><span style='color:#FFF'>
|
|
|
+ #map set <option> <value>
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ You can set the room name using #map set roomname <name>. You either
|
|
|
+ have to do this manually or create triggers to set the room name
|
|
|
+ automatically. Once the room name is set you can use #map goto with
|
|
|
+ the room name to visit it. If there are two rooms with the same name
|
|
|
+ #map goto will go to the most nearby room. If you want to always go
|
|
|
+ to the same room you should memorize the room number or create a
|
|
|
+ landmark.
|
|
|
+</span><span style='color:#FFF'>
|
|
|
+ #map landmark firstroom 1
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ You can further narrow down the matches by providing additional
|
|
|
+ arguments, for example:
|
|
|
+</span><span style='color:#FFF'>
|
|
|
+ #map goto {dark alley} {roomexits} {n;e} {roomarea} {Haddock Ville}
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ You can set the room weight using #map set roomweight {value}. The
|
|
|
+ weight by default is set to 1.0 and it represents the difficulty of
|
|
|
+ traversing the room. If you have a lake as an alternative route, and
|
|
|
+ traversing water rooms is 4 times slower than regular rooms, then you
|
|
|
+ could set the weight of the lake rooms to 4.0. If the lake is 3 rooms
|
|
|
+ wide the total weight is 12. If walking around the lake has a weight
|
|
|
+ less than 12 the mapper will go around the lake, if the weight is
|
|
|
+ greater than 12 the mapper will take a route through the lake.
|
|
|
+
|
|
|
+ You can set the room symbol using #map set roomsymbol {value}. The
|
|
|
+ symbol should be one, two, or three characters, which can be
|
|
|
+ colorized. You can for example mark shops with an 'S' and colorize the
|
|
|
+ 'S' depending on what type of shop it is.
|
|
|
+</span><span style='color:#FFF'>
|
|
|
+ #map run <location> <delay>
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ The run command will have tintin find the shortest path to the given
|
|
|
+ location and execute the movement commands to get there. You can
|
|
|
+ provide a delay in seconds with floating point precision, for example:
|
|
|
+</span><span style='color:#FFF'>
|
|
|
+ #map run {dark alley} {0.5}
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ This will make you walk towards the nearest dark alley with 0.5 second
|
|
|
+ intervals. Typical MUDs accept commands at 0.25 second intervals.
|
|
|
+</span><span style='color:#FFF'>
|
|
|
+ #map insert {direction} {flag}
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ The insert command is useful for adding spacer rooms called void rooms.
|
|
|
+ Often rooms overlap, and by adding void rooms you can stretch out
|
|
|
+ exits. For example: #map insert north void. You cannot enter void rooms
|
|
|
+ once they've been created, so you'll have to use #map info in an
|
|
|
+ adjacent room to find the room vnum, then use #map goto {vnum} to
|
|
|
+ visit.
|
|
|
+
|
|
|
+ It's also possible to align rooms using void rooms. This is easily
|
|
|
+ done using #map insert north void.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Related</span><span style='color:#AAA'>: <a href='#MAP'>map</a>, <a href='#PATH'>path</a> and <a href='#PATHDIR'>pathdir</a>.
|
|
|
+<a name='MATHEMATICS'></a>
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> MATHEMATICS
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Number operations
|
|
|
+</span><span style='color:#AAA'> Operators Priority Function
|
|
|
+ ------------------------------------------------
|
|
|
+ ! 0 logical not
|
|
|
+ ~ 0 bitwise not
|
|
|
+ * 1 integer multiply
|
|
|
+ ** 1 integer power
|
|
|
+ / 1 integer divide
|
|
|
+ // 1 integer sqrt // 2 or cbrt // 3
|
|
|
+ % 1 integer modulo
|
|
|
+ d 1 integer random dice roll
|
|
|
+ + 2 integer addition
|
|
|
+ - 2 integer subtraction
|
|
|
+ << 3 bitwise shift
|
|
|
+ >> 3 bitwise shift
|
|
|
+ > 4 logical greater than
|
|
|
+ >= 4 logical greater than or equal
|
|
|
+ < 4 logical less than
|
|
|
+ <= 4 logical less than or equal
|
|
|
+ == 5 logical equal
|
|
|
+ != 5 logical not equal
|
|
|
+ & 6 bitwise and
|
|
|
+ ^ 7 bitwise xor
|
|
|
+ | 8 bitwise or
|
|
|
+ && 9 logical and
|
|
|
+ ^^ 10 logical xor
|
|
|
+ || 11 logical or
|
|
|
+
|
|
|
+Operator priority can be ignored by using parentheses, for example (1 + 1) * 2
|
|
|
+equals 4, while 1 + 1 * 2 equals 3.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>String operations</span><span style='color:#AAA'>
|
|
|
+ Operators Priority Function
|
|
|
+ ------------------------------------------------
|
|
|
+ > 4 alphabetical greater than
|
|
|
+ >= 4 alphabetical greater than or equal
|
|
|
+ < 4 alphabetical less than
|
|
|
+ <= 4 alphabetical less than or equal
|
|
|
+ == 5 alphabetical equal using regex
|
|
|
+ != 5 alphabetical not equal using regex
|
|
|
+ === 5 alphabetical equal
|
|
|
+ !== 5 alphabetical not equal
|
|
|
+
|
|
|
+Strings must be encased in double quotes or braces. The > >= < <= operators
|
|
|
+perform basic string comparisons. The == != operators perform regular
|
|
|
+expressions, with the argument on the left being the string, and the argument
|
|
|
+on the right being the regex. For example {bla} == {%*a} would evaluate as 1.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Related</span><span style='color:#AAA'>: <a href='#MATH'>math</a> and <a href='#REGEXP'>regexp</a>.
|
|
|
+<a name='METRIC SYSTEM'></a>
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> METRIC SYSTEM
|
|
|
+
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ Name Symbol Factor
|
|
|
+ --------------------------------------------------
|
|
|
+ Mega M 1 000 000
|
|
|
+ Kilo K 1 000
|
|
|
+
|
|
|
+ milli m 0.001
|
|
|
+ micro u 0.000 001
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Related</span><span style='color:#AAA'>: <a href='#ECHO'>echo</a>, <a href='#FORMAT'>format</a> and <a href='#MATH'>math</a>.
|
|
|
+<a name='MOUSE'></a>
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> MOUSE
|
|
|
+
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ To enable xterm mouse tracking use #CONFIG MOUSE ON.
|
|
|
+
|
|
|
+ To see mouse events as they happen use #CONFIG MOUSE INFO. This
|
|
|
+ information can then be used to create mouse events with the #event
|
|
|
+ command and buttons with the #button command.
|
|
|
+
|
|
|
+ Visual buttons and pop-ups can be drawn on the screen with the #draw
|
|
|
+ command.
|
|
|
+
|
|
|
+ The input field can be changed and renamed using #screen inputregion,
|
|
|
+ which allows creating named events for enter handling.
|
|
|
+
|
|
|
+ Links can be created using the MSLP protocol which will generate link
|
|
|
+ specific events when clicked.
|
|
|
+
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Related</span><span style='color:#AAA'>: <a href='#BUTTON'>button</a>, <a href='#DRAW'>draw</a>, <a href='#EVENT'>event</a> and <a href='#MSLP'>MSLP</a>.
|
|
|
+<a name='MSDP'></a>
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> MSDP
|
|
|
+
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ MSDP (Mud Server Data Protocol) is part of the #port functionality.
|
|
|
+ See #help event for additional documentation as all MSDP events are
|
|
|
+ available as regular events.
|
|
|
+
|
|
|
+ Available MSDP events can be queried using the MSDP protocol
|
|
|
+ as described in the specification.
|
|
|
+</span><span style='color:#FFF'>
|
|
|
+ https://tintin.sourceforge.io/protocols/msdp
|
|
|
+
|
|
|
+Related</span><span style='color:#AAA'>: <a href='#EVENT'>event</a> and <a href='#PORT'>port</a>.
|
|
|
+<a name='MSLP'></a>
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> MSLP
|
|
|
+
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ MSLP (Mud Server Link Protocol) requires enabling #config mouse on,
|
|
|
+ and creating the appropriate LINK events.
|
|
|
+
|
|
|
+ The simplest link can be created by surrounding a keyword with the
|
|
|
+ \e[4m and \e[24m tags.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #substitute {\b{n|e|s|w|u|d}\b} {\e[4m%1\e[24m}
|
|
|
+
|
|
|
+ This would display 'Exits: n, e, w.' as 'Exits: n, e, w.'.
|
|
|
+
|
|
|
+ When clicked this would trigger the PRESSED LINK MOUSE BUTTON ONE
|
|
|
+ event of which %4 will hold the link command and %6 holds the
|
|
|
+ link name, which in the case of a simple link will be empty.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #event {PRESSED LINK MOUSE BUTTON ONE} {#send {%4}}
|
|
|
+
|
|
|
+ Keep in mind that if you change PRESSED to DOUBLE-CLICKED the link
|
|
|
+ will only work if the text does not scroll in between clicks.
|
|
|
+
|
|
|
+ If you want to create a complex link use an OSC code.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #sub {\bsmurf\b} {\e]68;1;;say I hate smurfs!\a\e[4m%0\e[24m}
|
|
|
+
|
|
|
+ If you have the LINK event of the previous example set, the %4
|
|
|
+ argument will contain 'say I hate smurfs!'.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #sub {\bgoblin\b} {\e]68;1;SEND;kill goblin\a\e[4m%0\e[24m}
|
|
|
+
|
|
|
+ Notice the previous instance of ;; has been replaced with ;SEND;
|
|
|
+ which will name the link. This will generate a named event.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #event {PRESSED LINK SEND MOUSE BUTTON ONE} {#send {%4}}
|
|
|
+
|
|
|
+ By naming links you can organize things a little bit better instead
|
|
|
+ of tunneling everything through the same event.
|
|
|
+
|
|
|
+ Keep in mind that the server is allowed to use \e]68;1;\a as well,
|
|
|
+ subsequently various security measures are in place.
|
|
|
+
|
|
|
+ To create secure links, which are filtered out when send by a server,
|
|
|
+ you need to use \e]68;2;\a, and they instead trigger the SECURE LINK
|
|
|
+ event.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #sub {%* tells %*} {\e]68;2;EXEC;#cursor set tell %1 \a\e[4m%0\e[24m}
|
|
|
+</span><span style='color:#FFF'> </span><span style='color:#AAA'> #event {PRESSED SECURE LINK EXEC MOUSE BUTTON ONE} {%4}
|
|
|
+
|
|
|
+ This would make you start a reply when clicking on a tell.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Website</span><span style='color:#AAA'>: https://tintin.mudhalla.net/protocols/mslp
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Related</span><span style='color:#AAA'>: <a href='#EVENT'>event</a> and <a href='#PORT'>port</a>.
|
|
|
+<a name='PCRE'></a>
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> PCRE
|
|
|
+
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ A regular expression, regex or regexp is a sequence of characters that
|
|
|
+ defines a search pattern. Since the 1980s, different syntaxes for
|
|
|
+ writing regular expressions exist, the two most widely used ones being
|
|
|
+ the POSIX syntax and the similar but more advanced Perl standard.
|
|
|
+ TinTin++ supports the Perl standard known as PCRE (Perl Compatible
|
|
|
+ Regular Expressions).
|
|
|
+
|
|
|
+ Regular expressions are an integral part of TinTin++, but keep in mind
|
|
|
+ that tintin doesn't allow you to use regular expressions directly,
|
|
|
+ instead it uses a simpler intermediate syntax that still allows more
|
|
|
+ complex expressions when needed.
|
|
|
+
|
|
|
+ Commands that utilize regular expressions are: action, alias, elseif,
|
|
|
+ gag, grep, highlight, if, kill, local, math, prompt, regexp, replace,
|
|
|
+ substitute, switch, variable and while. Several other commands use
|
|
|
+ regular expressions in minor ways. Fortunately the basics are very
|
|
|
+ easy to learn.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'> TinTin++ Regular Expression</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ The following support is available for regular expressions.
|
|
|
+
|
|
|
+ ^ match start of line.
|
|
|
+ $ match of end of line.
|
|
|
+ \ escape one character.
|
|
|
+
|
|
|
+ %1-%99 match of any text, stored in the corresponding index.
|
|
|
+ %0 should be avoided in the regex, contains all matched text.
|
|
|
+ { } embed a perl compatible regular expression, matches are stored.
|
|
|
+ %!{ } embed a perl compatible regular expression, matches are not stored.
|
|
|
+
|
|
|
+[ ] . + | ( ) ? * are treated as normal text unless used within braces. Keep in
|
|
|
+mind that { } is replaced with ( ) automatically unless %!{ } is used.
|
|
|
+</span><span style='color:#FFF'>
|
|
|
+TinTin++ Description POSIX</span><span style='color:#AAA'>
|
|
|
+ %d Match zero to any number of digits ([0-9]*?)
|
|
|
+ %D Match zero to any number of non-digits ([^0-9]*?)
|
|
|
+ %i Matches become case insensitive (?i)
|
|
|
+ %I Matches become case sensitive (default) (?-i)
|
|
|
+ %s Match zero to any number of spaces ([\r\n\t ]*?)
|
|
|
+ %w Match zero to any number of word characters ([A-Za-z0-9_]*?)
|
|
|
+ %W Match zero to any number of non-word characters ([^A-Za-z0-9_]*?)
|
|
|
+ %? Match zero or one character (.??)
|
|
|
+ %. Match one character (.)
|
|
|
+ %+ Match one to any number of characters (.+?)
|
|
|
+ %* Match zero to any number of characters (.*?)
|
|
|
+</span><span style='color:#FFF'>
|
|
|
+ Variables</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ If you use %1 in an action to perform a match the matched string is
|
|
|
+ stored in the %1 variable which can be used in the action body.
|
|
|
+
|
|
|
+Example: #act {%1 says 'Tickle me'} {tickle %1}
|
|
|
+
|
|
|
+ If you use %2 the match is stored in %2, etc. If you use an unnumbered
|
|
|
+ match like %* or %S the match is stored at the last used index
|
|
|
+ incremented by one.
|
|
|
+
|
|
|
+Example: #act {%3 says '%*'} {#if {"%4" == "Tickle me"} {tickle %3}}
|
|
|
+
|
|
|
+ The maximum variable index is 99. If you begin an action with %* the
|
|
|
+ match is stored in %1. You should never use %0 in the trigger part of
|
|
|
+ an action, when used in the body of an action %0 contains all the parts
|
|
|
+ of the string that were matched.
|
|
|
+
|
|
|
+ To prevent a match from being stored use %!*, %!w, etc.
|
|
|
+</span><span style='color:#FFF'>
|
|
|
+ Perl Compatible Regular Expressions</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ You can embed a PCRE (Perl Compatible Regular Expression) using curley
|
|
|
+ braces { }, these braces are replaced with parentheses ( ) unless you
|
|
|
+ use %!{ }.
|
|
|
+</span><span style='color:#FFF'>
|
|
|
+ Or</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ You can separate alternatives within a PCRE using the | character.
|
|
|
+
|
|
|
+Example: #act {%* raises {his|her|its} eyebrows.} {say 42..}
|
|
|
+</span><span style='color:#FFF'>
|
|
|
+ Brackets</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ You can group alternatives and ranges within a PCRE using brackets.
|
|
|
+
|
|
|
+Example: #act {%* says 'Who is number {[1-9]}?} {say $number[%2] is number %2}
|
|
|
+
|
|
|
+ The example only triggers if someone provides a number between 1 and
|
|
|
+ 9. Any other character will cause the action to not trigger.
|
|
|
+
|
|
|
+Example: #act {%* says 'Set password to {[^0-9]*}$} {say The password must
|
|
|
+ contain at least one number, not for security reasons, but just to
|
|
|
+ annoy you.} {4}
|
|
|
+
|
|
|
+ When the ^ character is used within brackets it creates an inverse
|
|
|
+ search, [^0-9] matches every character except for a number between 0
|
|
|
+ and 9.
|
|
|
+</span><span style='color:#FFF'>
|
|
|
+ Quantification</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ A quantifier placed after a match specifies how often the match is
|
|
|
+ allowed to occur.
|
|
|
+
|
|
|
+ ? repeat zero or one time.
|
|
|
+ * repeat zero or multiple times.
|
|
|
+ + repeat once or multiple times.
|
|
|
+ {n} repeat exactly n times, n must be a number.
|
|
|
+ {n,} repeat at least n times, n must be a number.
|
|
|
+ {n,o} repeat between n and o times, n and o must be a number.
|
|
|
+
|
|
|
+Example: #act {%* says 'Who is number {[1-9][0-9]{0,2}}?} {Say $number[%2] is
|
|
|
+ number %2}
|
|
|
+
|
|
|
+ The example only triggers if someone provides a number between 1 and
|
|
|
+ 999.
|
|
|
+
|
|
|
+ </span><span style='color:#FFF'>Parantheses</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ TinTin Regular Expressions automatically add parenthesis, for example
|
|
|
+ %* translates to (.*?) in PCRE unless the %* is found at the start or
|
|
|
+ end of the line, in which cases it translates to (.*). Paranthesis in
|
|
|
+ PCRE causes a change in execution priority similar to mathematical
|
|
|
+ expressions, but parentheses also causes the match to be stored to a
|
|
|
+ variable.
|
|
|
+
|
|
|
+ When nesting multiple sets of parentheses each nest is assigned its
|
|
|
+ numerical variable in order of appearance.
|
|
|
+
|
|
|
+Example: #act {%* chats '{Mu(ha)+}'} {chat %2ha!}
|
|
|
+
|
|
|
+ If someone chats Muha you will chat Muhaha! If someone chats Muhaha
|
|
|
+ you will chat Muhahaha!
|
|
|
+
|
|
|
+ </span><span style='color:#FFF'>Lazy vs Greedy</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ By default regex matches are greedy, meaning {.*} will capture as much
|
|
|
+ text as possible.
|
|
|
+
|
|
|
+Example: #regex {bli bla blo} {^{.*} {.*}$} {#show Arg1=(&1) Arg2=(&2)}
|
|
|
+
|
|
|
+ This will display: Arg1=(bli bla) Arg2=(blo)
|
|
|
+
|
|
|
+ By appending a ? behind a regex it becomes lazy, meaning {.*?} will
|
|
|
+ capture as little text as possible.
|
|
|
+
|
|
|
+Example: #regex {bli bla blo} {^{.*?} {.*?}$} {#show Arg1=(&1) Arg2=(&2)}
|
|
|
+
|
|
|
+ This will display: Arg1=(bli) Arg2=(bla blo).
|
|
|
+
|
|
|
+ </span><span style='color:#FFF'>Escape Codes</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ PCRE support the following escape codes.
|
|
|
+</span><span style='color:#FFF'>
|
|
|
+ PCRE Description POSIX</span><span style='color:#AAA'>
|
|
|
+ \A Match start of string ^
|
|
|
+ \b Match word boundaries (^|\r|\n|\t| |$)
|
|
|
+ \B Match non-word boundaries [^\r\n\t ]
|
|
|
+ \c Insert control character \c
|
|
|
+ \d Match digits [0-9]
|
|
|
+ \D Match non-digits [^0-9]
|
|
|
+ \e Insert escape character \e
|
|
|
+ \f Insert form feed character \f
|
|
|
+ \n Insert line feed character \n
|
|
|
+ \r Insert carriage return character \r
|
|
|
+ \s Match spaces [\r\n\t ]
|
|
|
+ \S Match non-spaces [^\r\n\t ]
|
|
|
+ \t Insert tab character \t
|
|
|
+ \w Match letters, numbers, and underscores [A-Za-z0-9_]
|
|
|
+ \W Match non-letters, numbers, and underscores [^A-Za-z0-9_]
|
|
|
+ \x Insert hex character \x
|
|
|
+ \Z Match end of string $
|
|
|
+
|
|
|
+ \s matches one space, \s+ matches one or multiple spaces.
|
|
|
+
|
|
|
+ </span><span style='color:#FFF'>Color triggers</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ To make matching easier text triggers (Actions, Gags, Highlights,
|
|
|
+ Prompts, and Substitutes) have their color codes stripped. If you
|
|
|
+ want to create a color trigger you must start the triggers with a ~
|
|
|
+ (tilde). To make escape codes visible use #config {convert meta} on.
|
|
|
+
|
|
|
+Example: #action {~\e[1;37m%1} {#var roomname %1}
|
|
|
+
|
|
|
+ If the room name is the only line on the server in bright white
|
|
|
+ white color trigger will save the roomname.
|
|
|
+
|
|
|
+
|
|
|
+ This covers the basics. PCRE has more options, most of which are
|
|
|
+ somewhat obscure, so you'll have to read a PCRE manual for additional
|
|
|
+ information.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Related</span><span style='color:#AAA'>: <a href='#MAP'>map</a> and <a href='#PATH'>path</a>.
|
|
|
+<a name='REPEAT'></a>
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> REPEAT
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Command</span><span style='color:#AAA'>: #</span><span style='color:#FFF'>[</span><span style='color:#AAA'>number</span><span style='color:#FFF'>] {</span><span style='color:#AAA'>commands</span><span style='color:#FFF'>}</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+Sometimes you want to repeat the same command multiple times. This is the
|
|
|
+easiest way to accomplish that.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #10 {buy bread}
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Related</span><span style='color:#AAA'>: <a href='#BREAK'>break</a>, <a href='#CONTINUE'>continue</a>, <a href='#FOREACH'>foreach</a>, <a href='#LIST'>list</a>, <a href='#LOOP'>loop</a>, <a href='#PARSE'>parse</a>, <a href='#RETURN'>return</a> and <a href='#WHILE'>while</a>.
|
|
|
+<a name='SCREEN READER'></a>
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> SCREEN READER
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Command</span><span style='color:#AAA'>: #config </span><span style='color:#FFF'>{</span><span style='color:#AAA'>SCREEN READER</span><span style='color:#FFF'>} {</span><span style='color:#AAA'>ON|OFF</span><span style='color:#FFF'>}</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ Screen reader mode is enabled by using #config screen on. The main
|
|
|
+ purpose of the screen reader mode is to report to servers that a
|
|
|
+ screen reader is being used by utilizing the MTTS standard. The MTTS
|
|
|
+ specification is available at:
|
|
|
+
|
|
|
+ http://tintin.sourceforge.net/protocols/mtts
|
|
|
+
|
|
|
+ With the screen reader mode enabled TinTin++ will try to remove visual
|
|
|
+ elements where possible.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Related</span><span style='color:#AAA'>: <a href='#CONFIG'>config</a>
|
|
|
+<a name='SESSIONNAME'></a>
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> SESSIONNAME
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Syntax</span><span style='color:#AAA'>: #[sessionname] </span><span style='color:#FFF'>{</span><span style='color:#AAA'>commands</span><span style='color:#FFF'>}</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ You can create multiple sessions with the #session command. By default
|
|
|
+ only one session is active, meaning commands you input are executed in
|
|
|
+ the active session. While all sessions receive output, only output sent
|
|
|
+ to the active session is displayed.
|
|
|
+
|
|
|
+ When you create a session with the #session command you must specify a
|
|
|
+ session name, the session name, prepended with a hashtag, can be used
|
|
|
+ to activate the session when used without an argument. If an argument
|
|
|
+ is given it will be executed by that session as a command, the session
|
|
|
+ will not be activated.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #ses one tintin.net 23;#ses two tintin.net 23;#one;#two grin
|
|
|
+
|
|
|
+ This will create two sessions, the session that was created last (two
|
|
|
+ in this case) will be automatically activated upon creation. Using
|
|
|
+ #one, session one is activated. Using #two grin, the grin social will
|
|
|
+ be executed by session two, session one will remain the active session.
|
|
|
+
|
|
|
+ If you send a variable to another session it will be substituted before
|
|
|
+ being passed. If you want the variable value of the receiving session
|
|
|
+ to be used you need to use '$${variable}' to properly escape it.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Syntax</span><span style='color:#AAA'>: @[sessionname]</span><span style='color:#FFF'>{</span><span style='color:#AAA'>substitution</span><span style='color:#FFF'>}</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ If you want to pull the value of a variable from another session you
|
|
|
+ can do so in a similar way as you would use a #function call. Using
|
|
|
+ #showme {@two{$test}} in session one would print the value of $test,
|
|
|
+ as defined by session two.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Related</span><span style='color:#AAA'>: <a href='#SUSPEND'>suspend</a>
|
|
|
+<a name='SPEEDWALK'></a>
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> SPEEDWALK
|
|
|
+
|
|
|
+ SPEEDWALK V1
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ Speedwalking allows you to enter multiple directions without using
|
|
|
+ semicolons. Directions should be prefixed with a number and will be
|
|
|
+ executed the given number of times.
|
|
|
+
|
|
|
+ You can enable speedwalking with #CONFIG {SPEEDWALK} {ON}.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: Without speedwalk, you have to type:
|
|
|
+ </span><span style='color:#FFF'>s;s;w;w;w;w;w;s;s;s;w;w;w;n;n;w
|
|
|
+ </span><span style='color:#AAA'>With speedwalk, you only have to type:
|
|
|
+ </span><span style='color:#FFF'>2s5w3s3w2nw
|
|
|
+
|
|
|
+ </span><span style='color:#5F5'>SPEEDWALK V2
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ Modern MUDs have increasingly adopted the use of diagonal exits, like
|
|
|
+ ne, nw, sw, and se. To make accomodations for this the #map and #path
|
|
|
+ command no longer interpret nesw as a speedwalk and require this to
|
|
|
+ be written as 1n1e1s1w, which then allows 2ne2e to execute ne;ne;e;e.
|
|
|
+
|
|
|
+ Speedwalks entered on the input line continue to use the v1 system.
|
|
|
+
|
|
|
+ The #path load command is backward compatible with v1 speedwalks and
|
|
|
+ to load v2 speedwalks the #path unzip command needs to be used, unless
|
|
|
+ the speedwalk was saved using #path save in which case a v2 compatible
|
|
|
+ format is used that can also contain timing data.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #path unzip 3n1e2nw
|
|
|
+</span><span style='color:#FFF'>Example</span><span style='color:#AAA'>: #map move 3ne1d
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Related</span><span style='color:#AAA'>: <a href='#ALIAS'>alias</a>, <a href='#CURSOR'>cursor</a>, <a href='#HISTORY'>history</a>, <a href='#KEYPAD'>keypad</a>, <a href='#MACRO'>macro</a> and <a href='#TAB'>tab</a>.
|
|
|
+<a name='STATEMENTS'></a>
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> STATEMENTS
|
|
|
+
|
|
|
+</span><span style='color:#AAA'>
|
|
|
+ TinTin++ knows the following statements.
|
|
|
+
|
|
|
+ #break
|
|
|
+ #case {value} {true}
|
|
|
+ #continue
|
|
|
+ #default {commands}
|
|
|
+ #else {commands}
|
|
|
+ #elseif {expression} {true}
|
|
|
+ #foreach {list} {variable} {commands}
|
|
|
+ #if {expression} {true}
|
|
|
+ #loop {min} {max} {variable} {commands}
|
|
|
+ #parse {string} {variable} {commands}
|
|
|
+ #return {value}
|
|
|
+ #switch {expression} {commands}
|
|
|
+ #while {expression} {commands}
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Related</span><span style='color:#AAA'>: <a href='#COMMANDS'>commands</a>, <a href='#HELP'>help</a> and <a href='#INFO'>info</a>.
|
|
|
+<a name='SUBSTITUTIONS'></a>
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> SUBSTITUTIONS
|
|
|
+
|
|
|
+</span><span style='color:#AAA'> TinTin++ will perform various types of substitions as detailed below.
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> Variables
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>$ & * @</span><span style='color:#AAA'> All variable and function names must begin with an alphabetic
|
|
|
+ character, followed by any combination of alphanumeric characters and
|
|
|
+ underscores.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>$</span><span style='color:#AAA'> The dollar sign is used to retrieve the value of a variable.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>&</span><span style='color:#AAA'> The ampersand sign is used to retrieve the index of a variable.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>*</span><span style='color:#AAA'> The astrix sign is used to retrieve the name of a variable.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>@</span><span style='color:#AAA'> The at sign is used for functions.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>[ ]</span><span style='color:#AAA'> Brackets are used for nested variables which function as an
|
|
|
+ associative array. Associative arrays are also known as tables and
|
|
|
+ maps. Regex can be used within brackets to match multiple variables.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>+ -</span><span style='color:#AAA'> The plus and minus signs are used to access variables by their index,
|
|
|
+ with the first variable having index +1, and the last variable
|
|
|
+ having index -1. Variables are ordered alphanumerically.
|
|
|
+
|
|
|
+ All variables and functions can be escaped by doubling the sign,
|
|
|
+ like $$variable_name or @@function_name. To escape a variable
|
|
|
+ twice use $$$var_name. One escape is removed each time tintin
|
|
|
+ needs to substitute a variable or function.
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> Arguments
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>%0 - %99</span><span style='color:#AAA'> The percent sign followed by a number is used for arguments by the
|
|
|
+ following triggers:
|
|
|
+
|
|
|
+ alias, action, button, event, function, prompt, and substitute.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>&0 - &99</span><span style='color:#AAA'> The ampersand sign followed by a number is used for arguments in the
|
|
|
+ regex and replace commands.
|
|
|
+
|
|
|
+ All trigger and command arguments can be escaped by doubling the
|
|
|
+ sign like %%1 or &&1. One escape is removed each time tintin
|
|
|
+ substitutes trigger or command arguments. To escape three times
|
|
|
+ triple the sign like %%%1, etc.
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> Colors
|
|
|
+
|
|
|
+</span><span style='color:#FFF'><000></span><span style='color:#AAA'> Three alphanumeric characters encapsulated by the less- and greater-
|
|
|
+ than signs are used for 4 and 8 bit color codes.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'><0000></span><span style='color:#AAA'> Either a B (background) or F (foreground) followed by three
|
|
|
+ hexadecimal characters encapsulated by < > signs are used for 12
|
|
|
+ bit color codes. Requires truecolor capable terminal.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'><0000000></span><span style='color:#AAA'> Either a B (background) or F (foreground) followed by six
|
|
|
+ hexadecimal characters encapsulated by < > signs are used for 24
|
|
|
+ bit color codes. Requires truecolor capable terminal.
|
|
|
+
|
|
|
+ More information is available at #help color.
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> Escapes
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>\ </span><span style='color:#AAA'> The back slash is used to escape a character. All available options
|
|
|
+ are listed at #help escape. Escapes are typically escaped when text
|
|
|
+ leaves the client, by being send to a server, the shell, being
|
|
|
+ displayed on the screen, or being processed as part of a regex.
|
|
|
+ Escapes try to mimic escapes in PCRE when possible.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Related</span><span style='color:#AAA'>: <a href='#CHARACTERS'>characters</a>, <a href='#COLORS'>colors</a>, <a href='#ESCAPES'>escapes</a>, <a href='#INFO'>info</a> and <a href='#PCRE'>pcre</a>.
|
|
|
+<a name='SUSPEND'></a>
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> SUSPEND
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Command</span><span style='color:#AAA'>: #cursor suspend
|
|
|
+
|
|
|
+ Temporarily suspends tintin and returns you to your shell. To
|
|
|
+ return to tintin, type 'fg' at the shell prompt.
|
|
|
+
|
|
|
+ While suspended your tintin sessions will freeze. To keep a
|
|
|
+ suspended session running use the #daemon command.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Related</span><span style='color:#AAA'>: <a href='#SESSIONNAME'>sessionname</a>
|
|
|
+<a name='TIME'></a>
|
|
|
+
|
|
|
+</span><span style='color:#5F5'> TIME
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Command</span><span style='color:#AAA'>: #format </span><span style='color:#FFF'>{</span><span style='color:#AAA'>variable</span><span style='color:#FFF'>} {</span><span style='color:#AAA'>%t</span><span style='color:#FFF'>} {</span><span style='color:#AAA'>argument</span><span style='color:#FFF'>}</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ The %t format specifier of the #format command allows printing dates
|
|
|
+ using the strftime() format specifiers. By default the time stamp used
|
|
|
+ is the current time, if you want to print a past or future date use:
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Command</span><span style='color:#AAA'>: #format </span><span style='color:#FFF'>{</span><span style='color:#AAA'>variable</span><span style='color:#FFF'>} {</span><span style='color:#AAA'>%t</span><span style='color:#FFF'>} {{</span><span style='color:#AAA'>argument</span><span style='color:#FFF'>} {</span><span style='color:#AAA'>epoch time</span><span style='color:#FFF'>}}</span><span style='color:#AAA'>
|
|
|
+
|
|
|
+ The current epoch time value is obtained using #format {time} {%T}.
|
|
|
+
|
|
|
+ When using %t the argument should contain strftime format specifiers.
|
|
|
+ The output may differ depending on your locale. See man strftime.
|
|
|
+
|
|
|
+ %a Abbreviated name of the day of the week (mon ... sun).
|
|
|
+ %A Full name of the day of the week. (Monday ... Sunday)
|
|
|
+ %b Abbreviated name of the month (Jan ... Dec)
|
|
|
+ %B Full name of the month. (January ... December)
|
|
|
+ %C 2 digit numeric century. (19 ... 20)
|
|
|
+ %d 2 digit numeric day of the month (01 ... 31)
|
|
|
+ %H 2 digit numeric 24-hour clock hour. (00 ... 23)
|
|
|
+ %I 2 digit numeric 12-hour clock hour. (01 ... 12)
|
|
|
+ %j 3 digit numeric day of the year (001 ... 366)
|
|
|
+ %m 2 digit numeric month of the year (01 ... 12)
|
|
|
+ %M 2 digit numeric minute of the hour (00 ... 59)
|
|
|
+ %p Abbreviated 12 hour clock period (AM ... PM)
|
|
|
+ %P Abbreviated 12 hour clock period (am ... pm)
|
|
|
+ %S 2 digit numeric second of the minute (00 ...59
|
|
|
+ %u 1 digit numeric day of the week (1 ... 7)
|
|
|
+ %U 2 digit numeric Sunday week of the year (00 ... 53
|
|
|
+ %w 1 digit numeric day of the week (0 ... 6)
|
|
|
+ %W 2 digit numeric Monday week of the year (00 ... 53
|
|
|
+ %y 2 digit numeric year. (70 ... 38)
|
|
|
+ %Y 4 digit numeric year. (1970 ... 2038)
|
|
|
+ %z 5 digit timezone offset. (-1200 ... +1400)
|
|
|
+ %Z Abbreviated name of the time zone.
|
|
|
+
|
|
|
+</span><span style='color:#FFF'>Related</span><span style='color:#AAA'>: <a href='#ECHO'>echo</a>, <a href='#EVENT'>event</a> and <a href='#FORMAT'>format</a>.
|