# FakeBash Scripting ## Understanding the parser The parser is CSV-based, and as such does not care about unquoted spaces. For that reason, the following two examples are the same: write "Hello World" write H e l l o " " W o r l d write "Hello " World You can use unicode with the syntax `u{CODE}`: write u{26c4} " A snowman!" ### Conventions * Annotations are prefixed with an at-sign (`@`) * Bookmarks are prefixed with a percent sign (`%`) * Comments start with a hash sign (`#`) and cover the entire line ## Commands ### annotate - Add an anotation Annotations can be added to point to any cell in the virtual terminal. annotate @useful-tip "This is a useful tip\nthat spans 2 lines" delay 2000 unannotate @useful-tip Annotations doesn't need to have a name and may have a position: annotate "This will annotate char 5 on line 1" 0 4 You can also use bookmarks for positioning the annotations: mark %where ... annotate "This will annotate the bookmark %where" at %where ### clearannotate - Remove all annotations Removes all annontations in one go. clearannotate ### cursor - Cursor display control Controls cursor visibility and rendering style. Use `cursor show` and `cursor hide` to toggle the visiblity of the cursor. cursor show cursor hide You can configure the cursor blink rate, f.ex. setting it to 500ms with `cursor blink 500`, or change its style using `cursor style` followed by the desired style. cursor blink cursor style {none|block|under|left} To push (save) the current cursor position, use `cursor push`. Move wherever and do what you need, followed by `cursor pop`. Don't forget to pop if you push! cursor push cursor pop ### delay - Wait for time to pass Only useful if you have `set fps` to a non-zero value, this command will simulate time passing and render any frames needed. delay 100 ### log - Log debug info This command just sends output to the console for debugging. log "The parameter is " $1 ### mark - Set a bookmark mark %here ### moveto - Go to position or bookmark mark %somewhere write "Hello" moveto %somewhere write "Goodbye" moveto 0 0 ### savepng - Save the terminal as a png savepng output.png ### set - Set options The `set` command is used to configure Faketerm. Terminal-related: set terminal 80x25 # Width and height of window Typing related: set typedelay 250 # Delay in ms when using the type command set typejitter 100 # Random amount of +/- ms when using type Animation: set fps 30 # Enable rendering of frames set video out.mp4 # Convert frames to a video/gif Annotations: set annotationsize 3 # Font size for annotations ### sub - Subroutine The `sub` command defines a subroutine, all the way up to the `endsub` command. Subroutines can take indexed arguments. The arguments are not checked, and empty arguments are replaced with empty strings. sub hello write "Hello, " $1 endsub hello "World" ### type - Simulate typing to the fake terminal This command works just like `write`, only it writes character by character. type "Hello World" ### unannotate - Remove an annotation Removes an annotation unannotate @id ### write - Write to the fake terminal Write output to the current cursor position of the virtual terminal. Extra tags can be added as arguments, but be aware there are no closing tags. write "Hello World" Supported tags are: - Set output style, no parameters resets style. - Move to the beginning of the current line - Move the cursor - Erase line or screen - Move to the beginning of the next line ### writefile - Write a file to the fake terminal This command writes the output of a file line by line to the fake terminal with an optional delay between each line. writefile "command-output.txt" 100 ## Write and Type tags The following can be used with the tag: sgr fg: bg: bold underline The following with the tag: move [steps] The following with the tag: erase {screen|to-eol|to-bol|to-top|to-bottom}