// Copyright (c) Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)

////////////////////////////////
//~ rjf: Embedded Data

@embed_file rd_icon_font_bytes:         "../data/icons.ttf"

//@embed_file rd_default_main_font_bytes: "../data/Roboto-Regular.ttf"
@embed_file rd_default_main_font_bytes: "../data/segoeui.ttf"

//@embed_file rd_default_main_font_bytes: "../data/seguisb.ttf"
//@embed_file rd_default_code_font_bytes: "../data/liberation-.ttf"
//@embed_file rd_default_code_font_bytes: "../data/Inconsolata-Regular.ttf"
@embed_file rd_default_code_font_bytes: "../data/JetBrainsMono-Regular.ttf"

@embed_file rd_icon_file_bytes:         "../data/logo.ico"

////////////////////////////////
//~ rjf: Fixed Tab Tables

@table(name   display_name    name_lower     is_query      icon     description)
RD_WatchTabFastPathTable:
{
  {Watch           "Watch"             watches           0                 Binoculars            "An editable table interface for entering one or many expressions to evaluate, and visualizing and exploring their values."}
  {Locals          "Locals"            locals            1                 Binoculars            "Like the Watch tab, but not editable, and displays the set of local variables found at the selected thread's current location."}
  {Registers       "Registers"         registers         1                 Binoculars            "Like the Watch tab, but not editable, and displays the set of registers for the selected thread."}
  {Globals         "Globals"           globals           1                 Binoculars            "Like the Watch tab, but not editable, and displays all global variables from all loaded modules."}
  {ThreadLocals    "Thread Locals"     thread_locals     1                 Binoculars            "Like the Watch tab, but not editable, and displays all thread-local variables from all loaded modules."}
  {Types           "Types"             types             1                 Binoculars            "Like the Watch tab, but not editable, and displays all types from all loaded modules."}
  {Procedures      "Procedures"        procedures        1                 Binoculars            "Like the Watch tab, but not editable, and displays all procedures from all loaded modules."}
  {CallStack       "Call Stack"        call_stack        1                 Thread                "Displays the currently selected thread's call stack, and allows selecting a frame in the call stack, which will unwind the selected thread's registers and evaluate expressions within that frame's context."}
  {Targets         "Targets"           targets           1                 Target                "Displays, and allows editing of, the list of all targets."}
  {Breakpoints     "Breakpoints"       breakpoints       1                 CircleFilled          "Displays, and allows editing of, the list of all breakpoints."}
  {WatchPins       "Watch Pins"        watch_pins        1                 Pin                   "Displays, and allows editing of, the list of all watch pins."}
  {Threads         "Threads"           threads           1                 Threads               "Displays the list of all threads in all processes to which the debugger is attached."}
  {Processes       "Processes"         processes         1                 Scheduler             "Displays the list of all processes to which the debugger is attached."}
  {Machines        "Machines"          machines          1                 Machine               "Displays the list of all machines to which the debugger is connected."}
  {Modules         "Modules"           modules           1                 Module                "Displays the list of all modules in all processes to which the debugger is attached."}
  {FilePathMaps    "File Path Map"     file_path_maps    1                 FileOutline           "Displays, and allows editing of, the list of all file path maps. This allows remapping source code paths referenced by debug information to other paths on your local machine."}
  {TypeViews       "Type Views"        type_views        1                 Binoculars            "Displays, and allows editing of, the list of all type views, which allow automatically adjusting the visualizations for evaluations of a certain type."}
}

@table(name   display_name    name_lower     view     query     icon)
RD_ViewTabFastPathTable:
{
  {Output          "Output"            output      text            "query:output"    List                  }
  {Text            "Text"              text        text            ""                FileOutline           }
  {Disasm          "Disassembly"       disasm      disasm          ""                Glasses               }
  {Memory          "Memory"            memory      memory          ""                Grid                  }
  {Bitmap          "Bitmap"            bitmap      bitmap          ""                Bitmap                }
  {Color           "Color"             color       color           ""                Palette               }
  {Geo3D           "Geometry (3D)"     geo3d       geo3d           ""                Cube                  }
}

@table(name   display_name    name_lower    icon)
RD_FixedTabTable:
{
  {GettingStarted  "Getting Started"   getting_started   "getting_started"   QuestionMark  }
}

@gen
{
  `#define RD_FixedTabXList \\`;
  @expand(RD_WatchTabFastPathTable a) `$(a.is_query -> 'X(' .. a.name_lower .. ')') $(a.is_query == 0 -> 'Y(' .. a.name_lower .. ', watch, ""' .. ')')\\`;
  @expand(RD_ViewTabFastPathTable a) `Y($(a.name_lower), $(a.view), "$(a.query)")\\`;
  @expand(RD_FixedTabTable a) `Z($(a.name_lower))\\`;
  ``;
}

@data(String8) rd_tab_fast_path_view_name_table:
{
  @expand(RD_WatchTabFastPathTable a) `str8_lit_comp("watch")`,
  @expand(RD_ViewTabFastPathTable a) `str8_lit_comp("$(a.view)")`,
}

@data(String8) rd_tab_fast_path_query_name_table:
{
  @expand(RD_WatchTabFastPathTable a) `str8_lit_comp("$(a.is_query -> 'query:' .. a.name_lower)")`,
  @expand(RD_ViewTabFastPathTable a) `str8_lit_comp("$(a.query)")`,
}

////////////////////////////////
//~ rjf: Vocabulary Map

@table(code_name       code_name_plural            display_name                 display_name_plural  icon_kind)
RD_VocabTable:
// NOTE(rjf): the _ character is used as a fastpath for default rules. when
// pluralizing, you just append an `s`, and so on.
{
  {type_view            _                           "Type View"                 _                     Binoculars                                     }
  {file_path_map        _                           "File Path Map"             _                     FileOutline                                    }
  {watch_pin            _                           "Watch Pin"                 _                     Pin                                            }
  {watch                watches                     "Watch"                     "Watches"             Binoculars                                     }
  {view                 _                           "View"                      _                     Binoculars                                     }
  {breakpoint           _                           "Breakpoint"                _                     CircleFilled                                   }
  {condition            _                           "Condition"                 _                     Null                                           }
  {location             _                           "Location"                  _                     Null                                           }
  {source_location      _                           "Source Location"           _                     Null                                           }
  {address_location     _                           "Address Location"          _                     Null                                           }
  {target               _                           "Target"                    _                     Target                                         }
  {color                _                           "Color"                     _                     Palette                                        }
  {theme_color          _                           "Theme Color"               _                     Palette                                        }
  {executable           _                           "Executable"                _                     Module                                         }
  {arguments            arguments                   "Arguments"                 "Arguments"           Null                                           }
  {exe                  exes                        "Executable"                _                     Module                                         }
  {dbg                  dbgs                        "Debug Info Path"           _                     Module                                         }
  {vaddr_range          _                           "Virtual Address Range"     _                     Null                                           }
  {min                  _                           "Minimum"                   _                     Null                                           }
  {max                  _                           "Maximum"                   _                     Null                                           }
  {working_directory    working_directories         "Working Directory"         "Working Directories" FolderClosedFilled                             }
  {entry_point          _                           "Entry Point"               _                     Null                                           }
  {stdout_path          _                           "Standard Output Path"      _                     Null                                           }
  {stderr_path          _                           "Standard Error Path"       _                     Null                                           }
  {stdin_path           _                           "Standard Input Path"       _                     Null                                           }
  {window               _                           "Window"                    _                     Window                                         }
  {panel                _                           "Panel"                     _                     Null                                           }
  {tab                  _                           "Tab"                       _                     Null                                           }
  {recent_project       _                           "Recent Project"            _                     Briefcase                                      }
  {recent_file          _                           "Recent File"               _                     FileOutline                                    }
  {src                  _                           "Source"                    _                     Null                                           }
  {dst                  _                           "Destination"               _                     Null                                           }
  {source               _                           "Source"                    _                     Null                                           }
  {dest                 _                           "Destination"               _                     Null                                           }
  {conversion_task      _                           "Conversion Task"           _                     Null                                           }
  {conversion_fail      _                           "Conversion Fail"           _                     Null                                           }
  {lang                 _                           "Language"                  _                     Null                                           }
  {arch                 _                           "Architecture"              _                     Null                                           }
  {expr                 _                           "Expression"                _                     Null                                           }
  {expression           _                           "Expression"                _                     Null                                           }
  {size                 _                           "Size"                      _                     Null                                           }
  {count                _                           "Count"                     _                     Null                                           }
  {bool                 _                           "Boolean"                   _                     Null                                           }
  {w                    _                           "Width"                     _                     Null                                           }
  {h                    _                           "Height"                    _                     Null                                           }
  {fmt                  _                           "Format"                    _                     Null                                           }
  {addresses            addresses                   "Addresses"                 "Addresses"           Null                                           }
  {code_bytes           code_bytes                  "Code Bytes"                "Code Bytes"          Null                                           }
  {vtx                  _                           "Vertex Buffer"             _                     Null                                           }
  {vtx_size             _                           "Vertex Buffer Size"        _                     Null                                           }
  {label                _                           "Label"                     _                     Null                                           }
  {thread               _                           "Thread"                    _                     Thread                                         }
  {threads              ""                          "Threads"                   ""                    Threads                                        }
  {process              processes                   "Process"                   "Processes"           Scheduler                                      }
  {processes            ""                          "Processes"                 ""                    Scheduler                                      }
  {machine              _                           "Machine"                   _                     Machine                                        }
  {module               _                           "Module"                    _                     Module                                         }
  {getting_started      ""                          "Getting Started"           ""                    QuestionMark                                   }
  {disasm               ""                          "Disassembly"               ""                    Glasses                                        }
  {text                 ""                          "Text"                      ""                    FileOutline                                    }
  {type                 _                           "Type"                      _                     Null                                           }
  {procedure            _                           "Procedure"                 _                     Null                                           }
  {global_variable      _                           "Global Variable"           _                     Null                                           }
  {global               _                           "Global"                    _                     Null                                           }
  {thread_variable      _                           "Thread Variable"           _                     Null                                           }
  {thread_local         _                           "Thread Local"              _                     Null                                           }
  {call_stack           _                           "Call Stack"                _                     Thread                                         }
  {output               _                           "Output"                    _                     List                                           }
  {scheduler            _                           "Scheduler"                 _                     Scheduler                                      }
  {register             _                           "Register"                  _                     Null                                           }
  {local                _                           "Local"                     _                     Null                                           }
  {memory               memories                    "Memory"                    "Memories"            Grid                                           }
  {hit_count            hit_counts                  "Hit Count"                 "Hit Counts"          Null                                           }
  {enabled              ""                          "Enabled"                   "Enabled"             Null                                           }
  {disabled             ""                          "Disabled"                  "Disabled"            Null                                           }
  {debug_subprocesses   ""                          "Debug Subprocesses"        ""                    Null                                           }
  {environment          _                           "Environment"               _                     Null                                           }
  {frozen               ""                          "Frozen"                    ""                    Null                                           }
  {id                   _                           "ID"                        _                     Null                                           }
  {last_modified_time   _                           "Last Modified Time"        _                     Null                                           }
  {creation_time        _                           "Creation Time"             _                     Null                                           }
  {data                 _                           "Data"                      _                     Null                                           }
  {unattached_processes ""                          "Unattached Processes"      ""                    Scheduler                                      }
  {user                 _                           "User"                      _                     Person                                         }
  {project              _                           "Project"                   _                     Briefcase                                      }
  {recent_project       _                           "Recent Project"            _                     Briefcase                                      }
  {recent_file          _                           "Recent File"               _                     FileOutline                                    }
  {show_addresses       ""                          "Show Addresses"            ""                    Null                                           }
  {show_code_bytes      ""                          "Show Code Bytes"           ""                    Null                                           }
  {show_source_lines    ""                          "Show Source Lines"         ""                    Null                                           }
  {show_symbol_names    ""                          "Show Symbol Names"         ""                    Null                                           }
  {show_line_numbers    ""                          "Show Line Numbers"         ""                    Null                                           }
  {syntax               syntaxes                    "Syntax"                    "Syntaxes"            Null                                           }
  {num_columns          ""                          "Number of Columns"         ""                    Null                                           }
  {bytes_per_cell       ""                          "Bytes Per Cell"            ""                    Null                                           }
  {bitmap               _                           "Bitmap"                    _                     Bitmap                                         }
  {geo3d                ""                          "Geometry (3D)"             ""                    Cube                                           }
  {address_range_size   _                           "Address Range Size"        _                     Null                                           }
  {break_on_read        ""                          "Break On Read"             ""                    Null                                           }
  {break_on_write       ""                          "Break On Write"            ""                    Null                                           }
  {break_on_execute     ""                          "Break On Execution"        ""                    Null                                           }
  {yaw                  ""                          "Yaw"                       ""                    Null                                           }
  {pitch                ""                          "Pitch"                     ""                    Null                                           }
  {zoom                 ""                          "Zoom"                      ""                    Null                                           }
  {font_size            ""                          "Font Size"                 ""                    Null                                           }
  {row_height           ""                          "Row Height"                ""                    Null                                           }
  {tab_height           ""                          "Tab Height"                ""                    Null                                           }
  {rgba                 ""                          "RGBA"                      ""                    Palette                                        }
}

@struct RD_VocabInfo:
{
  `String8 code_name`;
  `String8 code_name_plural`;
  `String8 display_name`;
  `String8 display_name_plural`;
  `RD_IconKind icon_kind`;
}

@data(RD_VocabInfo) rd_vocab_info_table:
{
  @expand(RD_VocabTable a)              `{str8_lit_comp("$(a.code_name)"), str8_lit_comp("$(a.code_name_plural == _ -> a.code_name .. 's')$(a.code_name_plural != _ -> a.code_name_plural)"), str8_lit_comp("$(a.display_name)"), str8_lit_comp("$(a.display_name_plural == _ -> a.display_name .. 's')$(a.display_name_plural != _ -> a.display_name_plural)"), RD_IconKind_$(a.icon_kind)}`;
  @expand(D_CmdTable a)                 `{str8_lit_comp("$(a.string)"), str8_lit_comp(""), str8_lit_comp("$(a.display_name)"), str8_lit_comp(""), RD_IconKind_$(a.canonical_icon)}`;
  @expand(RD_CmdTable a)                `{str8_lit_comp("$(a.string)"), str8_lit_comp(""), str8_lit_comp("$(a.display_name)"), str8_lit_comp(""), RD_IconKind_$(a.canonical_icon)}`;
  @expand(RD_WatchTabFastPathTable a)   `{str8_lit_comp("$(a.name_lower)"), str8_lit_comp(""), str8_lit_comp("$(a.display_name)"), str8_lit_comp(""), RD_IconKind_$(a.icon)}`;
  @expand(RD_ViewTabFastPathTable a)    `{str8_lit_comp("$(a.name_lower)"), str8_lit_comp(""), str8_lit_comp("$(a.display_name)"), str8_lit_comp(""), RD_IconKind_$(a.icon)}`;
}

////////////////////////////////
//~ rjf: Schemas

@table(name schema) RD_SchemaTable:
{
  //- rjf: users / projects
  {
    user
      ```
      @expand_commands(edit_user_theme) x:
    {
      //- rjf: animations
      @display_name('Animations') @description("Enables animations.")
        @default(1) 'animations': bool,
      @display_name('Scrolling Animations') @description("Enables scrolling animations.")
        @expand_if("$.animations") @default(1) 'scrolling_animations': bool,
      @display_name('Tooltip Animations') @description("Enables tooltip animations.")
        @expand_if("$.animations") @default(1) 'tooltip_animations': bool,
      @display_name('Menu Animations') @description("Enables menu animations.")
        @expand_if("$.animations") @default(1) 'menu_animations': bool,
      
      //- rjf: fonts
      @display_name('UI Font') @description("The name of, or path to, the font used when displaying non-code UI elements.")
        @default('') 'main_font': string,
      @display_name('Code Font') @description("The name of, or path to, the font used when displaying code.")
        @default('') 'code_font': string,
      
      //- rjf: theme
      @default("Default (Dark)") @display_name('User Theme')
        @description("The user's theme, which describes all colors used throughout the UI.")
        'theme': string,
      @no_expand @display_name('User Theme')
        'theme_colors': query,
      
      //- rjf: autocompletion
      @display_name('Autocompletion Lister') @description("Enables the autocompletion lister while typing expressions.") @default(1)
        'autocompletion_lister': bool,
      @display_name('View Call Argument Helper') @description("Enables the view call argument helper, which shows view arguments and documentation, while typing expressions.") @default(1)
        'view_call_argument_helper': bool,
      
      //- rjf: thread & breakpoint decorations
      @default(1) @display_name('Thread Lines') @description("Controls whether or not a long horizontal line is drawn before the next line or instruction that the selected thread will execute in source and disassembly views.")
        'thread_lines': bool,
      @default(1) @display_name('Thread Glow') @description("Controls whether or not a glowing effect is drawn on the selected thread in source and disassembly views.")
        'thread_glow': bool,
      @default(1) @display_name('Breakpoint Lines') @description("Controls whether or not a long horizontal line is drawn before the line or instruction at which a breakpoint is placed, in source and disassembly views.")
        'breakpoint_lines': bool,
      @default(1) @display_name('Breakpoint Glow') @description("Controls whether or not a glowing effect is drawn on breakpoints in source and disassembly views.")
        'breakpoint_glow': bool,
      
      //- rjf: occluding background settings
      @default(0) @display_name('Opaque Backgrounds') @description("Controls whether or not all floating background colors are forced to be fully opaque.")
        'opaque_backgrounds': bool,
      @default(1) @display_name('Background Blur') @description("Controls whether or not occluded regions behind floating elements are blurred.")
        'background_blur': bool,
      
      //- rjf: appearance settings
      @default(1) @display_name('Drop Shadows') @description("Controls whether or not drop shadows are drawn.")
        'drop_shadows': bool,
      @default(1.f) @display_name('Rounded Corner Amount') @description("Controls the degree to which UI corners are rounded.")
        'rounded_corner_amount': @range[0, 1] f32,
      
      //- rjf: code formatting settings
      @default(2) @display_name('User Tab Width') 'tab_width': @range[1, 32] u64,
      
      //- rjf: windows style menu bar
      @default(1) @display_name('Focus Menu Bar With Alt') @description("Mimics standard Windows behavior of focusing the menu bar using the Alt key.")
        'focus_menu_bar_with_alt': bool,
      
      //- rjf: native filesystem dialogues
      @default(0) @display_name('Use Native File System Dialog') @description("Uses the operating system's file system dialog box, rather than the debugger's built-in UI.")
        'use_native_file_system_dialog': bool,
    }
    ```
  }
  
  // TODO(rjf): the control codes could be fed from the CTRL_ExceptionCodeKindTable, but
  // we do not support that in this generator - we'd need a way to form a table-generated
  // string and put it into a table cell...
  {
    project
      ```
      @expand_commands(edit_project_theme) x:
    {
      @default(2) @display_name('Project Tab Width') 'tab_width': @range[1, 32] u64,
      
      //- rjf: visualizers
      @display_name('Use Default C++ STL Type Visualizers') @description("Enables the built-in type views for C++ STL types.")
        @default(1) use_default_stl_type_views: bool,
      @display_name('Use Default Unreal Engine Type Visualizers') @description("Enables the built-in type views for Unreal Engine types.")
        @default(1) use_default_ue_type_views: bool,
      
      //- rjf: theme
      @default("None") @display_name('Project Theme') @description("The project's theme, which describes all colors used throughout the UI, and can override the user's theme.")
        'theme': string,
      @no_expand @display_name('Project Theme') @description("The project's theme, which describes all colors used throughout the UI, and can override the user's theme.")
        'theme_colors': query,
      
      //- rjf: exception settings
      @default(1) @display_name("Break On Win32 Control-C Exceptions") @description("Code: 0x40010005")
        win32_ctrl_c: bool;
      @default(1) @display_name("Break On Win32 Control-Break Exceptions") @description("Code: 0x40010008")
        win32_ctrl_break: bool;
      @default(0) @display_name("Break On Win32 WinRT Originate Error Exceptions") @description("Code: 0x40080201")
        win32_win_rt_originate_error: bool;
      @default(0) @display_name("Break On Win32 WinRT Transform Error Exceptions") @description("Code: 0x40080202")
        win32_win_rt_transform_error: bool;
      @default(0) @display_name("Break On Win32 RPC Call Cancelled Exceptions") @description("Code: 0x0000071a")
        win32_rpc_call_cancelled: bool;
      @default(0) @display_name("Break On Win32 Data Type Misalignment Exceptions") @description("Code: 0x80000002")
        win32_datatype_misalignment: bool;
      @default(1) @display_name("Break On Win32 Access Violation Exceptions") @description("Code: 0xc0000005")
        win32_access_violation: bool;
      @default(0) @display_name("Break On Win32 In Page Error Exceptions") @description("Code: 0xc0000006")
        win32_in_page_error: bool;
      @default(1) @display_name("Break On Win32 Invalid Handle Specified Exceptions") @description("Code: 0xc0000008")
        win32_invalid_handle: bool;
      @default(0) @display_name("Break On Win32 Not Enough Quota Exceptions") @description("Code: 0xc0000017")
        win32_not_enough_quota: bool;
      @default(0) @display_name("Break On Win32 Illegal Instruction Exceptions") @description("Code: 0xc000001d")
        win32_illegal_instruction: bool;
      @default(0) @display_name("Break On Win32 Cannot Continue From Exception Exceptions") @description("Code: 0xc0000025")
        win32_cannot_continue_exception: bool;
      @default(0) @display_name("Break On Win32 Invalid Exception Disposition Returned By Handler Exceptions") @description("Code: 0xc0000026")
        win32_invalid_exception_disposition: bool;
      @default(0) @display_name("Break On Win32 Array Bounds Exceeded Exceptions") @description("Code: 0xc000008c")
        win32_array_bounds_exceeded: bool;
      @default(0) @display_name("Break On Win32 Floating-Point Denormal Operand Exceptions") @description("Code: 0xc000008d")
        win32_floating_point_denormal_operand: bool;
      @default(0) @display_name("Break On Win32 Floating-Point Division By Zero Exceptions") @description("Code: 0xc000008e")
        win32_floating_point_division_by_zero: bool;
      @default(0) @display_name("Break On Win32 Floating-Point Inexact Result Exceptions") @description("Code: 0xc000008f")
        win32_floating_point_inexact_result: bool;
      @default(0) @display_name("Break On Win32 Floating-Point Invalid Operation Exceptions") @description("Code: 0xc0000090")
        win32_floating_point_invalid_operation: bool;
      @default(0) @display_name("Break On Win32 Floating-Point Overflow Exceptions") @description("Code: 0xc0000091")
        win32_floating_point_overflow: bool;
      @default(0) @display_name("Break On Win32 Floating-Point Stack Check Exceptions") @description("Code: 0xc0000092")
        win32_floating_point_stack_check: bool;
      @default(0) @display_name("Break On Win32 Floating-Point Underflow Exceptions") @description("Code: 0xc0000093")
        win32_floating_point_underflow: bool;
      @default(0) @display_name("Break On Win32 Integer Division By Zero Exceptions") @description("Code: 0xc0000094")
        win32_integer_division_by_zero: bool;
      @default(0) @display_name("Break On Win32 Integer Overflow Exceptions") @description("Code: 0xc0000095")
        win32_integer_overflow: bool;
      @default(0) @display_name("Break On Win32 Privileged Instruction Exceptions") @description("Code: 0xc0000096")
        win32_privileged_instruction: bool;
      @default(0) @display_name("Break On Win32 Stack Overflow Exceptions") @description("Code: 0xc00000fd")
        win32_stack_overflow: bool;
      @default(0) @display_name("Break On Win32 Unable To Locate DLL Exceptions") @description("Code: 0xc0000135")
        win32_unable_to_locate_dll: bool;
      @default(0) @display_name("Break On Win32 Ordinal Not Found Exceptions") @description("Code: 0xc0000138")
        win32_ordinal_not_found: bool;
      @default(0) @display_name("Break On Win32 Entry Point Not Found Exceptions") @description("Code: 0xc0000139")
        win32_entry_point_not_found: bool;
      @default(0) @display_name("Break On Win32 DLL Initialization Failed Exceptions") @description("Code: 0xc0000142")
        win32_dll_initialization_failed: bool;
      @default(0) @display_name("Break On Win32 Floating Point SSE Multiple Faults Exceptions") @description("Code: 0xc00002b4")
        win32_floating_point_sse_multiple_faults: bool;
      @default(0) @display_name("Break On Win32 Floating Point SSE Multiple Traps Exceptions") @description("Code: 0xc00002b5")
        win32_floating_point_sse_multiple_traps: bool;
      @default(1) @display_name("Break On Win32 Assertion Failed Exceptions") @description("Code: 0xc0000420")
        win32_assertion_failed: bool;
      @default(0) @display_name("Break On Win32 Module Not Found Exceptions") @description("Code: 0xc06d007e")
        win32_module_not_found: bool;
      @default(0) @display_name("Break On Win32 Procedure Not Found Exceptions") @description("Code: 0xc06d007f")
        win32_procedure_not_found: bool;
      @default(1) @display_name("Break On Win32 Sanitizer Error Detected Exceptions") @description("Code: 0xe073616e")
        win32_sanitizer_error_detected: bool;
      @default(0) @display_name("Break On Win32 Sanitizer Raw Access Violation Exceptions") @description("Code: 0xe0736171")
        win32_sanitizer_raw_access_violation: bool;
      @default(1) @display_name("Break On Win32 DirectX Debug Layer Exceptions") @description("Code: 0x0000087a")
        win32_directx_debug_layer: bool;
    }
    ```
  }
  
  //- rjf: theme colors
  {
    theme_color,
    ```
      @collection_commands(add_theme_color, fork_theme, save_theme, save_and_set_theme)
      @row_commands(duplicate_cfg, remove_cfg)
      x:
    {
      @display_name('Tags') tags: string,
      @display_name('Value') value: @color @hex u32,
    }
    ```
  }
  
  //- rjf: windows
  {
    window,
    ```
      x:
    {
      //- rjf: text rasterization settings
      @default(1) @display_name('Smooth UI Text') @description("Controls whether or not UI text is fully anti-aliased, for a smoother appearance.")
        'smooth_ui_text': bool,
      @default(1) @display_name('Hint UI Text') @description("Controls whether or not UI text is hinted, for better text readability at small sizes.")
        'hint_ui_text': bool,
      @default(0) @display_name('Smooth Code Text') @description("Controls whether or not code text is fully anti-aliased, for a smoother appearance.")
        'smooth_code_text': bool,
      @default(1) @display_name('Hint Code Text') @description("Controls whether or not code text is hinted, for better text readability at small sizes.")
        'hint_code_text': bool,
      @default(11) @display_name('Window Font Size') @description("Controls the window's default font size. Does not apply to tabs with their own font size set.")
        'font_size': @range[6, 72] u64,
      
      //- rjf: size settings
      @default(3.f) @display_name('Window Row Height') @description("Controls the window's default row height, in multiples of the font size. Does not apply to tabs with their own row height set.")
        'row_height': @range[1.75f, 5.f] f32,
      @default(3.f) @description("Controls the height of tabs, in multiples of the font size.")
        'tab_height': @range[1.75f, 5.f] f32,
      
      //- rjf: theme settings
      @default(1) @display_name('Use Project Theme') @description("Prefer using the project theme for this window, if any. If off, only the user's theme settings will be used.")
        'use_project_theme': bool,
    }
    ```
  }
  
  //- rjf: tabs
  {
    tab,
    ```
      @row_commands(@file copy_tab_full_path, @file show_file_in_explorer, duplicate_tab, close_tab)
      x:
    {
      @override @display_name('Tab Font Size') @description("Controls the tab's font size.") @no_callee_helper
        'font_size': @range[6, 72] u64,
    }
    ```
  }
  
  //- rjf: views
  {
    watch,
    ```
      @inherit(tab) x:
    {
      @override @display_name('Tab Row Height') @description("Controls the tab's row height, in multiples of the font size.")
        'row_height': @range[1.75f, 5.f] f32,
      'label': code_string,
      @description("The root expression which is evaluated to produce the watch window.")
        'expression': expr_string,
      @no_expand 'watches': query,
    }
    ```
  }
  {
    text,
    ```
      @inherit(tab) x:
    {
      @description("An expression to describe data which should be viewed as text or code.")
        'expression': expr_string,
      @description("The language that the text should be interpreted as being within. Used for syntax highlighting and other parsing features.")
        'lang': code_string,
      @default(1) @description("Controls whether or not line numbers are shown.")
        'show_line_numbers':bool,
      @no_callee_helper @default(0) @display_name('Scroll To Bottom On Change') @description("Scrolls to the bottom if the text is changed.")
        'scroll_to_bottom_on_change':bool,
      @no_callee_helper @no_revert @default(0) @display_name('Transient') @description("Controls whether or not this tab will be automatically replaced by the debugger when it snaps to new source code locations.")
        'auto': bool,
    }
    ```
  }
  {
    disasm,
    ```
      @inherit(tab) x:
    {
      @description("An expression to describe the base address or offset of the disassembly.")
        'expression': expr_string,
      'arch':        code_string,
      'syntax':      code_string,
      'size':        expr_string,
      @no_callee_helper @default(1) @description("Controls whether or not addresses are shown in the disassembly text.")
        'show_addresses':    bool,
      @no_callee_helper @default(0) @description("Controls whether or not code bytes are shown in the disassembly text.")
        'show_code_bytes':   bool,
      @no_callee_helper @default(1) @description("Controls whether or not source lines, corresponding to disassembly instruction ranges, are shown in the disassembly text.")
        'show_source_lines': bool,
      @no_callee_helper @default(1) @description("Controls whether or not disassembly text is decorated with symbol names.")
        'show_symbol_names': bool,
      @no_callee_helper @default(1) @description("Controls whether or not line numbers are shown.")
        'show_line_numbers': bool,
    }
    ```
  }
  {
    memory,
    ```
      @inherit(tab) x:
    {
      @description("An expression which refers to the base address of data which should be viewed as memory.")
        'expression': expr_string,
      @display_name("Address Range Size") @description("The number of bytes of the viewed memory range.")
        'size': expr_string,
      @display_name("Cursor Address") @description("The address of the cursor.")
        'cursor': expr_string,
      @display_name("Cursor Size") @description("The size, in bytes, of the cursor.")
        'cursor_size': @range[1, 16] u64,
      @default(16) @description("The number of columns to build before building new rows.")
        'num_columns': @range[1, 64] u64,
      @default(1) @display_name("Track Mark To Cursor") @description("Ensures that the mark always follows the cursor, if the cursor value is updated.")
        'track_mark_to_cursor': bool,
    }
    ```
  }
  {
    bitmap,
    ```
      @inherit(tab) x:
    {
      @description("An expression which refers to the base address of data which should be viewed as a bitmap.")
        'expression': expr_string,
      @description("An expression describing the width of the bitmap, in pixels.") @order(0) 'w': u64,
      @description("An expression describing the height of the bitmap, in pixels.") @order(1) 'h': u64,
      @display_name("Bitmap Format") @description("The pixel format that the bitmap data should be interpreted as being within.")
        'fmt': code_string,
    }
    ```
  }
  {
    color,
    ```
      @inherit(tab) x:
    {
      @display_name("Value") @description("An expression to describe the value or location of the color.")
        'expression': expr_string,
    }
    ```
  }
  {
    geo3d,
    ```
      @inherit(tab) x:
    {
      @display_name("Expression") @description("An expression to describe the base address of the index buffer.")
        'expression': expr_string,
      'count': expr_string,
      'vtx': expr_string,
      'vtx_size': expr_string,
      'yaw': @range[0, 1] f32,
      'pitch': @range[-0.5, 0] f32,
      'zoom': @range[0, 100] f32,
    }
    ```
  }
  
  //- rjf: getting started
  {
    getting_started,
    ```
      @inherit(tab) x:
    {
    }
    ```
  }
  
  //- rjf: targets
  {
    target,
    ```
      @row_commands(@cmd_line save_cfg_to_project, enable_cfg, launch_and_run, launch_and_step_into, duplicate_cfg, remove_cfg)
      @collection_commands(add_target)
      x:
    {
      'label':              code_string,
      'executable':         path,
      'arguments':          string,
      'working_directory':  path,
      'entry_point':        expr_string,
      'stdout_path':        @no_relativize path,
      'stderr_path':        @no_relativize path,
      'stdin_path':         @no_relativize path,
      'environment':        query,
      'debug_subprocesses': bool,
      @no_revert @no_expand @default(0) 'enabled': bool,
    }
    ```,
  }
  
  //- rjf: breakpoints
  {
    breakpoint,
    ```
      @row_commands(enable_cfg, duplicate_cfg, remove_cfg)
      @collection_commands(toggle_breakpoint, add_breakpoint, add_address_breakpoint, add_function_breakpoint, clear_breakpoints)
      x:
    {
      'label':            code_string,
      'condition':        expr_string,
      'source_location':  path_pt,
      'address_location': expr_string,
      'hit_count':        u64,
      'address_range_size': @or(0, 1, 2, 4, 8) u64,
      'break_on_write':   bool,
      'break_on_read':    bool,
      'break_on_execute': bool,
      @no_revert @no_expand @default(1) 'enabled': bool,
    }
    ```,
  }
  
  //- rjf: watch pins
  {
    watch_pin,
    ```
      @row_commands(duplicate_cfg, remove_cfg)
      @collection_commands(add_watch_pin, toggle_watch_pin)
      x:
    {
      'expression':       expr_string,
      'source_location':  path_pt,
      'address_location': expr_string,
    }
    ```,
  }
  
  //- rjf: file path maps
  {
    file_path_map,
    ```@collection_commands(add_file_path_map) @row_commands(remove_cfg) x:{'source': @no_relativize path, 'dest': @no_relativize path}```,
  }
  
  //- rjf: type views
  {
    type_view,
    ```@collection_commands(add_type_view) @row_commands(remove_cfg) x:{'type':expr_string, 'expr':expr_string}```,
  }
  
  //- rjf: recent projects
  {
    recent_project,
    ```x:{'path':path}```,
  }
  
  //- rjf: recent files
  {
    recent_file,
    ```x:{'path':path}```,
  }
  
  //- rjf: control entities
  {
    machine,
    ```x:{'label':code_string, @no_expand 'active':bool, 'unattached_processes':query, 'processes':query}```,
  }
  {
    process,
    ```x:{'label':code_string, 'id':u64, @no_expand 'active':bool, 'modules':query, 'threads':query}```,
  }
  {
    module,
    ```x:{'exe':path, 'dbg':path, 'vaddr_range':vaddr_range}```,
  }
  {
    thread,
    ```x:{'label':code_string, 'id':u64, @no_expand 'active':bool, 'call_stack':query}```,
  }
}

@struct RD_NameSchemaInfo:
{
  `String8 name`;
  `String8 schema`;
}

@data(RD_NameSchemaInfo) rd_name_schema_info_table:
{
  @expand(RD_SchemaTable a) `{str8_lit_comp("$(a.name)"), str8_lit_comp("$(a.schema)")}`
}

////////////////////////////////
//~ rjf: Registers Type Table

@table(c_type  name_lower  name)
RD_RegTable:
{
  // rjf: ctrl entities
  {CTRL_Handle       machine          Machine       }
  {CTRL_Handle       module           Module        }
  {CTRL_Handle       process          Process       }
  {CTRL_Handle       thread           Thread        }
  {CTRL_Handle       ctrl_entity      CtrlEntity    }
  
  // rjf: cfgs
  {RD_CfgID          window           Window        }
  {RD_CfgID          panel            Panel         }
  {RD_CfgID          tab              Tab           }
  {RD_CfgID          view             View          }
  {RD_CfgID          prev_tab         PrevTab       }
  {RD_CfgID          dst_panel        DstPanel      }
  {RD_CfgID          cfg              Cfg           }
  {RD_CfgIDList      cfg_list         CfgList       }
  
  // rjf: evaluation space
  {E_Space           eval_space       EvalSpace     }
  
  // rjf: frame selection
  {U64               unwind_count     UnwindCount   }
  {U64               inline_depth     InlineDepth   }
  
  // rjf: code / address location info
  {String8           file_path        FilePath      }
  {TxtPt             cursor           Cursor        }
  {TxtPt             mark             Mark          }
  {HS_Key            text_key         TextKey       }
  {TXT_LangKind      lang_kind        LangKind      }
  {D_LineList        lines            Lines         }
  {DI_Key            dbgi_key         DbgiKey       }
  {U64               vaddr            Vaddr         }
  {U64               voff             Voff          }
  {Rng1U64           vaddr_range      VaddrRange    }
  {Rng1U64           voff_range       VoffRange     }
  
  // rjf: evaluation
  {String8           expr             Expr          }
  
  // rjf: ui context
  {UI_Key            ui_key           UIKey         }
  {UI_Key            src_ui_key       SrcUIKey      }
  {Vec2F32           off_px           OffPx         }
  {RD_RegSlot        reg_slot         RegSlot       }
  
  // rjf: general parameters
  {U32               pid              PID           }
  {B32               force_confirm    ForceConfirm  }
  {B32               force_focus      ForceFocus    }
  {B32               prefer_disasm    PreferDisasm  }
  {B32               no_rich_tooltip  NoRichTooltip }
  {B32               do_implicit_root DoImplicitRoot}
  {B32               do_lister        DoLister      }
  {B32               do_big_rows      DoBigRows     }
  {B32               all_windows      AllWindows    }
  {B32               non_graphical    NonGraphical  }
  {Dir2              dir2             Dir2          }
  {String8           string           String        }
  {String8           cmd_name         CmdName       }
  {`OS_Event *`      os_event         OSEvent       }
}

@enum RD_RegSlot:
{
  Null,
  @expand(RD_RegTable a) `$(a.name)`,
  COUNT,
}

@struct RD_Regs:
{
  @expand(RD_RegTable a) `$(a.c_type) $(a.name_lower)`
}

@data(String8) rd_reg_slot_code_name_table:
{
  `{0}`,
  @expand(RD_RegTable a) `str8_lit_comp("$(a.name_lower)")`
}

@data(Rng1U64) rd_reg_slot_range_table:
{
  `{0}`,
  @expand(RD_RegTable a) `{OffsetOf(RD_Regs, $(a.name_lower)), OffsetOf(RD_Regs, $(a.name_lower)) + sizeof($(a.c_type))}`
}

@gen
{
  `#define rd_regs_lit_init_top \\`
  @expand(RD_RegTable a) `.$(a.name_lower) = rd_regs()->$(a.name_lower),\\`
    ``;
}

////////////////////////////////
//~ rjf: Command Table

@table(name                      ui_vis   ipc_docs_vis   text_pt_vis      text_rng_vis       q_expr          q_slot       q_view  q_ent_kind  q_ctrl_ent_kind  q_allow_files q_allow_folders  q_keep_oi   q_select_oi  q_is_code        q_floating        q_required                                canonical_icon        string                        display_name                                  desc                                                                                                               search_tags                      ctx_filter)
//    /                          |        |              |                |               |             \___                                                                                                          __________________________/                                |                     |                             |                                             |                                                                                                                  |                                |
//   /                           |        |              |                |               |                 \                                                                                                        /                                                           |                     |                             |                                             |                                                                                                                  |                                |
RD_CmdTable:    //               |        |              |                |               |                  |                                                                                                       |                                                           |                     |                             |                                             |                                                                                                                  |                                |
{
  //- rjf: exiting
  {Exit                           1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           X                     "exit"                        "Exit"                                        "Exits the debugger."                                                                                              "quit,close,abort"               ""                                                               }
  
  //- rjf: palette
  {OpenPalette                    1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           List                  "open_palette"                "Open Palette"                                "Opens the palette."                                                                                               "help,cmd,lister"                ""                                                               }
  
  //- rjf: command runners
  {RunCommand                     1        1              0                0               "query:commands"                                 CmdName            commands          Nil                     Null       0  0  0  0  0  1  1                                                           Null                  "run_command"                 "Run Command"                                 "Runs a command from the command palette."                                                                         "help,cmd"                       ""                                                               }
  {RunExternalDriverTextCommand   0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  1  1                                                           Null                  "run_ext_driver_text_command" "Run External Driver Text Command"            ""                                                                                                                 ""                               ""                                                               }
  
  //- rjf: os event passthrough
  {OSEvent                        0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "os_event"                    "OS Event"                                    ""                                                                                                                 ""                               ""                                                               }
  
  //- rjf: thread/frame selection
  {SelectThread                   1        1              0                0               "query:threads"                                  Thread             null              Nil                     Thread     0  0  0  0  0  1  1                                                           Thread                "select_thread"               "Select Thread"                               "Selects a thread."                                                                                                ""                               ""                                                               }
  {SelectUnwind                   0        1              0                0               "query:call_stack"                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "select_unwind"               "Select Unwind"                               "Selects an unwind frame number for the selected thread."                                                          ""                               ""                                                               }
  {UpOneFrame                     1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           UpArrow               "up_one_frame"                "Up One Frame"                                "Selects the call stack frame above the currently selected."                                                       ""                               ""                                                               }
  {DownOneFrame                   1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           DownArrow             "down_one_frame"              "Down One Frame"                              "Selects the call stack frame below the currently selected."                                                       "callstack,unwind"               ""                                                               }
  {SelectEntity                   0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           RadioHollow           "select_entity"               "Select"                                      "Selects a control entity."                                                                                        ""                               ""                                                               }
  {DeselectEntity                 0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           RadioFilled           "deselect_entity"             "Deselect"                                    "Deselects a control entity."                                                                                      ""                               ""                                                               }
  
  //- rjf: font sizes
  {IncWindowFontSize              1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "inc_window_font_size"        "Increase Window Font Size"                   "Increases the window's font size by one point."                                                                   ""                               ""                                                               }
  {DecWindowFontSize              1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "dec_window_font_size"        "Decrease Window Font Size"                   "Decreases the window's font size by one point."                                                                   ""                               ""                                                               }
  {IncViewFontSize                1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "inc_view_font_size"          "Increase View Font Size"                     "Increases the view's font size by one point."                                                                     ""                               ""                                                               }
  {DecViewFontSize                1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "dec_view_font_size"          "Decrease View Font Size"                     "Decreases the view's font size by one point."                                                                     ""                               ""                                                               }
  
  //- rjf: windows
  {OpenWindow                     1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Window                "open_window"                 "Open New Window"                             "Opens a new window."                                                                                              ""                               ""                                                               }
  {WindowSettings                 1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Gear                  "window_settings"             "Window Settings"                             "Opens settings for a window."                                                                                     ""                               ""                                                               }
  {CloseWindow                    1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Window                "close_window"                "Close Window"                                "Closes an opened window."                                                                                         ""                               ""                                                               }
  {ToggleFullscreen               1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Window                "toggle_fullscreen"           "Toggle Fullscreen"                           "Toggles fullscreen view on the active window."                                                                    ""                               ""                                                               }
  {BringToFront                   0        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Window                "bring_to_front"              "Bring To Front"                              "Brings all windows to the front, and focuses the most recently focused window."                                   "top"                            ""                                                               }
  
  //- rjf: popups
  {PopupAccept                    0        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "popup_accept"                "Popup Accept"                                "Accepts the active popup prompt."                                                                                 ""                               ""                                                               }
  {PopupCancel                    0        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "popup_cancel"                "Popup Cancel"                                "Cancels the active popup prompt."                                                                                 ""                               ""                                                               }
  
  //- rjf: keybindings
  {ResetToDefaultBindings         1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "reset_to_default_bindings"   "Reset To Default Bindings"                   "Resets all keybindings to their defaults."                                                                        ""                               ""                                                               }
  
  //- rjf: panel splitting
  {ResetToDefaultPanels           1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Window                "reset_to_default_panels"     "Reset To Default Panel Layout"               "Resets the window to the default panel layout."                                                                   "panel"                          ""                                                               }
  {ResetToCompactPanels           1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Window                "reset_to_compact_panels"     "Reset To Compact Panel Layout"               "Resets the window to the compact panel layout."                                                                   "panel"                          ""                                                               }
  {ResetToSimplePanels            1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Window                "reset_to_simple_panels"      "Reset To Simple Panel Layout"                "Resets the window to the simple panel layout."                                                                    "panel"                          ""                                                               }
  {NewPanelLeft                   1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           XSplit                "new_panel_left"              "Split Panel Left"                            "Creates a new panel to the left of the active panel."                                                             "panel"                          ""                                                               }
  {NewPanelUp                     1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           YSplit                "new_panel_up"                "Split Panel Up"                              "Creates a new panel at the top of the active panel."                                                              "panel"                          ""                                                               }
  {NewPanelRight                  1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           XSplit                "new_panel_right"             "Split Panel Right"                           "Creates a new panel to the right of the active panel."                                                            "panel"                          ""                                                               }
  {NewPanelDown                   1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           YSplit                "new_panel_down"              "Split Panel Down"                            "Creates a new panel at the bottom of the active panel."                                                           "panel"                          ""                                                               }
  {SplitPanel                     0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "split_panel"                 "Split Panel"                                 "Creates a new panel in a given direction, and moves a tab to it, if specified."                                   ""                               ""                                                               }
  
  //- rjf: panel rotation
  {RotatePanelColumns             1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "rotate_panel_columns"        "Rotate Panel Columns"                        "Rotates all panels at the closest column level of the panel hierarchy."                                           ""                               ""                                                               }
  
  //- rjf: focused panel changing
  {NextPanel                      1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           RightArrow            "next_panel"                  "Focus Next Panel"                            "Cycles the active panel forward."                                                                                 ""                               ""                                                               }
  {PrevPanel                      1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           LeftArrow             "prev_panel"                  "Focus Previous Panel"                        "Cycles the active panel backwards."                                                                               ""                               ""                                                               }
  {FocusPanel                     0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "focus_panel"                 "Focus Panel"                                 "Focuses a new panel."                                                                                             ""                               ""                                                               }
  {FocusPanelRight                1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           RightArrow            "focus_panel_right"           "Focus Panel Right"                           "Focuses a panel rightward of the currently focused panel."                                                        ""                               ""                                                               }
  {FocusPanelLeft                 1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           LeftArrow             "focus_panel_left"            "Focus Panel Left"                            "Focuses a panel leftward of the currently focused panel."                                                         ""                               ""                                                               }
  {FocusPanelUp                   1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           UpArrow               "focus_panel_up"              "Focus Panel Up"                              "Focuses a panel upward of the currently focused panel."                                                           ""                               ""                                                               }
  {FocusPanelDown                 1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           DownArrow             "focus_panel_down"            "Focus Panel Down"                            "Focuses a panel downward of the currently focused panel."                                                         ""                               ""                                                               }
  
  //- rjf: undo/redo
  {Undo                           0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Undo                  "undo"                        "Undo"                                        "Undoes the previous action."                                                                                      ""                               ""                                                               }
  {Redo                           0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Redo                  "redo"                        "Redo"                                        "Redoes the first previously undone action."                                                                       ""                               ""                                                               }
  
  //- rjf: focus history
  {GoBack                         0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           LeftArrow             "go_back"                     "Go Back"                                     "Returns to the previously selected panel and tab in recorded history."                                            ""                               ""                                                               }
  {GoForward                      0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           RightArrow            "go_forward"                  "Go Forward"                                  "Returns to the next selected panel and tab in recorded history."                                                  ""                               ""                                                               }
  
  //- rjf: panel removal
  {ClosePanel                     1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           ClosePanel            "close_panel"                 "Close Panel"                                 "Closes the currently active panel."                                                                               ""                               ""                                                               }
  
  //- rjf: panel tab
  {FocusTab                       0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "focus_tab"                   "Focus Tab"                                   "Focuses the passed tab within its containing panel."                                                              ""                               ""                                                               }
  {NextTab                        1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           RightArrow            "next_tab"                    "Focus Next Tab"                              "Focuses the next tab on the active panel."                                                                        ""                               ""                                                               }
  {PrevTab                        1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           LeftArrow             "prev_tab"                    "Focus Previous Tab"                          "Focuses the previous tab on the active panel."                                                                    ""                               ""                                                               }
  {MoveTabRight                   1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           RightArrow            "move_tab_right"              "Move Tab Right"                              "Moves the selected tab right one slot."                                                                           ""                               "$tab,"                                                          }
  {MoveTabLeft                    1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           LeftArrow             "move_tab_left"               "Move Tab Left"                               "Moves the selected tab left one slot."                                                                            ""                               "$tab,"                                                          }
  {OpenTab                        1        1              0                0               "query:tab_commands"                             CmdName            commands          Nil                     Null       0  0  0  0  0  1  1                                                           Null                  "open_tab"                    "Open New Tab"                                "Opens a new tab."                                                                                                 ""                               ""                                                               }
  {BuildTab                       0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "build_tab"                   "Build Tab"                                   "Opens a new tab with the parameterized view specification."                                                       ""                               ""                                                               }
  {DuplicateTab                   1        1              0                0               ""                                               Tab                null              Nil                     Null       0  0  0  0  0  0  0                                                           Duplicate             "duplicate_tab"               "Duplicate Tab"                               "Duplicates a tab."                                                                                                ""                               "$tab,"                                                          }
  {CopyTabFullPath                0        0              0                0               ""                                               Tab                null              Nil                     Null       0  0  0  0  0  0  0                                                           Clipboard             "copy_tab_full_path"          "Copy Full Path"                              "Copies the full path of the file being viewed by this tab."                                                       ""                               "$tab,"                                                          }
  {CloseTab                       1        1              0                0               ""                                               Tab                null              Nil                     Null       0  0  0  0  0  0  0                                                           X                     "close_tab"                   "Close Tab"                                   "Closes the currently opened tab."                                                                                 ""                               "$tab,"                                                          }
  {MoveView                       0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_view"                   "Move View"                                   "Moves a view to a new panel."                                                                                     ""                               ""                                                               }
  {TabBarTop                      1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           UpArrow               "tab_bar_top"                 "Anchor Tab Bar To Top"                       "Anchors a panel's tab bar to the top of the panel."                                                               ""                               "$tab,"                                                          }
  {TabBarBottom                   1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           DownArrow             "tab_bar_bottom"              "Anchor Tab Bar To Bottom"                    "Anchors a panel's tab bar to the bottom of the panel."                                                            ""                               "$tab,"                                                          }
  {TabSettings                    1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Gear                  "tab_settings"                "Tab Settings"                                "Opens settings for a tab."                                                                                        ""                               ""                                                               }
  
  //- rjf: files
  {SetCurrentPath                 0        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           FileOutline           "set_current_path"            "Set Current Path"                            "Sets the debugger's current path, which is used as a starting point when browsing for files."                     ""                               ""                                                               }
  {Open                           1        1              0                0               `folder:\\"$input\\"`                            FilePath           null              Nil                     Null       1  0  0  0  0  1  1                                                           FileOutline           "open"                        "Open"                                        "Opens a file."                                                                                                    "code,source,file"               ""                                                               }
  {Switch                         1        0              0                0               "query:recent_files"                             Cfg                null              RecentFile              Null       0  0  0  0  0  1  1                                                           FileOutline           "switch"                      "Switch"                                      "Switches to a recent file."                                                                                       "code,source,file"               ""                                                               }
  {SwitchToPartnerFile            1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           FileOutline           "switch_to_partner_file"      "Switch To Partner File"                      "Switches to the focused file's partner; or from header to implementation or vice versa."                          "code,source,file"               ""                                                               }
  {RecordFileInProject            0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           FileOutline           "record_file_in_project"      "Record File In Project"                      "Records the passed file path as a recent file in the currently loaded project."                                   ""                               ""                                                               }
  {ShowFileInExplorer             1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           FolderClosedFilled    "show_file_in_explorer"       "Show File In Explorer"                       "Opens the operating system's file explorer and shows the selected file."                                          ""                               "$file,"                                                         }
  
  //- rjf: source <-> disasm
  {GoToDisassembly                1        1              1                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Glasses               "go_to_disassembly"           "Go To Disassembly"                           "Goes to the disassembly, if any, for a given source code line."                                                   "code,source,disassembly,disasm" "$text_pt,"                                                      }
  {GoToSource                     1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           FileOutline           "go_to_source"                "Go To Source"                                "Goes to the source code, if any, for a given disassembly line."                                                   "code,source,disassembly,disasm" ""                                                               }
  
  //- rjf: override file links
  {SetFileReplacementPath         0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "set_file_replacement_path"   "Set File Replacement Path"                   "Sets the path which should be used as the replacement for the passed file."                                       ""                               ""                                                               }
  
  //- rjf: setting config paths
  {NewUser                        1        1              0                0               `folder:\\"$input\\"`                            FilePath           null              Nil                     Null       1  0  0  0  0  1  1                                                           Add                   "new_user"                    "New User"                                    "Creates a new user file, and sets the current user path as that file's path."                                     "new,user,project,layout"        ""                                                               }
  {NewProject                     1        1              0                0               `folder:\\"$input\\"`                            FilePath           null              Nil                     Null       1  0  0  0  0  1  1                                                           Add                   "new_project"                 "New Project"                                 "Creates a new project file, and sets the current project path as that file's path."                               "new,user,project,layout"        ""                                                               }
  {OpenUser                       1        1              0                0               `folder:\\"$input\\"`                            FilePath           null              Nil                     Null       1  0  0  0  0  1  1                                                           Person                "open_user"                   "Open User"                                   "Opens a user file path, immediately loading it, and begins autosaving to it."                                     "load,user,project,layout"       ""                                                               }
  {OpenProject                    1        1              0                0               `folder:\\"$input\\"`                            FilePath           null              Nil                     Null       1  0  0  0  0  1  1                                                           Briefcase             "open_project"                "Open Project"                                "Opens a project file path, immediately loading it, and begins autosaving to it."                                  "project,project,session"        ""                                                               }
  {OpenRecentProject              1        1              0                0               "query:recent_projects"                          Cfg                null              RecentProject           Null       0  0  0  0  0  1  1                                                           Briefcase             "open_recent_project"         "Open Recent Project"                         "Opens a recently used project file."                                                                              "project,project,session"        ""                                                               }
  {SaveUser                       1        1              0                0               `folder:\\"$input\\"`                            FilePath           null              Nil                     Null       1  0  0  0  0  1  1                                                           Save                  "save_user"                   "Save User"                                   "Saves user data to a file, and sets the current user path as that path."                                          "load,user,project,layout"       ""                                                               }
  {SaveProject                    1        1              0                0               `folder:\\"$input\\"`                            FilePath           null              Nil                     Null       1  0  0  0  0  1  1                                                           Save                  "save_project"                "Save Project"                                "Saves project data to a file, and sets the current project path as that path."                                    "project,project,session"        ""                                                               }
  {RecordUserAsLastOpened         0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "record_user_as_last_opened"  "Record User As Last Opened"                  "Records a file path as the last opened user."                                                                     ""                               ""                                                               }
  {RecordProjectInUser            0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "record_project_in_user"      "Records Project In User"                     "Records a file path as a recent project in user data."                                                            ""                               ""                                                               }
  
  //- rjf: writing config changes
  {WriteUserData                  0        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "write_user_data"             "Write User Data"                             "Writes user data to the active user file."                                                                        ""                               ""                                                               }
  {WriteProjectData               0        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "write_project_data"          "Write Project Data"                          "Writes project data to the active project file."                                                                  ""                               ""                                                               }
  
  //- rjf: opening user/project settings
  {UserSettings                   1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Gear                  "user_settings"               "User Settings"                               "Opens user settings."                                                                                             ""                               ""                                                               }
  {ProjectSettings                1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Gear                  "project_settings"            "Project Settings"                            "Opens project settings."                                                                                          ""                               ""                                                               }
  
  //- rjf: meta controls
  {Edit                           1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Pencil                "edit"                        "Edit"                                        "Edits the current selection."                                                                                     ""                               ""                                                               }
  {Accept                         1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           CheckFilled           "accept"                      "Accept"                                      "Accepts current changes, or answers prompts in the affirmative."                                                  ""                               ""                                                               }
  {Cancel                         1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           X                     "cancel"                      "Cancel"                                      "Rejects current changes, exits temporary menus, or answers prompts in the negative."                              ""                               ""                                                               }
  
  //- rjf: directional movement & text controls
  {MoveLeft                       1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_left"                   "Move Left"                                   "Moves the cursor or selection left."                                                                              ""                               ""                                                               }
  {MoveRight                      1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_right"                  "Move Right"                                  "Moves the cursor or selection right."                                                                             ""                               ""                                                               }
  {MoveUp                         1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_up"                     "Move Up"                                     "Moves the cursor or selection up."                                                                                ""                               ""                                                               }
  {MoveDown                       1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_down"                   "Move Down"                                   "Moves the cursor or selection down."                                                                              ""                               ""                                                               }
  {MoveLeftSelect                 1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_left_select"            "Move Left Select"                            "Moves the cursor or selection left, while selecting."                                                             ""                               ""                                                               }
  {MoveRightSelect                1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_right_select"           "Move Right Select"                           "Moves the cursor or selection right, while selecting."                                                            ""                               ""                                                               }
  {MoveUpSelect                   1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_up_select"              "Move Up Select"                              "Moves the cursor or selection up, while selecting."                                                               ""                               ""                                                               }
  {MoveDownSelect                 1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_down_select"            "Move Down Select"                            "Moves the cursor or selection down, while selecting."                                                             ""                               ""                                                               }
  {MoveLeftChunk                  1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_left_chunk"             "Move Left Chunk"                             "Moves the cursor or selection left one chunk."                                                                    ""                               ""                                                               }
  {MoveRightChunk                 1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_right_chunk"            "Move Right Chunk"                            "Moves the cursor or selection right one chunk."                                                                   ""                               ""                                                               }
  {MoveUpChunk                    1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_up_chunk"               "Move Up Chunk"                               "Moves the cursor or selection up one chunk."                                                                      ""                               ""                                                               }
  {MoveDownChunk                  1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_down_chunk"             "Move Down Chunk"                             "Moves the cursor or selection down one chunk."                                                                    ""                               ""                                                               }
  {MoveUpPage                     1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_up_page"                "Move Up Page"                                "Moves the cursor or selection up one page."                                                                       ""                               ""                                                               }
  {MoveDownPage                   1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_down_page"              "Move Down Page"                              "Moves the cursor or selection down one page."                                                                     ""                               ""                                                               }
  {MoveUpWhole                    1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_up_whole"               "Move Up Whole"                               "Moves the cursor or selection to the beginning of the relevant content."                                          ""                               ""                                                               }
  {MoveDownWhole                  1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_down_whole"             "Move Down Whole"                             "Moves the cursor or selection to the end of the relevant content."                                                ""                               ""                                                               }
  {MoveLeftChunkSelect            1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_left_chunk_select"      "Move Left Chunk Select"                      "Moves the cursor or selection left one chunk."                                                                    ""                               ""                                                               }
  {MoveRightChunkSelect           1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_right_chunk_select"     "Move Right Chunk Select"                     "Moves the cursor or selection right one chunk."                                                                   ""                               ""                                                               }
  {MoveUpChunkSelect              1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_up_chunk_select"        "Move Up Chunk Select"                        "Moves the cursor or selection up one chunk."                                                                      ""                               ""                                                               }
  {MoveDownChunkSelect            1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_down_chunk_select"      "Move Down Chunk Select"                      "Moves the cursor or selection down one chunk."                                                                    ""                               ""                                                               }
  {MoveUpPageSelect               1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_up_page_select"         "Move Up Page Select"                         "Moves the cursor or selection up one page, while selecting."                                                      ""                               ""                                                               }
  {MoveDownPageSelect             1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_down_page_select"       "Move Down Page Select"                       "Moves the cursor or selection down one page, while selecting."                                                    ""                               ""                                                               }
  {MoveUpWholeSelect              1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_up_whole_select"        "Move Up Whole Select"                        "Moves the cursor or selection to the beginning of the relevant content, while selecting."                         ""                               ""                                                               }
  {MoveDownWholeSelect            1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_down_whole_select"      "Move Down Whole Select"                      "Moves the cursor or selection to the end of the relevant content, while selecting."                               ""                               ""                                                               }
  {MoveUpReorder                  1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_up_reorder"             "Move Up Reorder"                             "Moves the cursor or selection up, while swapping the currently selected element with that upward."                ""                               ""                                                               }
  {MoveDownReorder                1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_down_reorder"           "Move Down Reorder"                           "Moves the cursor or selection down, while swapping the currently selected element with that downward."            ""                               ""                                                               }
  {MoveHome                       1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_home"                   "Move Home"                                   "Moves the cursor to the beginning of the line."                                                                   ""                               ""                                                               }
  {MoveEnd                        1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_end"                    "Move End"                                    "Moves the cursor to the end of the line."                                                                         ""                               ""                                                               }
  {MoveHomeSelect                 1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_home_select"            "Move Home Select"                            "Moves the cursor to the beginning of the line, while selecting."                                                  ""                               ""                                                               }
  {MoveEndSelect                  1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_end_select"             "Move End Select"                             "Moves the cursor to the end of the line, while selecting."                                                        ""                               ""                                                               }
  {SelectAll                      1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "select_all"                  "Select All"                                  "Selects everything possible."                                                                                     ""                               ""                                                               }
  {DeleteSingle                   1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "delete_single"               "Delete Single"                               "Deletes a single element to the right of the cursor, or the active selection."                                    ""                               ""                                                               }
  {DeleteChunk                    1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "delete_chunk"                "Delete Chunk"                                "Deletes a chunk to the right of the cursor, or the active selection."                                             ""                               ""                                                               }
  {BackspaceSingle                1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "backspace_single"            "Backspace Single"                            "Deletes a single element to the left of the cursor, or the active selection."                                     ""                               ""                                                               }
  {BackspaceChunk                 1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "backspace_chunk"             "Backspace Chunk"                             "Deletes a chunk to the left of the cursor, or the active selection."                                              ""                               ""                                                               }
  {Copy                           1        1              0                1               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Clipboard             "copy"                        "Copy"                                        "Copies the active selection to the clipboard."                                                                    ""                               "$text_rng,"                                                     }
  {Cut                            1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Clipboard             "cut"                         "Cut"                                         "Copies the active selection to the clipboard, then deletes it."                                                   ""                               ""                                                               }
  {Paste                          1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Clipboard             "paste"                       "Paste"                                       "Pastes the current contents of the clipboard."                                                                    ""                               ""                                                               }
  {InsertText                     0        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "insert_text"                 "Insert Text"                                 "Inserts the text that was used to cause this command."                                                            ""                               ""                                                               }
  
  //- rjf: directionless navigation
  {MoveNext                       1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_next"                   "Move Next"                                   "Moves the cursor or selection to the next element."                                                               ""                               ""                                                               }
  {MovePrev                       1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "move_prev"                   "Move Previous"                               "Moves the cursor or selection to the previous element."                                                           ""                               ""                                                               }
  
  //- rjf: code navigation
  {GoToLine                       1        1              0                0               ""                                               Cursor             null              Nil                     Null       0  0  0  0  1  0  1                                                           Null                  "goto_line"                   "Go To Line"                                  "Jumps to a line number in the current code file."                                                                 ""                               ""                                                               }
  {GoToAddress                    1        1              0                0               ""                                               Vaddr              null              Nil                     Null       0  0  0  0  1  0  1                                                           Null                  "goto_address"                "Go To Address"                               "Jumps to an address in the current memory or disassembly view."                                                   ""                               ""                                                               }
  {CenterCursor                   1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "center_cursor"               "Center Cursor"                               "Snaps the current code view to center the cursor."                                                                ""                               ""                                                               }
  {ContainCursor                  1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "contain_cursor"              "Contain Cursor"                              "Snaps the current code view to contain the cursor."                                                               ""                               ""                                                               }
  {FindNext                       1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  1  0  0  0  0                                                           Find                  "find_next"                   "Find Next"                                   "Searches the current code file forward (from the cursor) for the last searched string."                           ""                               ""                                                               }
  {FindPrev                       1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  1  0  0  0  0                                                           Find                  "find_prev"                   "Find Previous"                               "Searches the current code file backwards (from the cursor) for the last searched string."                         ""                               ""                                                               }
  
  //- rjf: thread finding
  {FindThread                     1        1              0                0               "query:threads"                                  Thread             null              Nil                     Thread     0  0  0  0  0  1  1                                                           Find                  "find_thread"                 "Find Thread"                                 "Jumps to the passed thread in either source code, disassembly, or both if they're already open."                  ""                               ""                                                               }
  {FindSelectedThread             1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Find                  "find_selected_thread"        "Find Selected Thread"                        "Jumps to the selected thread in either source code, disassembly, or both if they're already open."                ""                               ""                                                               }
  
  //- rjf: name finding
  {GoToName                       1        1              0                0               "query:procedures"                               String             symbol_lister     Nil                     Null       0  0  0  0  1  1  1                                                           Null                  "goto_name"                   "Go To Name"                                  "Searches for the passed string as a file, a symbol in debug info, and more, then jumps to it if possible."        ""                               "$text_pt,"                                                      }
  {GoToNameAtCursor               1        1              1                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "goto_name_at_cursor"         "Go To Name At Cursor"                        "Searches for the text at the cursor as a file, a symbol in debug info, and more, then jumps to it if possible."   ""                               ""                                                               }
  
  //- rjf: watch expressions
  {ToggleWatchExpression          1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Binoculars            "toggle_watch_expr"           "Toggle Watch Expression"                     "Adds or removes an expression to an opened watch view."                                                           ""                               "$text_pt,"                                                      }
  {ToggleWatchExpressionAtCursor  1        1              1                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Binoculars            "toggle_watch_expr_at_cursor" "Toggle Watch Expression At Cursor"           "Adds or removes the expression that the cursor or selection is currently over to an opened watch view."           ""                               ""                                                               }
  {ToggleWatchExpressionAtMouse   1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Binoculars            "toggle_watch_expr_at_mouse"  "Toggle Watch Expression At Mouse"            "Adds or removes the expression that the mouse is currently over to an opened watch view."                         ""                               ""                                                               }
  
  //- rjf: general config operations
  {EnableCfg                      0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           CheckHollow           "enable_cfg"                  "Enable"                                      "Enables a config tree."                                                                                           ""                               ""                                                               }
  {DisableCfg                     0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           CheckFilled           "disable_cfg"                 "Disable"                                     "Disables a config tree."                                                                                          ""                               ""                                                               }
  {SelectCfg                      0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           RadioHollow           "select_cfg"                  "Select"                                      "Selects a config tree, disabling all others of the same kind."                                                    ""                               ""                                                               }
  {DeselectCfg                    0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           RadioFilled           "deselect_cfg"                "Deselect"                                    "Deselects a config tree."                                                                                         ""                               ""                                                               }
  {RemoveCfg                      0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Trash                 "remove_cfg"                  "Remove"                                      "Removes a config tree."                                                                                           ""                               ""                                                               }
  {NameCfg                        0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "name_cfg"                    "Name"                                        "Equips a config tree with a label."                                                                               ""                               ""                                                               }
  {ConditionCfg                   0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "condition_cfg"               "Condition"                                   "Equips a config tree with a condition string."                                                                    ""                               ""                                                               }
  {DuplicateCfg                   0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Duplicate             "duplicate_cfg"               "Duplicate"                                   "Duplicates a config tree."                                                                                        ""                               ""                                                               }
  {RelocateCfg                    0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "relocate_cfg"                "Relocate"                                    "Relocates a config tree."                                                                                         ""                               ""                                                               }
  {SaveToProject                  0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Briefcase             "save_cfg_to_project"         "Save To Project"                             "Saves the config tree to the project."                                                                            ""                               ""                                                               }
  
  //- rjf: breakpoints
  {AddBreakpoint                  1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           CircleFilled          "add_breakpoint"              "Add Line Breakpoint"                         "Places a breakpoint at a given location (file path and line number, address, or symbol name)."                    ""                               ""                                                               }
  {AddAddressBreakpoint           1        0              0                0               ""                                               Expr               null              Nil                     Null       0  0  0  0  1  1  1                                                           CircleFilled          "add_address_breakpoint"      "Add Address Breakpoint"                      "Places a breakpoint on the specified address."                                                                    ""                               "$breakpoints,"                                                  }
  {AddFunctionBreakpoint          1        0              0                0               "query:procedures"                               String             null              Nil                     Null       0  0  0  0  1  1  1                                                           CircleFilled          "add_function_breakpoint"     "Add Function Breakpoint"                     "Places a breakpoint on the first address of the specified function."                                              ""                               "$breakpoints,"                                                  }
  {ToggleBreakpoint               1        1              1                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           CircleFilled          "toggle_breakpoint"           "Toggle Line Breakpoint"                      "Places or removes a breakpoint at a given location (file path and line number, address, or symbol name)."         ""                               "$text_pt,"                                                      }
  {RemoveBreakpoint               1        0              0                0               "query:breakpoints"                              Cfg                null              Nil                     Null       0  0  0  0  1  1  1                                                           Trash                 "remove_breakpoint"           "Remove Breakpoint"                           "Removes an existing breakpoint."                                                                                  "delete"                         "$breakpoints,"                                                  }
  {EnableBreakpoint               1        1              0                0               "query:breakpoints"                              Cfg                null              Breakpoint              Null       0  0  0  0  1  1  1                                                           CheckFilled           "enable_breakpoint"           "Enable Breakpoint"                           "Enables a breakpoint."                                                                                            ""                               ""                                                               }
  {DisableBreakpoint              1        1              0                0               "query:breakpoints"                              Cfg                null              Breakpoint              Null       0  0  0  0  1  1  1                                                           CheckHollow           "disable_breakpoint"          "Disable Breakpoint"                          "Disables a breakpoint."                                                                                           ""                               ""                                                               }
  {ClearBreakpoints               1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Trash                 "clear_breakpoints"           "Clear Breakpoints"                           "Removes all breakpoints."                                                                                         ""                               ""                                                               }
  {ListBreakpoints                0        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "list_breakpoints"            "List Breakpoints"                            "Lists all breakpoints."                                                                                           ""                               ""                                                               }
  
  //- rjf: watch pins
  {AddWatchPin                    1        1              0                0               ""                                               Expr               null              Nil                     Null       0  0  0  0  1  1  1                                                           Pin                   "add_watch_pin"               "Add Watch Pin"                               "Places a watch pin at a given location (file path and line number or address)."                                   ""                               "$watch_pins,"                                                   }
  {ToggleWatchPin                 1        0              0                0               ""                                               Expr               null              Nil                     Null       0  0  0  0  1  1  1                                                           Pin                   "toggle_watch_pin"            "Toggle Watch Pin"                            "Places or removes a watch pin at a given location (file path and line number or address)."                        ""                               ""                                                               }
  
  //- rjf: type views
  {AddTypeView                    0        0              0                0               ""                                               String             null              Nil                     Null       0  0  0  0  0  0  0                                                           Binoculars            "add_type_view"               "Add Type View"                               "Adds a new type view."                                                                                            ""                               ""                                                               }
  
  //- rjf: file path maps
  {AddFilePathMap                 0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           FileOutline           "add_file_path_map"           "Add File Path Map"                           "Adds a new file path map."                                                                                        ""                               ""                                                               }
  
  //- rjf: themes
  {EditUserTheme                  0        0              0                0               "query:themes"                                   String             null              Nil                     Null       0  0  0  0  0  0  0                                                           Palette               "edit_user_theme"             "Edit User Theme"                             "Edits the current user's theme."                                                                                  "color"                          ""                                                               }
  {EditProjectTheme               0        0              0                0               "query:themes"                                   String             null              Nil                     Null       0  0  0  0  0  0  0                                                           Palette               "edit_project_theme"          "Edit Project Theme"                          "Edits the current project's theme."                                                                               "color"                          ""                                                               }
  {AddThemeColor                  0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Palette               "add_theme_color"             "Add Theme Color"                             "Adds a new theme color."                                                                                          ""                               ""                                                               }
  {ForkTheme                      0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Palette               "fork_theme"                  "Fork Theme"                                  "Imports all colors from the current theme so they can be individually edited."                                    ""                               ""                                                               }
  {SaveTheme                      0        0              0                0               ""                                               String             null              Nil                     Null       1  0  0  0  0  1  1                                                           Save                  "save_theme"                  "Save Theme"                                  "Saves all theme colors to a new theme file."                                                                      ""                               ""                                                               }
  {SaveAndSetTheme                0        0              0                0               ""                                               String             null              Nil                     Null       1  0  0  0  0  1  1                                                           Save                  "save_and_set_theme"          "Save And Set Theme"                          "Saves all theme colors to a new theme file, and then sets that theme as the selected theme."                      ""                               ""                                                               }
  
  //- rjf: line operations
  {SetNextStatement               1        1              1                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           RightArrow            "set_next_statement"          "Set Next Statement"                          "Sets the selected thread's instruction pointer to the cursor's position."                                         ""                               "$text_pt,"                                                      }
  
  //- rjf: targets
  {AddTarget                      1        1              0                0               `folder:\\"$input\\"`                            FilePath           null              Nil                     Null       1  0  0  0  0  1  1                                                           Target                "add_target"                  "Add Target"                                  "Adds a new target."                                                                                               "application,executable,debug"   "$targets,"                                                      }
  {SelectTarget                   1        1              0                0               "query:targets"                                  Cfg                null              Target                  Null       0  0  0  0  0  1  1                                                           Target                "select_target"               "Select Target"                               "Selects a target."                                                                                                ""                               ""                                                               }
  {EnableTarget                   1        1              0                0               "query:targets"                                  Cfg                null              Target                  Null       0  0  0  0  0  1  1                                                           CheckFilled           "enable_target"               "Enable Target"                               "Enables a target, in addition to all targets currently enabled."                                                  ""                               ""                                                               }
  {DisableTarget                  1        1              0                0               "query:targets"                                  Cfg                null              Target                  Null       0  0  0  0  0  1  1                                                           CheckHollow           "disable_target"              "Disable Target"                              "Disables a target."                                                                                               ""                               ""                                                               }
  {RemoveTarget                   1        1              0                0               "query:targets"                                  Cfg                null              Target                  Null       0  0  0  0  0  1  1                                                           Trash                 "remove_target"               "Remove Target"                               "Removes a target."                                                                                                "delete"                         ""                                                               }
  
  //- rjf: attaching
  {RegisterAsJITDebugger          1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "register_as_jit_debugger"    "Register As Just-In-Time (JIT) Debugger"     "Registers the RAD debugger as the just-in-time (JIT) debugger used by the operating system."                      ""                               ""                                                               }
  
  //- rjf: snap-to-code-location
  {FindCodeLocation               0        1              0                0               ""                                               FilePath           null              Nil                     Null       0  0  0  0  0  1  1                                                           FileOutline           "find_code_location"          "Find Code Location"                          "Finds a specific source code location given file, line, and column coordinates. Opens the file if necessary."     ""                               ""                                                               }
  
  //- rjf: searching
  {Search                         1        1              0                0               ""                                               String             null              Nil                     Null       0  0  1  1  1  0  1                                                           Find                  "search"                      "Search"                                      "Begins searching within the active interface."                                                                    "sort,search,filter,find"        ""                                                               }
  {SearchBackwards                1        1              0                0               ""                                               String             null              Nil                     Null       0  0  1  1  1  0  1                                                           Find                  "search_backwards"            "Search Backwards"                            "Begins searching backwards within the active interface."                                                          "sort,search,filter,find"        ""                                                               }
  
  //- rjf: queries
  {PickFile                       0        0              0                0               `folder:\\"$input\\"`                            FilePath           null              Nil                     Null       1  0  0  0  0  1  1                                                           FileOutline           "pick_file"                   "Pick File"                                   "Opens the file browser to pick a file."                                                                           ""                               ""                                                               }
  {PickFolder                     0        0              0                0               `folder:\\"$input\\"`                            FilePath           null              Nil                     Null       0  1  0  0  0  1  1                                                           FolderOpenFilled      "pick_folder"                 "Pick Folder"                                 "Opens the file browser to pick a folder."                                                                         ""                               ""                                                               }
  {PickFileOrFolder               0        0              0                0               `folder:\\"$input\\"`                            FilePath           null              Nil                     Null       1  1  0  0  0  1  1                                                           FileOutline           "pick_file_or_folder"         "Pick File/Folder"                            "Opens the file browser to pick a file or folder."                                                                 ""                               ""                                                               }
  
  //- rjf: query stack
  {PushQuery                      0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "push_query"                  "Push Query"                                  "Opens a new temporary query interface."                                                                           ""                               ""                                                               }
  {CompleteQuery                  0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "complete_query"              "Complete Query"                              "Completes and closes a query."                                                                                    ""                               ""                                                               }
  {CancelQuery                    0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "cancel_query"                "Cancel Query"                                "Closes a query."                                                                                                  ""                               ""                                                               }
  {UpdateQuery                    0        0              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "update_query"                "Update Query"                                "Updates a query input."                                                                                           ""                               ""                                                               }
  
  //- rjf: event buffers
  {OpenEventBuffer                0        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "open_event_buffer"           "Open Event Buffer"                           "Opens a new event buffer, to which debugger events will be written, for external processing."                     ""                               ""                                                               }
  {CloseEventBuffer               0        1              0                0               ""                                               Cfg                null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "close_event_buffer"          "Close Event Buffer"                          "Closes an existing event buffer."                                                                                 ""                               ""                                                               }
  
  //- rjf: developer commands
  {ToggleDevMenu                  1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "toggle_dev_menu"             "Toggle Developer Menu"                       "Opens and closes the developer menu."                                                                             ""                               ""                                                               }
  {LogMarker                      1        1              0                0               ""                                               Null               null              Nil                     Null       0  0  0  0  0  0  0                                                           Null                  "log_marker"                  "Log Marker"                                  "Logs a marker in the application log, to denote specific points in time within the log."                          ""                               ""                                                               }
}

@enum RD_CmdKind:
{
  `Null`,
  @expand(D_CmdTable a) `$(a.name)`,
  @expand(RD_CmdTable, a) `$(a.name)`,
  @expand(RD_WatchTabFastPathTable, a) `Open$(a.name)`,
  @expand(RD_ViewTabFastPathTable, a) `Open$(a.name)`,
  COUNT,
  
  `FirstTabFastPathCmd = RD_CmdKind_OpenWatch`,
}

@struct RD_Query:
{
  `RD_QueryFlags flags`;
  `RD_RegSlot slot`;
  `String8 expr`;
  `String8 view_name`;
  `CTRL_EntityKind ctrl_entity_kind`;
}

@struct RD_CmdKindInfo:
{
  `String8 string`;
  `String8 description`;
  `String8 search_tags`;
  `String8 ctx_filter`;
  `RD_CmdKindFlags flags`;
  `RD_Query query`;
};

@data(RD_CmdKindInfo) @c_file rd_cmd_kind_info_table:
{
  `{0}`,
  @expand(D_CmdTable, a)
    ```{ str8_lit_comp("$(a.string)"), str8_lit_comp("$(a.desc)"), str8_lit_comp("$(a.search_tags)"), str8_lit_comp("$(a.ctx_filter)"), (RD_CmdKindFlag_ListInUI*$(a.ui_vis))|(RD_CmdKindFlag_ListInIPCDocs*$(a.ipc_docs_vis))|(RD_CmdKindFlag_ListInTextPt*$(a.text_pt_vis))|(RD_CmdKindFlag_ListInTextRng*$(a.text_rng_vis)), {(RD_QueryFlag_AllowFiles*$(a.q_allow_files))|(RD_QueryFlag_AllowFolders*$(a.q_allow_folders))|(RD_QueryFlag_CodeInput*$(a.q_is_code))|(RD_QueryFlag_KeepOldInput*$(a.q_keep_oi))|(RD_QueryFlag_SelectOldInput*$(a.q_select_oi))|(RD_QueryFlag_Floating*$(a.q_floating))|(RD_QueryFlag_Required*$(a.q_required)), RD_RegSlot_$(a.q_slot), str8_lit_comp("$(a.q_expr)"), str8_lit_comp("$(a.q_view != 'null' -> a.q_view)"), CTRL_EntityKind_$(a.q_ctrl_ent_kind)}}```;
  @expand(RD_CmdTable, a)
    ```{ str8_lit_comp("$(a.string)"), str8_lit_comp("$(a.desc)"), str8_lit_comp("$(a.search_tags)"), str8_lit_comp("$(a.ctx_filter)"), (RD_CmdKindFlag_ListInUI*$(a.ui_vis))|(RD_CmdKindFlag_ListInIPCDocs*$(a.ipc_docs_vis))|(RD_CmdKindFlag_ListInTextPt*$(a.text_pt_vis))|(RD_CmdKindFlag_ListInTextRng*$(a.text_rng_vis)), {(RD_QueryFlag_AllowFiles*$(a.q_allow_files))|(RD_QueryFlag_AllowFolders*$(a.q_allow_folders))|(RD_QueryFlag_CodeInput*$(a.q_is_code))|(RD_QueryFlag_KeepOldInput*$(a.q_keep_oi))|(RD_QueryFlag_SelectOldInput*$(a.q_select_oi))|(RD_QueryFlag_Floating*$(a.q_floating))|(RD_QueryFlag_Required*$(a.q_required)), RD_RegSlot_$(a.q_slot), str8_lit_comp("$(a.q_expr)"), str8_lit_comp("$(a.q_view != 'null' -> a.q_view)"), CTRL_EntityKind_$(a.q_ctrl_ent_kind)}}```;
  @expand(RD_WatchTabFastPathTable, a)
    ```{ str8_lit_comp("$(a.name_lower)"), str8_lit_comp("Opens a $(a.display_name) tab."), {0}, {0}, RD_CmdKindFlag_ListInUI|RD_CmdKindFlag_ListInIPCDocs|RD_CmdKindFlag_ListInTab}```;
  @expand(RD_ViewTabFastPathTable, a)
    ```{ str8_lit_comp("$(a.name_lower)"), str8_lit_comp("Opens a $(a.display_name) tab."), {0}, {0}, RD_CmdKindFlag_ListInUI|RD_CmdKindFlag_ListInIPCDocs|RD_CmdKindFlag_ListInTab}```;
}

////////////////////////////////
//~ rjf: Default Bindings

@table(name key ctrl shift alt)
RD_DefaultBindingTable:
{
  //- rjf: low-level target control operations
  { "kill_all"                    F5        0        shift     0          }
  { "step_into_inst"              F11       0        0         alt        }
  { "step_over_inst"              F10       0        0         alt        }
  { "step_out"                    F11       0        shift     0          }
  { "halt"                        X         ctrl     shift     0          }
  { "halt"                        Pause     0        0         0          }
  
  //- rjf: high-level composite target control operations
  { "run"                         F5        0        0         0          }
  { "restart"                     F5        ctrl     shift     0          }
  { "step_into"                   F11       0        0         0          }
  { "step_over"                   F10       0        0         0          }
  { "run_to_line"                 F10       ctrl     0         0          }
  { "set_next_statement"          F10       ctrl     shift     0          }
  
  //- rjf: font sizes
  { "inc_window_font_size"        Equal     0        0         alt        }
  { "dec_window_font_size"        Minus     0        0         alt        }
  
  //- rjf: windows
  { "window"                      N         ctrl     shift     0          }
  { "toggle_fullscreen"           Return    ctrl     0         0          }
  
  //- rjf: panel splitting
  { "new_panel_right"             P         ctrl     0         0          }
  { "new_panel_down"              Minus     ctrl     0         0          }
  
  //- rjf: panel rotation
  { "rotate_panel_columns"        2         ctrl     0         0          }
  
  //- rjf: focused panel changing
  { "next_panel"                  Comma     ctrl     0         0          }
  { "prev_panel"                  Comma     ctrl     shift     0          }
  { "focus_panel_right"           Right     ctrl     0         alt        }
  { "focus_panel_left"            Left      ctrl     0         alt        }
  { "focus_panel_up"              Up        ctrl     0         alt        }
  { "focus_panel_down"            Down      ctrl     0         alt        }
  
  //- rjf: undo/redo
  { "undo"                        Z         ctrl     0         0          }
  { "redo"                        Y         ctrl     0         0          }
  
  //- rjf: focus history
  { "go_back"                     Left      0        0         alt        }
  { "go_forward"                  Right     0        0         alt        }
  
  //- rjf: panel removal
  { "close_panel"                 P         ctrl     shift     alt        }
  
  //- rjf: panel tab
  { "next_tab"                    PageDown  ctrl     0         0          }
  { "prev_tab"                    PageUp    ctrl     0         0          }
  { "next_tab"                    Tab       ctrl     0         0          }
  { "prev_tab"                    Tab       ctrl     shift     0          }
  { "move_tab_right"              PageDown  ctrl     shift     0          }
  { "move_tab_left"               PageUp    ctrl     shift     0          }
  { "close_tab"                   W         ctrl     0         0          }
  { "tab_bar_top"                 Up        ctrl     shift     alt        }
  { "tab_bar_bottom"              Down      ctrl     shift     alt        }
  { "open_tab"                    T         ctrl     0         0          }
  
  //- rjf: files
  { "open"                        O         ctrl     0         0          }
  { "switch"                      I         ctrl     0         0          }
  { "switch_to_partner_file"      O         0        0         alt        }
  
  //- rjf: setting config paths
  { "open_user"                   N         ctrl     shift     alt        }
  { "open_project"                N         ctrl     0         alt        }
  { "open_user"                   O         ctrl     shift     alt        }
  { "open_project"                O         ctrl     0         alt        }
  { "save_user"                   S         ctrl     shift     alt        }
  { "save_project"                S         ctrl     shift     0          }
  
  //- rjf: meta controls
  { "edit"                        F2        0        0         0          }
  { "accept"                      Return    0        0         0          }
  { "accept"                      Space     0        0         0          }
  { "cancel"                      Esc       0        0         0          }
  
  //- rjf: directional movement & text controls
  { "move_left"                   Left      0        0         0          }
  { "move_right"                  Right     0        0         0          }
  { "move_up"                     Up        0        0         0          }
  { "move_down"                   Down      0        0         0          }
  { "move_left_select"            Left      0        shift     0          }
  { "move_right_select"           Right     0        shift     0          }
  { "move_up_select"              Up        0        shift     0          }
  { "move_down_select"            Down      0        shift     0          }
  { "move_left_chunk"             Left      ctrl     0         0          }
  { "move_right_chunk"            Right     ctrl     0         0          }
  { "move_up_chunk"               Up        ctrl     0         0          }
  { "move_down_chunk"             Down      ctrl     0         0          }
  { "move_up_page"                PageUp    0        0         0          }
  { "move_down_page"              PageDown  0        0         0          }
  { "move_up_whole"               Home      ctrl     0         0          }
  { "move_down_whole"             End       ctrl     0         0          }
  { "move_left_chunk_select"      Left      ctrl     shift     0          }
  { "move_right_chunk_select"     Right     ctrl     shift     0          }
  { "move_up_chunk_select"        Up        ctrl     shift     0          }
  { "move_down_chunk_select"      Down      ctrl     shift     0          }
  { "move_up_page_select"         PageUp    0        shift     0          }
  { "move_down_page_select"       PageDown  0        shift     0          }
  { "move_up_whole_select"        Home      ctrl     shift     0          }
  { "move_down_whole_select"      End       ctrl     shift     0          }
  { "move_up_reorder"             Up        0        0         alt        }
  { "move_down_reorder"           Down      0        0         alt        }
  { "move_home"                   Home      0        0         0          }
  { "move_end"                    End       0        0         0          }
  { "move_home_select"            Home      0        shift     0          }
  { "move_end_select"             End       0        shift     0          }
  { "select_all"                  A         ctrl     0         0          }
  { "delete_single"               Delete    0        0         0          }
  { "delete_chunk"                Delete    ctrl     0         0          }
  { "backspace_single"            Backspace 0        0         0          }
  { "backspace_chunk"             Backspace ctrl     0         0          }
  { "copy"                        C         ctrl     0         0          }
  { "copy"                        Insert    ctrl     0         0          }
  { "cut"                         X         ctrl     0         0          }
  { "paste"                       V         ctrl     0         0          }
  { "paste"                       Insert    0        shift     0          }
  { "insert_text"                 Null      0        0         0          }
  
  //- rjf: secondary navigation
  { "move_next"                   Tab       0        0         0          }
  { "move_prev"                   Tab       0        shift     0          }
  
  //- rjf: code navigation
  { "goto_line"                   G         ctrl     0         0          }
  { "goto_address"                G         0        0         alt        }
  { "search"                      F         ctrl     0         0          }
  { "search_backwards"            R         ctrl     0         0          }
  { "find_next"                   F3        0        0         0          }
  { "find_prev"                   F3        shift    0         0          }
  
  //- rjf: thread finding
  { "find_selected_thread"        F4        0        0         0          }
  
  //- rjf: name finding
  { "goto_name"                   J         ctrl     0         0          }
  { "goto_name_at_cursor"         F12       0        0         0          }
  
  //- rjf: watch expressions
  { "toggle_watch_expr_at_cursor" W         0        0         alt        }
  { "toggle_watch_expr_at_mouse"  D         ctrl     0         0          }
  { "toggle_watch_pin"            F9        ctrl     0         0          }
  
  //- rjf: breakpoints
  { "toggle_breakpoint"           F9        0        0         0          }
  { "add_address_breakpoint"      F9        0        shift     0          }
  { "add_function_breakpoint"     F9        ctrl     shift     0          }
  
  //- rjf: attaching
  { "attach"                      F6        0        shift     0          }
  
  //- rjf: command lister
  { "open_palette"                F1        0        0         0          }
  { "open_palette"                P         ctrl     shift     0          }
  
  //- rjf: developer commands
  { "log_marker"                  M         ctrl     shift     alt        }
  { "toggle_dev_menu"             D         ctrl     shift     alt        }
}

@data(`struct {String8 string; RD_Binding binding;}`) @c_file rd_default_binding_table:
{
  @expand(RD_DefaultBindingTable a) ```{str8_lit_comp("$(a.name)"), {OS_Key_$(a.key), 0 $(a.ctrl != 0 -> `|OS_Modifier_Ctrl`) $(a.shift != 0 -> `|OS_Modifier_Shift`) $(a.alt != 0 -> `|OS_Modifier_Alt`)}}```;
}

////////////////////////////////
//~ rjf: Binding Version Remap Table

@table(old_name new_name)
RD_BindingVersionRemapTable:
{
  {"commands"     "run_command"}
  {"load_user"    "open_user"}
  {"load_profile" "open_profile"}
  {"load_project" "open_project"}
  {"open_profile" "open_project"}
  {"address_breakpoint" "add_address_breakpoint"}
  {"function_breakpoint" "add_function_breakpoint"}
  {"toggle_breakpoint_cursor" "toggle_breakpoint"}
  
}

@data(String8) rd_binding_version_remap_old_name_table:
{
  @expand(RD_BindingVersionRemapTable a) `str8_lit_comp("$(a.old_name)")`
}

@data(String8) rd_binding_version_remap_new_name_table:
{
  @expand(RD_BindingVersionRemapTable a) `str8_lit_comp("$(a.new_name)")`
}

////////////////////////////////
//~ rjf: Icons

@table(name, text)
RD_IconTable:
{
  (Null                     "")
  (FolderOpenOutline        "b")
  (FolderClosedOutline      "c")
  (FolderOpenFilled         "B")
  (FolderClosedFilled       "C")
  (FileOutline              "f")
  (FileFilled               "F")
  (Play                     "g")
  (PlayStepForward          "h")
  (Pause                    "r")
  (Stop                     "s")
  (Info                     "i")
  (WarningSmall             "w")
  (WarningBig               "W")
  (Unlocked                 "k")
  (Locked                   "K")
  (LeftArrow                "L")
  (RightArrow               "R")
  (UpArrow                  "U")
  (DownArrow                "D")
  (Gear                     "G")
  (Pencil                   "P")
  (Trash                    "3")
  (Pin                      "p")
  (RadioHollow              "O")
  (RadioFilled              "o")
  (CheckHollow              "!")
  (CheckFilled              "1")
  (Check                    "V")
  (LeftCaret                "<")
  (RightCaret               ">")
  (UpCaret                  "^")
  (DownCaret                "v")
  (UpScroll                 "9")
  (DownScroll               "0")
  (LeftScroll               "7")
  (RightScroll              "8")
  (Add                      "+")
  (Minus                    "-")
  (Thread                   "'")
  (Threads                  '\\"')
  (Machine                  "M")
  (CircleFilled             ".")
  (X                        "x")
  (Refresh                  "q")
  (Undo                     "j")
  (Redo                     "u")
  (Save                     "m")
  (Window                   "n")
  (Target                   "l")
  (Clipboard                "a")
  (Scheduler                "z")
  (Module                   "y")
  (XSplit                   "X")
  (YSplit                   "Y")
  (ClosePanel               "S")
  (StepInto                 "T")
  (StepOver                 "Z")
  (StepOut                  "d")
  (Find                     "N")
  (Palette                  "E")
  (Thumbnails               "H")
  (Glasses                  "e")
  (Binoculars               "I")
  (List                     "J")
  (Grid                     "A")
  (QuestionMark             "?")
  (Person                   "4")
  (Briefcase                "5")
  (Dot                      "6")
  (Bitmap                   "&")
  (Cube                     "*")
  (WindowRestore            "(")
  (WindowMinimize           ")")
  (Duplicate                "#")
}

@enum RD_IconKind:
{
  @expand(RD_IconTable a) `$(a.name)`,
  COUNT,
}

@data(String8) rd_icon_kind_text_table:
{
  @expand(RD_IconTable a) `str8_lit_comp("$(a.text)")`;
}

////////////////////////////////
//~ rjf: Theme Tables

@table(name_upper  name_lower  display_string  cfg)
RD_ThemePresetTable:
{
  //- rjf: default dark theme
  {
    DefaultDark default_dark "Default (Dark)",
    ```theme:
    {
      theme_color: {tags:"background",                             value: 0x1b1b1bff }
      theme_color: {tags:"alt background",                         value: 0x222222ff }
      theme_color: {tags:"pop background",                         value: 0x355b6eff }
      theme_color: {tags:"fresh background",                       value: 0x31393dff }
      theme_color: {tags:"match background",                       value: 0x31393dff }
      theme_color: {tags:"border",                                 value: 0x404040ff }
      theme_color: {tags:"text",                                   value: 0xe5e5e5ff }
      theme_color: {tags:"weak text",                              value: 0xa4a4a4ff }
      theme_color: {tags:"good text",                              value: 0x32a852ff }
      theme_color: {tags:"neutral text",                           value: 0x3a90bbff }
      theme_color: {tags:"bad text",                               value: 0xcf5242ff }
      theme_color: {tags:"hover",                                  value: 0xffffffff }
      theme_color: {tags:"focus overlay",                          value: 0xfda20012 }
      theme_color: {tags:"focus border",                           value: 0xfda200ff }
      theme_color: {tags:"cursor",                                 value: 0x8aff00ff }
      theme_color: {tags:"selection",                              value: 0x99ccff0f }
      theme_color: {tags:"inactive background",                    value: 0x0000002f }
      theme_color: {tags:"drop_shadow",                            value: 0x0000007f }
      theme_color: {tags:"good_pop background",                    value: 0x2c5b36ff }
      theme_color: {tags:"good_pop border",                        value: 0x568761ff }
      theme_color: {tags:"good_pop hover",                         value: 0xe3f5d3ff }
      theme_color: {tags:"good_pop weak text",                     value: 0xe3f5d3ff }
      theme_color: {tags:"bad_pop background",                     value: 0x803425ff }
      theme_color: {tags:"bad_pop hover",                          value: 0xff825cff }
      theme_color: {tags:"code_default",                           value: 0xcbcbcbff }
      theme_color: {tags:"code_symbol",                            value: 0x42a2cfff }
      theme_color: {tags:"code_type",                              value: 0xfec746ff }
      theme_color: {tags:"code_local",                             value: 0x98bc80ff }
      theme_color: {tags:"code_register",                          value: 0xb7afd5ff }
      theme_color: {tags:"code_keyword",                           value: 0xb38d4cff }
      theme_color: {tags:"code_delimiter_or_operator",             value: 0x767676ff }
      theme_color: {tags:"code_numeric",                           value: 0x98abb1ff }
      theme_color: {tags:"code_numeric_alt_digit_group",           value: 0x738287ff }
      theme_color: {tags:"code_string",                            value: 0x98abb1ff }
      theme_color: {tags:"code_meta",                              value: 0xd96759ff }
      theme_color: {tags:"code_comment",                           value: 0x717171ff }
      theme_color: {tags:"line_info_0",                            value: 0x4f3022ff }
      theme_color: {tags:"line_info_1",                            value: 0x4f3e15ff }
      theme_color: {tags:"line_info_2",                            value: 0x434e2aff }
      theme_color: {tags:"line_info_3",                            value: 0x36241fff }
      theme_color: {tags:"line_info_4",                            value: 0x4f3022ff }
      theme_color: {tags:"line_info_5",                            value: 0x4f3e15ff }
      theme_color: {tags:"line_info_6",                            value: 0x434e2aff }
      theme_color: {tags:"line_info_7",                            value: 0x36241fff }
      theme_color: {tags:"thread_0",                               value: 0xffcb7fff }
      theme_color: {tags:"thread_1",                               value: 0xb2ff65ff }
      theme_color: {tags:"thread_2",                               value: 0xff99e5ff }
      theme_color: {tags:"thread_3",                               value: 0x6598ffff }
      theme_color: {tags:"thread_4",                               value: 0x65ffcbff }
      theme_color: {tags:"thread_5",                               value: 0xff9819ff }
      theme_color: {tags:"thread_6",                               value: 0x9932ffff }
      theme_color: {tags:"thread_7",                               value: 0x65ff4cff }
      theme_color: {tags:"thread_unwound",                         value: 0xb2ccd8ff }
      theme_color: {tags:"thread_error",                           value: 0xb23219ff }
      theme_color: {tags:"breakpoint",                             value: 0xa72911ff }
      theme_color: {tags:"floating background",                    value: 0x1b1b1baf }
      theme_color: {tags:"floating background alt",                value: 0x0000005f }
      theme_color: {tags:"floating background fresh",              value: 0x31393d5f }
      theme_color: {tags:"floating border",                        value: 0xbfbfbf1f }
      theme_color: {tags:"floating scroll_bar background",         value: 0x3b3b3b5f }
      theme_color: {tags:"floating scroll_bar border",             value: 0x5f5f5f5f }
      theme_color: {tags:"menu_bar background",                    value: 0x2b3740ff }
      theme_color: {tags:"menu_bar border",                        value: 0x3e4c57ff }
      theme_color: {tags:"scroll_bar background",                  value: 0x2b2b2bff }
      theme_color: {tags:"scroll_bar border",                      value: 0x3f3f3fff }
      theme_color: {tags:"implicit background",                    value: 0x00000000 }
      theme_color: {tags:"implicit border",                        value: 0x00000000 }
      theme_color: {tags:"hollow background",                      value: 0x00000000 }
      theme_color: {tags:"hollow border",                          value: 0xffffff1f }
      theme_color: {tags:"tab background",                         value: 0x6f5135ff }
      theme_color: {tags:"tab border",                             value: 0x8a6e54ff }
      theme_color: {tags:"tab inactive background",                value: 0x2b3740ff }
      theme_color: {tags:"tab inactive border",                    value: 0x3e4c57ff }
      theme_color: {tags:"tab auto background",                    value: 0x693847ff }
      theme_color: {tags:"tab auto border",                        value: 0x9e6274ff }
      theme_color: {tags:"tab auto inactive background",           value: 0x2f2633ff }
      theme_color: {tags:"tab auto inactive border",               value: 0x685073ff }
      theme_color: {tags:"drop_site background",                   value: 0xffffff05 }
      theme_color: {tags:"drop_site border",                       value: 0xffffff0f }
    }
    ```
  }
  
  //- rjf: default light theme
  { DefaultLight     default_light    "Default (Light)",
    ```theme:
    {
      theme_color:{  tags: background  , value: 0xffffffff }
      theme_color:{  tags: "alt background"  , value: 0xf8f8f8ff }
      theme_color:{  tags: "pop background"  , value: 0xcbe4f2ff }
      theme_color:{  tags: "menu_bar pop background"  , value: 0x5aabd9ff }
      theme_color:{  tags: "fresh background"  , value: 0xeaddceff }
      theme_color:{  tags: "match background"  , value: 0xc1e9c4ff }
      theme_color:{  tags: border  , value: 0xcbcbcbff }
      theme_color:{  tags: text  , value: 0xff }
      theme_color:{  tags: "weak text"  , value: 0x727272ff }
      theme_color:{  tags: "good text"  , value: 0x217538ff }
      theme_color:{  tags: "neutral text"  , value: 0x1a5b7cff }
      theme_color:{  tags: "bad text"  , value: 0x972717ff }
      theme_color:{  tags: hover  , value: 0xff }
      theme_color:{  tags: "focus overlay"  , value: 0x67ff4b }
      theme_color:{  tags: "focus border"  , value: 0x67ffff }
      theme_color:{  tags: cursor  , value: 0xff }
      theme_color:{  tags: selection  , value: 0x283d5166 }
      theme_color:{  tags: "inactive background"  , value: 0x8 }
      theme_color:{  tags: drop_shadow  , value: 0xb }
      theme_color:{  tags: "good_pop background"  , value: 0x90c09aff }
      theme_color:{  tags: "good_pop border"  , value: 0x1e7231ff }
      theme_color:{  tags: "good_pop hover"  , value: 0xe3f5d3ff }
      theme_color:{  tags: "good_pop weak text"  , value: 0xe3f5d3ff }
      theme_color:{  tags: "good_pop text"  , value: 0xe3f5d3ff }
      theme_color:{  tags: "bad_pop background"  , value: 0xa93620ff }
      theme_color:{  tags: "bad_pop text"  , value: 0xffffffff }
      theme_color:{  tags: "bad_pop text weak"  , value: 0xffffffff }
      theme_color:{  tags: "menu_bar bad_pop background"  , value: 0xff2a00ff }
      theme_color:{  tags: "menu_bar bad_pop text"  , value: 0xffffffff }
      theme_color:{  tags: "bad_pop hover"  , value: 0xff825cff }
      theme_color:{  tags: code_default  , value: 0x80808ff }
      theme_color:{  tags: code_symbol  , value: 0x4ac3ff }
      theme_color:{  tags: code_type  , value: 0xf46200ff }
      theme_color:{  tags: code_local  , value: 0x317c00ff }
      theme_color:{  tags: code_register  , value: 0x9a00ffff }
      theme_color:{  tags: code_keyword  , value: 0xff0600ff }
      theme_color:{  tags: code_delimiter_or_operator  , value: 0x8a8a8aff }
      theme_color:{  tags: code_numeric  , value: 0x7d49ff }
      theme_color:{  tags: code_numeric_alt_digit_group  , value: 0xb56aff }
      theme_color:{  tags: code_string  , value: 0x63549fff }
      theme_color:{  tags: code_meta  , value: 0xd96759ff }
      theme_color:{  tags: code_comment  , value: 0x717171ff }
      theme_color:{  tags: line_info_0  , value: 0xe6d5cdff }
      theme_color:{  tags: line_info_1  , value: 0xdbcfb2ff }
      theme_color:{  tags: line_info_2  , value: 0xddeac1ff }
      theme_color:{  tags: line_info_3  , value: 0xddc4bdff }
      theme_color:{  tags: line_info_4  , value: 0xba917eff }
      theme_color:{  tags: thread_0  , value: 0xffa700ff }
      theme_color:{  tags: thread_1  , value: 0xb41fff }
      theme_color:{  tags: thread_2  , value: 0xff99e5ff }
      theme_color:{  tags: thread_3  , value: 0x6598ffff }
      theme_color:{  tags: thread_4  , value: 0x65ffcbff }
      theme_color:{  tags: thread_5  , value: 0xff9819ff }
      theme_color:{  tags: thread_6  , value: 0x9932ffff }
      theme_color:{  tags: thread_7  , value: 0x65ff4cff }
      theme_color:{  tags: thread_unwound  , value: 0xb2ccd8ff }
      theme_color:{  tags: thread_error  , value: 0xb23219ff }
      theme_color:{  tags: breakpoint  , value: 0xff2800ff }
      theme_color:{  tags: "floating background"  , value: 0xffffffc7 }
      theme_color:{  tags: "floating background alt"  , value: 0x23 }
      theme_color:{  tags: "floating background fresh"  , value: 0xeaddceff }
      theme_color:{  tags: "floating border"  , value: 0x88888884 }
      theme_color:{  tags: "scroll_bar background"  , value: 0xe9e9e9ff }
      theme_color:{  tags: "scroll_bar border"  , value: 0x5f5f5f5f }
      theme_color:{  tags: "floating scroll_bar background"  , value: 0xe9e9e9ff }
      theme_color:{  tags: "floating scroll_bar border"  , value: 0x5f5f5f5f }
      theme_color:{  tags: "menu_bar background"  , value: 0x2b6b9aff }
      theme_color:{  tags: "menu_bar border"  , value: 0x4d }
      theme_color:{  tags: "menu_bar text"  , value: 0xffffffff }
      theme_color:{  tags: "menu_bar text weak"  , value: 0xffffffff }
      theme_color:{  tags: "good menu_bar text"  , value: 0x70db8dff }
      theme_color:{  tags: "bad menu_bar text"  , value: 0xffa79bff }
      theme_color:{  tags: "neutral menu_bar text"  , value: 0xc4dbe7ff }
      theme_color:{  tags: "implicit background"  , value: 0x00000000 }
      theme_color:{  tags: "implicit border"  , value: 0x00000000 }
      theme_color:{  tags: "hollow background"  , value: 0x00000000 }
      theme_color:{  tags: "hollow border"  , value: 0xffffff1f }
      theme_color:{  tags: "tab text"  , value: 0xffffffff }
      theme_color:{  tags: "tab text weak"  , value: 0xffffffff }
      theme_color:{  tags: "tab background"  , value: 0xb67e48ff }
      theme_color:{  tags: "tab border"  , value: 0x875b31ff }
      theme_color:{  tags: "tab inactive background"  , value: 0xcacacaff }
      theme_color:{  tags: "tab inactive border"  , value: 0xb5b5b5ff }
      theme_color:{  tags: "tab auto background"  , value: 0xc41c69ff }
      theme_color:{  tags: "tab auto border"  , value: 0x981039ff }
      theme_color:{  tags: "tab auto inactive background"  , value: 0x9b88a3ff }
      theme_color:{  tags: "tab auto inactive border"  , value: 0x373737ff }
      theme_color:{  tags: "drop_site background"  , value: 0xffffff05 }
      theme_color:{  tags: "drop_site border"  , value: 0xffffff0f }
    }
    ```
  }
  
  //- rjf: vs dark theme
  {
    VSDark vs_dark "VS (Dark)",
    ```theme:
    {
      theme_color:{  tags: background  , value: 0x1f1f1fff }
      theme_color:{  tags: "alt background"  , value: 0x222222ff }
      theme_color:{  tags: "pop background"  , value: 0x383167ff }
      theme_color:{  tags: "fresh background"  , value: 0x31393dff }
      theme_color:{  tags: "match background"  , value: 0x31393dff }
      theme_color:{  tags: border  , value: 0x404040ff }
      theme_color:{  tags: text  , value: 0xe5e5e5ff }
      theme_color:{  tags: "weak text"  , value: 0xa4a4a4ff }
      theme_color:{  tags: "good text"  , value: 0x32a852ff }
      theme_color:{  tags: "neutral text"  , value: 0x3a90bbff }
      theme_color:{  tags: "bad text"  , value: 0xcf5242ff }
      theme_color:{  tags: hover  , value: 0xffffffff }
      theme_color:{  tags: "focus overlay"  , value: 0x7160e81e }
      theme_color:{  tags: "focus border"  , value: 0x7160e8ff }
      theme_color:{  tags: cursor  , value: 0x8aff00ff }
      theme_color:{  tags: selection  , value: 0x99ccff0f }
      theme_color:{  tags: "inactive background"  , value: 0x0000002f }
      theme_color:{  tags: drop_shadow  , value: 0x0000007f }
      theme_color:{  tags: "good_pop background"  , value: 0x2c5b36ff }
      theme_color:{  tags: "good_pop border"  , value: 0x568761ff }
      theme_color:{  tags: "good_pop hover"  , value: 0xe3f5d3ff }
      theme_color:{  tags: "good_pop weak text"  , value: 0xe3f5d3ff }
      theme_color:{  tags: "bad_pop background"  , value: 0x803425ff }
      theme_color:{  tags: "bad_pop hover"  , value: 0xff825cff }
      theme_color:{  tags: code_default  , value: 0xe0e0e0ff }
      theme_color:{  tags: code_symbol  , value: 0xdcdcaaff }
      theme_color:{  tags: code_type  , value: 0x4ec9b0ff }
      theme_color:{  tags: code_local  , value: 0x9cdcfeff }
      theme_color:{  tags: code_register  , value: 0xb7afd5ff }
      theme_color:{  tags: code_keyword  , value: 0x569cd6ff }
      theme_color:{  tags: code_delimiter_or_operator  , value: 0x767676ff }
      theme_color:{  tags: code_numeric  , value: 0xb5cea8ff }
      theme_color:{  tags: code_numeric_alt_digit_group  , value: 0x7c986dff }
      theme_color:{  tags: code_string  , value: 0xd69d85ff }
      theme_color:{  tags: code_meta  , value: 0x9b9b9bff }
      theme_color:{  tags: code_comment  , value: 0x51a644ff }
      theme_color:{  tags: line_info_0  , value: 0x4f3022ff }
      theme_color:{  tags: line_info_1  , value: 0x4f3e15ff }
      theme_color:{  tags: line_info_2  , value: 0x434e2aff }
      theme_color:{  tags: line_info_3  , value: 0x36241fff }
      theme_color:{  tags: line_info_4  , value: 0x4f3022ff }
      theme_color:{  tags: line_info_5  , value: 0x4f3e15ff }
      theme_color:{  tags: line_info_6  , value: 0x434e2aff }
      theme_color:{  tags: line_info_7  , value: 0x36241fff }
      theme_color:{  tags: thread_0  , value: 0xffdc48ff }
      theme_color:{  tags: thread_1  , value: 0xb2ff65ff }
      theme_color:{  tags: thread_2  , value: 0xff99e5ff }
      theme_color:{  tags: thread_3  , value: 0x6598ffff }
      theme_color:{  tags: thread_4  , value: 0x65ffcbff }
      theme_color:{  tags: thread_5  , value: 0xff9819ff }
      theme_color:{  tags: thread_6  , value: 0x9932ffff }
      theme_color:{  tags: thread_7  , value: 0x65ff4cff }
      theme_color:{  tags: thread_unwound  , value: 0xb2ccd8ff }
      theme_color:{  tags: thread_error  , value: 0xb23219ff }
      theme_color:{  tags: breakpoint  , value: 0xa72911ff }
      theme_color:{  tags: "floating background"  , value: 0x1b1b1baf }
      theme_color:{  tags: "floating background alt"  , value: 0x0000005f }
      theme_color:{  tags: "floating background fresh"  , value: 0x31393d5f }
      theme_color:{  tags: "floating border"  , value: 0xbfbfbf1f }
      theme_color:{  tags: "floating scroll_bar background"  , value: 0x3b3b3b5f }
      theme_color:{  tags: "floating scroll_bar border"  , value: 0x5f5f5f5f }
      theme_color:{  tags: "scroll_bar background"  , value: 0x2b2b2bff }
      theme_color:{  tags: "scroll_bar border"  , value: 0x3f3f3fff }
      theme_color:{  tags: "implicit background"  , value: 0x00000000 }
      theme_color:{  tags: "implicit border"  , value: 0x00000000 }
      theme_color:{  tags: "hollow background"  , value: 0x00000000 }
      theme_color:{  tags: "hollow border"  , value: 0xffffff1f }
      theme_color:{  tags: "tab background"  , value: 0x333333ff }
      theme_color:{  tags: "tab border"  , value: 0x7160e8ff }
      theme_color:{  tags: "tab inactive background"  , value: 0x171717ff }
      theme_color:{  tags: "tab inactive border"  , value: 0x3e4c57ff }
      theme_color:{  tags: "tab auto background"  , value: 0x3f386dff }
      theme_color:{  tags: "tab auto border"  , value: 0x7160e8ff }
      theme_color:{  tags: "tab auto inactive background"  , value: 0x2f2633ff }
      theme_color:{  tags: "tab auto inactive border"  , value: 0x685073ff }
      theme_color:{  tags: "drop_site background"  , value: 0xffffff05 }
      theme_color:{  tags: "drop_site border"  , value: 0xffffff0f }
    }
    ```
  }
  
  //- rjf: to-do
  { VSLight          vs_light         "VS (Light)",
    ```theme:
    {
      theme_color:{tags: background, value: 0xffffffff}
      theme_color:{tags: "alt background", value: 0xefefefff}
      theme_color:{tags: "pop background", value: 0xe3eaf2ff}
      theme_color:{tags: "fresh background", value: 0xeccbbeff}
      theme_color:{tags: "match background", value: 0xedcbf9ff}
      theme_color:{tags: border, value: 0xe7e7e7ff}
      theme_color:{tags: text, value: 0xff}
      theme_color:{tags: "weak text", value: 0x353535ff}
      theme_color:{tags: "good text", value: 0x32a852ff}
      theme_color:{tags: "neutral text", value: 0x3a90bbff}
      theme_color:{tags: "bad text", value: 0xcf5242ff}
      theme_color:{tags: hover, value: 0xa7ffff}
      theme_color:{tags: "focus overlay", value: 0x8eff3f}
      theme_color:{tags: "focus border", value: 0x8effff}
      theme_color:{tags: cursor, value: 0xff}
      theme_color:{tags: selection, value: 0x56aaff77}
      theme_color:{tags: "inactive background", value: 0x17}
      theme_color:{tags: drop_shadow, value: 0xe7b27}
      theme_color:{tags: "good_pop background", value: 0x21a43dff}
      theme_color:{tags: "good_pop border", value: 0x21a43dff}
      theme_color:{tags: "good_pop hover", value: 0xe3f5d3ff}
      theme_color:{tags: "good_pop weak text", value: 0xe3f5d3ff}
      theme_color:{tags: "good_pop text", value: 0xe3f5d3ff}
      theme_color:{tags: "bad_pop background", value: 0xcb3f23ff}
      theme_color:{tags: "bad_pop text", value: 0xffcdc4ff}
      theme_color:{tags: "bad_pop text weak", value: 0xffcdc4ff}
      theme_color:{tags: "bad_pop hover", value: 0xff825cff}
      theme_color:{tags: code_default, value: 0x000000ff}
      theme_color:{tags: code_symbol, value: 0x74531fff}
      theme_color:{tags: code_type, value: 0x2b91afff}
      theme_color:{tags: code_local, value: 0x1f377fff}
      theme_color:{tags: code_register, value: 0x8a1bffff}
      theme_color:{tags: code_keyword, value: 0x0000ffff}
      theme_color:{tags: code_delimiter_or_operator, value: 0x767676ff}
      theme_color:{tags: code_numeric, value: 0xff}
      theme_color:{tags: code_numeric_alt_digit_group, value: 0x1d1d1dff}
      theme_color:{tags: code_string, value: 0xa61515ff}
      theme_color:{tags: code_meta, value: 0x808080ff}
      theme_color:{tags: code_comment, value: 0x008000ff}
      theme_color:{tags: line_info_0, value: 0xb5d9c8ff}
      theme_color:{tags: line_info_1, value: 0xa9c1d0ff}
      theme_color:{tags: line_info_2, value: 0x99abc5ff}
      theme_color:{tags: line_info_3, value: 0xc6bcd5ff}
      theme_color:{tags: thread_0, value: 0xffb141ff}
      theme_color:{tags: thread_1, value: 0x66c407ff}
      theme_color:{tags: thread_unwound, value: 0x67b3d7ff}
      theme_color:{tags: thread_error, value: 0xff2900ff}
      theme_color:{tags: breakpoint, value: 0xff2800ff}
      theme_color:{tags: "floating background", value: 0xffffffff}
      theme_color:{tags: "floating background alt", value: 0x11}
      theme_color:{tags: "floating background fresh", value: 0xa0c2d318}
      theme_color:{tags: "floating border", value: 0x50}
      theme_color:{tags: "floating scroll_bar background", value: 0x3b3b3b5f}
      theme_color:{tags: "floating scroll_bar border", value: 0x5f5f5f5f}
      theme_color:{tags: "menu_bar background", value: 0xccd5f0ff}
      theme_color:{tags: "menu_bar border", value: 0xbabdc3ff}
      theme_color:{tags: "scroll_bar background", value: 0xe4e4e4ff}
      theme_color:{tags: "implicit background", value: 0x00000000}
      theme_color:{tags: "implicit border", value: 0x00000000}
      theme_color:{tags: "hollow background", value: 0x00000000}
      theme_color:{tags: "hollow border", value: 0xffffff1f}
      theme_color:{tags: "tab background", value: 0xf5cc84ff}
      theme_color:{tags: "tab border", value: 0xae7718ff}
      theme_color:{tags: "tab inactive background", value: 0x3b4f81ff}
      theme_color:{tags: "tab inactive text", value: 0xffffffff}
      theme_color:{tags: "tab inactive border", value: 0x3b4f81ff}
      theme_color:{tags: "tab auto background", value: 0xe99595ff}
      theme_color:{tags: "tab auto border", value: 0xff6262ff}
      theme_color:{tags: "tab auto inactive background", value: 0xac6060ff}
      theme_color:{tags: "tab auto inactive border", value: 0xff6262ff}
      theme_color:{tags: "drop_site background", value: 0xffffff05}
      theme_color:{tags: "drop_site border", value: 0xa7ffff}
    }
    ```
  }
  
  //- rjf: solarized (dark) theme
  { SolarizedDark    solarized_dark   "Solarized (Dark)",
    ```theme:
    {
      theme_color:{tags: background, value: 0x002a35ff}
      theme_color:{tags: "alt background", value: 0x053542ff}
      theme_color:{tags: "pop background", value: 0x355b6eff}
      theme_color:{tags: "fresh background", value: 0x31393dff}
      theme_color:{tags: "match background", value: 0x31393dff}
      theme_color:{tags: border, value: 0x65166ff}
      theme_color:{tags: text, value: 0xeee8d5ff}
      theme_color:{tags: "weak text", value: 0x93a1a1ff}
      theme_color:{tags: "good text", value: 0x32a852ff}
      theme_color:{tags: "neutral text", value: 0x3a90bbff}
      theme_color:{tags: "bad text", value: 0xcf5242ff}
      theme_color:{tags: hover, value: 0xca4b16ff}
      theme_color:{tags: "focus overlay", value: 0xca4b151f}
      theme_color:{tags: "focus border", value: 0xca4b16ff}
      theme_color:{tags: cursor, value: 0xca4b16ff}
      theme_color:{tags: selection, value: 0x99ccff0f}
      theme_color:{tags: "inactive background", value: 0x0000002f}
      theme_color:{tags: drop_shadow, value: 0x0000007f}
      theme_color:{tags: "good_pop background", value: 0x5f8700ff}
      theme_color:{tags: "good_pop border", value: 0x5f8700ff}
      theme_color:{tags: "bad_pop background", value: 0x810000ff}
      theme_color:{tags: code_default, value: 0x839496ff}
      theme_color:{tags: code_symbol, value: 0xb3880eff}
      theme_color:{tags: code_type, value: 0xb3880eff}
      theme_color:{tags: code_local, value: 0xeee8d5ff}
      theme_color:{tags: code_register, value: 0xeee8d5ff}
      theme_color:{tags: code_keyword, value: 0x849804ff}
      theme_color:{tags: code_delimiter_or_operator, value: 0x839496ff}
      theme_color:{tags: code_numeric, value: 0x2aa198ff}
      theme_color:{tags: code_numeric_alt_digit_group, value: 0x19766bff}
      theme_color:{tags: code_string, value: 0x2aa198ff}
      theme_color:{tags: code_meta, value: 0xca4b16ff}
      theme_color:{tags: code_comment, value: 0x586e75ff}
      theme_color:{tags: line_info_0, value: 0x4f3022ff}
      theme_color:{tags: line_info_1, value: 0x4f3e15ff}
      theme_color:{tags: line_info_2, value: 0x434e2aff}
      theme_color:{tags: line_info_3, value: 0x36241fff}
      theme_color:{tags: thread_0, value: 0xffcb7fff}
      theme_color:{tags: thread_1, value: 0xb2ff65ff}
      theme_color:{tags: thread_unwound, value: 0xb2ccd8ff}
      theme_color:{tags: thread_error, value: 0xb23219ff}
      theme_color:{tags: breakpoint, value: 0xa72911ff}
      theme_color:{tags: "floating background", value: 0x2a3574}
      theme_color:{tags: "floating background alt", value: 0x4f}
      theme_color:{tags: "floating background fresh", value: 0x31393d5f}
      theme_color:{tags: "floating scroll_bar background", value: 0x53542ff}
      theme_color:{tags: "scroll_bar background", value: 0x53542ff}
      theme_color:{tags: "implicit background", value: 0x00000000}
      theme_color:{tags: "implicit border", value: 0x00000000}
      theme_color:{tags: "hollow background", value: 0x00000000}
      theme_color:{tags: "hollow border", value: 0xffffff1f}
      theme_color:{tags: "tab background", value: 0x586e75ff}
      theme_color:{tags: "tab border", value: 0x90abb3ff}
      theme_color:{tags: "tab inactive background", value: 0x0}
      theme_color:{tags: "tab inactive border", value: 0x33494fff}
      theme_color:{tags: "tab auto background", value: 0x565ed2ff}
      theme_color:{tags: "tab auto border", value: 0xa2a6dfff}
      theme_color:{tags: "tab auto inactive background", value: 0}
      theme_color:{tags: "tab auto inactive border", value: 0x595fbcff}
      theme_color:{tags: "drop_site background", value: 0xffffff05}
      theme_color:{tags: "drop_site border", value: 0xffffff0f}
    }
    ```
  }
  
  //- rjf: solarized light
  { SolarizedLight   solarized_light  "Solarized (Light)",
    ```theme:
    {
      theme_color:{tags: background, value: 0xfdf6e3ff}
      theme_color:{tags: "alt background", value: 0xeee8d5ff}
      theme_color:{tags: "pop background", value: 0x29a19890}
      theme_color:{tags: "fresh background", value: 0xf7d38dff}
      theme_color:{tags: "match background", value: 0xdcddddff}
      theme_color:{tags: border, value: 0xd1ccbdff}
      theme_color:{tags: "weak text", value: 0x93a1a1ff}
      theme_color:{tags: text, value: 0x657b83ff}
      theme_color:{tags: "good text", value: 0x32a852ff}
      theme_color:{tags: "neutral text", value: 0x3a90bbff}
      theme_color:{tags: "bad text", value: 0xcf5242ff}
      theme_color:{tags: hover, value: 0xca4b16ff}
      theme_color:{tags: "focus overlay", value: 0xca4b1454}
      theme_color:{tags: "focus border", value: 0xca4b16ff}
      theme_color:{tags: cursor, value: 0xca4b16ff}
      theme_color:{tags: selection, value: 0x8594a264}
      theme_color:{tags: "inactive background", value: 0x14}
      theme_color:{tags: drop_shadow, value: 0x3a}
      theme_color:{tags: "good_pop background", value: 0xd1e99aff}
      theme_color:{tags: "good_pop border", value: 0xd1e99aff}
      theme_color:{tags: "bad_pop background", value: 0xd26c6cff}
      theme_color:{tags: "bad_pop border", value: 0xd26c6cff}
      theme_color:{tags: "bad_pop weak text", value: 0xffffffff}
      theme_color:{tags: "bad_pop text", value: 0xffffffff}
      theme_color:{tags: code_default, value: 0x839496ff}
      theme_color:{tags: code_symbol, value: 0xb3880eff}
      theme_color:{tags: code_type, value: 0xb3880eff}
      theme_color:{tags: code_local, value: 0x657b83ff}
      theme_color:{tags: code_register, value: 0x947298ff}
      theme_color:{tags: code_keyword, value: 0x849804ff}
      theme_color:{tags: code_delimiter_or_operator, value: 0x839496ff}
      theme_color:{tags: code_numeric, value: 0x2aa198ff}
      theme_color:{tags: code_numeric_alt_digit_group, value: 0x19766bff}
      theme_color:{tags: code_string, value: 0x2aa198ff}
      theme_color:{tags: code_meta, value: 0xca4b16ff}
      theme_color:{tags: code_comment, value: 0x586e75ff}
      theme_color:{tags: line_info_0, value: 0xeee1dbff}
      theme_color:{tags: line_info_1, value: 0xe5d5b1ff}
      theme_color:{tags: line_info_2, value: 0xd9e8b6ff}
      theme_color:{tags: line_info_3, value: 0xf5d5ccff}
      theme_color:{tags: thread_0, value: 0xffa100ff}
      theme_color:{tags: thread_1, value: 0x6edd00ff}
      theme_color:{tags: thread_unwound, value: 0x708f9eff}
      theme_color:{tags: thread_error, value: 0xff5231ff}
      theme_color:{tags: breakpoint, value: 0xff411dff}
      theme_color:{tags: "floating background", value: 0xfdf6e3b1}
      theme_color:{tags: "floating background alt", value: 0x22}
      theme_color:{tags: "floating background fresh", value: 0xf7d38dff}
      theme_color:{tags: "scroll_bar background", value: 0xeee6d0ff}
      theme_color:{tags: "scroll_bar floating background", value: 0xd5ccb5ff}
      theme_color:{tags: "implicit background", value: 0x00000000}
      theme_color:{tags: "implicit border", value: 0x00000000}
      theme_color:{tags: "hollow background", value: 0x00000000}
      theme_color:{tags: "hollow border", value: 0xffffff1f}
      theme_color:{tags: "tab background", value: 0xfdf6e3ff}
      theme_color:{tags: "tab inactive background", value: 0xe0d6bbff}
      theme_color:{tags: "tab auto background", value: 0xf5cfe1ff}
      theme_color:{tags: "tab auto border", value: 0xa2a6dfff}
      theme_color:{tags: "tab auto inactive background", value: 0xc8a5b5ff}
      theme_color:{tags: "tab auto inactive border", value: 0x595fbcff}
      theme_color:{tags: "drop_site background", value: 0x29a19890}
      theme_color:{tags: "drop_site border", value: 0x81ddd690}
    }
    ```
  }
  
  //- rjf: handmade hero theme
  { HandmadeHero     handmade_hero    "Handmade Hero",
    ```theme:
    {
      theme_color:{tags: background, value: 0x0c0c0cff}
      theme_color:{tags: "alt background", value: 0x161616ff}
      theme_color:{tags: "pop background", value: 0x355b6eff}
      theme_color:{tags: "fresh background", value: 0x31393dff}
      theme_color:{tags: "match background", value: 0x31393dff}
      theme_color:{tags: border, value: 0x404040ff}
      theme_color:{tags: text, value: 0xcac1b6ff}
      theme_color:{tags: "weak text", value: 0xa08563ff}
      theme_color:{tags: "good text", value: 0x32a852ff}
      theme_color:{tags: "neutral text", value: 0x3a90bbff}
      theme_color:{tags: "bad text", value: 0xcf5242ff}
      theme_color:{tags: hover, value: 0xffffffff}
      theme_color:{tags: "focus overlay", value: 0x7485971e}
      theme_color:{tags: "focus border", value: 0x5e6b79ff}
      theme_color:{tags: cursor, value: 0x00ee00ff}
      theme_color:{tags: selection, value: 0x99ccff0f}
      theme_color:{tags: "inactive background", value: 0x0000002f}
      theme_color:{tags: drop_shadow, value: 0x0000007f}
      theme_color:{tags: "good_pop background", value: 0x2c5b36ff}
      theme_color:{tags: "good_pop border", value: 0x568761ff}
      theme_color:{tags: "good_pop hover", value: 0xe3f5d3ff}
      theme_color:{tags: "good_pop weak text", value: 0xe3f5d3ff}
      theme_color:{tags: "bad_pop background", value: 0x803425ff}
      theme_color:{tags: "bad_pop hover", value: 0xff825cff}
      theme_color:{tags: code_default, value: 0xa08563ff}
      theme_color:{tags: code_symbol, value: 0xcc5735ff}
      theme_color:{tags: code_type, value: 0xd8a51cff}
      theme_color:{tags: code_local, value: 0xd6b995ff}
      theme_color:{tags: code_register, value: 0xc04047ff}
      theme_color:{tags: code_keyword, value: 0xac7b0aff}
      theme_color:{tags: code_delimiter_or_operator, value: 0x907553ff}
      theme_color:{tags: code_numeric, value: 0x6b8e23ff}
      theme_color:{tags: code_numeric_alt_digit_group, value: 0x4f681cff}
      theme_color:{tags: code_string, value: 0x6b8e23ff}
      theme_color:{tags: code_meta, value: 0xdab98fff}
      theme_color:{tags: code_comment, value: 0x686868ff}
      theme_color:{tags: line_info_0, value: 0x4f3022ff}
      theme_color:{tags: line_info_1, value: 0x4f3e15ff}
      theme_color:{tags: line_info_2, value: 0x434e2aff}
      theme_color:{tags: line_info_3, value: 0x36241fff}
      theme_color:{tags: thread_0, value: 0xffcb7fff}
      theme_color:{tags: thread_1, value: 0xb2ff65ff}
      theme_color:{tags: thread_unwound, value: 0xb2ccd8ff}
      theme_color:{tags: thread_error, value: 0xb23219ff}
      theme_color:{tags: breakpoint, value: 0xa72911ff}
      theme_color:{tags: "floating background", value: 0x18181980}
      theme_color:{tags: "floating background alt", value: 0x0000005f}
      theme_color:{tags: "floating background fresh", value: 0x31393d5f}
      theme_color:{tags: "floating border", value: 0xbfbfbf1f}
      theme_color:{tags: "floating scroll_bar background", value: 0x3b3b3b5f}
      theme_color:{tags: "floating scroll_bar border", value: 0x5f5f5f5f}
      theme_color:{tags: "menu_bar background", value: 0x1f1f27ff}
      theme_color:{tags: "menu_bar border", value: 0x3d3d47ff}
      theme_color:{tags: "scroll_bar background", value: 0x2b2b2bff}
      theme_color:{tags: "scroll_bar border", value: 0x3f3f3fff}
      theme_color:{tags: "implicit background", value: 0x00000000}
      theme_color:{tags: "implicit border", value: 0x00000000}
      theme_color:{tags: "hollow background", value: 0x00000000}
      theme_color:{tags: "hollow border", value: 0xffffff1f}
      theme_color:{tags: "tab background", value: 0x1f1f27ff}
      theme_color:{tags: "tab border", value: 0x3d3d47ff}
      theme_color:{tags: "tab text", value: 0xca9301ff}
      theme_color:{tags: "tab text weak", value: 0x8c690eff}
      theme_color:{tags: "tab inactive background", value: 0x171718ff}
      theme_color:{tags: "tab inactive border", value: 0x1f1f27ff}
      theme_color:{tags: "tab auto background", value: 0x243b38ff}
      theme_color:{tags: "tab auto border", value: 0x478980ff}
      theme_color:{tags: "tab auto inactive background", value: 0x102623ff}
      theme_color:{tags: "tab auto inactive border", value: 0x1e5850ff}
      theme_color:{tags: "drop_site background", value: 0xffffff05}
      theme_color:{tags: "drop_site border", value: 0xffffff0f}
    }
    ```
  }
  
  //- rjf: naysayer
  { Naysayer        naysayer        "Naysayer",
    ```theme:
    {
      theme_color:{tags: background, value: 0x042327ff}
      theme_color:{tags: "alt background", value: 0x11b1fff}
      theme_color:{tags: "pop background", value: 0x355b6eff}
      theme_color:{tags: "pop text", value: 0xbad7e6ff}
      theme_color:{tags: "fresh background", value: 0x31393dff}
      theme_color:{tags: "match background", value: 0x31393dff}
      theme_color:{tags: border, value: 0x334d50ff}
      theme_color:{tags: text, value: 0xdad3beff}
      theme_color:{tags: "weak text", value: 0xb0a688ff}
      theme_color:{tags: "good text", value: 0x32a852ff}
      theme_color:{tags: "neutral text", value: 0x3a90bbff}
      theme_color:{tags: "bad text", value: 0xcf5242ff}
      theme_color:{tags: "menu_bar good text", value: 0x2a8242ff}
      theme_color:{tags: "menu_bar neutral text", value: 0x5681ff}
      theme_color:{tags: "menu_bar bad text", value: 0xa21200ff}
      theme_color:{tags: "menu_bar weak text", value: 0x313131ff}
      theme_color:{tags: "menu_bar bad_pop text weak", value: 0xffffffff}
      theme_color:{tags: hover, value: 0xffffffff}
      theme_color:{tags: "focus overlay", value: 0x86e08e20}
      theme_color:{tags: "focus border", value: 0x86e08fff}
      theme_color:{tags: cursor, value: 0x86e08fff}
      theme_color:{tags: selection, value: 0x99ccff0f}
      theme_color:{tags: "inactive background", value: 0x0000002f}
      theme_color:{tags: drop_shadow, value: 0x0000007f}
      theme_color:{tags: "good_pop background", value: 0x2c5b36ff}
      theme_color:{tags: "good_pop border", value: 0x568761ff}
      theme_color:{tags: "good_pop hover", value: 0xe3f5d3ff}
      theme_color:{tags: "good_pop weak text", value: 0xe3f5d3ff}
      theme_color:{tags: "bad_pop background", value: 0x803425ff}
      theme_color:{tags: "bad_pop hover", value: 0xff825cff}
      theme_color:{tags: code_default, value: 0xbdb395ff}
      theme_color:{tags: code_symbol, value: 0xcbe0f5ff}
      theme_color:{tags: code_type, value: 0xcbe0f5ff}
      theme_color:{tags: code_local, value: 0xd9cfb3ff}
      theme_color:{tags: code_register, value: 0xb7afd5ff}
      theme_color:{tags: code_keyword, value: 0x9de3c0ff}
      theme_color:{tags: code_delimiter_or_operator, value: 0x767676ff}
      theme_color:{tags: code_numeric, value: 0x2ca198ff}
      theme_color:{tags: code_numeric_alt_digit_group, value: 0x217770ff}
      theme_color:{tags: code_string, value: 0x2ca198ff}
      theme_color:{tags: code_meta, value: 0xB0FFB0ff}
      theme_color:{tags: code_comment, value: 0x31b72cff}
      theme_color:{tags: line_info_0, value: 0x4f3022ff}
      theme_color:{tags: line_info_1, value: 0x4f3e15ff}
      theme_color:{tags: line_info_2, value: 0x434e2aff}
      theme_color:{tags: line_info_3, value: 0x36241fff}
      theme_color:{tags: thread_0, value: 0xffcb7fff}
      theme_color:{tags: thread_1, value: 0xb2ff65ff}
      theme_color:{tags: thread_unwound, value: 0xb2ccd8ff}
      theme_color:{tags: thread_error, value: 0xb23219ff}
      theme_color:{tags: breakpoint, value: 0xa72911ff}
      theme_color:{tags: "floating background", value: 0x3232792}
      theme_color:{tags: "floating background alt", value: 0x0000005f}
      theme_color:{tags: "floating background fresh", value: 0x31393d5f}
      theme_color:{tags: "floating scroll_bar background", value: 0xe363bff}
      theme_color:{tags: "menu_bar background", value: 0xb59e7aff}
      theme_color:{tags: "menu_bar text", value: 0xff}
      theme_color:{tags: "menu_bar border", value: 0x947d5aff}
      theme_color:{tags: "scroll_bar background", value: 0xe363bff}
      theme_color:{tags: "implicit background", value: 0x00000000}
      theme_color:{tags: "implicit border", value: 0x00000000}
      theme_color:{tags: "hollow background", value: 0x00000000}
      theme_color:{tags: "hollow border", value: 0xffffff1f}
      theme_color:{tags: "tab background", value: 0x13533aff}
      theme_color:{tags: "tab border", value: 0x6c9182ff}
      theme_color:{tags: "tab inactive background", value: 0x0}
      theme_color:{tags: "tab inactive border", value: 0x947d5a6c}
      theme_color:{tags: "tab auto background", value: 0x5b3939ff}
      theme_color:{tags: "tab auto border", value: 0x875c5cff}
      theme_color:{tags: "tab auto inactive background", value: 0x251b1bff}
      theme_color:{tags: "tab auto inactive border", value: 0x563d3dff}
      theme_color:{tags: "drop_site background", value: 0xffffff05}
      theme_color:{tags: "drop_site border", value: 0xffffff0f}
    }
    ```
  }
  
  //- rjf: 4coder theme
  { FourCoder        four_coder       "4coder",
    ```theme:
    {
      theme_color:{tags: background,value: 0xc0c0cff}
      theme_color:{tags: "alt background", value: 0x131313ff}
      theme_color:{tags: "pop background", value: 0x4c00ff}
      theme_color:{tags: "fresh background", value: 0x4c00ff}
      theme_color:{tags: "match background", value: 0x4c00ff}
      theme_color:{tags: border, value: 0x272727ff}
      theme_color:{tags: text, value: 0x90b080ff}
      theme_color:{tags: "weak text", value: 0x6b845fff}
      theme_color:{tags: "menu_bar background", value: 0x888888ff}
      theme_color:{tags: "menu_bar text", value: 0x20202ff}
      theme_color:{tags: "menu_bar text weak", value: 0x525252ff}
      theme_color:{tags: "good text", value: 0x32a852ff}
      theme_color:{tags: "neutral text", value: 0x3a90bbff}
      theme_color:{tags: "bad text", value: 0xcf5242ff}
      theme_color:{tags: hover, value: 0xee00ff}
      theme_color:{tags: "focus overlay", value: 0xee0012}
      theme_color:{tags: "focus border", value: 0x00ee00ff}
      theme_color:{tags: cursor, value: 0x00ee00ff}
      theme_color:{tags: selection, value: 0x99ccff0f}
      theme_color:{tags: "inactive background", value: 0x0000002f}
      theme_color:{tags: drop_shadow, value: 0x0000007f}
      theme_color:{tags: "good_pop background", value: 0x4900ff}
      theme_color:{tags: "good_pop border", value: 0x4900ff}
      theme_color:{tags: "bad_pop background", value: 0x430b00ff}
      theme_color:{tags: code_default, value: 0x90b080ff}
      theme_color:{tags: code_symbol, value: 0xbfd9b2ff}
      theme_color:{tags: code_type, value: 0xbfd9b2ff}
      theme_color:{tags: code_local, value: 0xbfd9b2ff}
      theme_color:{tags: code_register, value: 0xb84cffff}
      theme_color:{tags: code_keyword, value: 0xd08f1fff}
      theme_color:{tags: code_delimiter_or_operator, value: 0x90b080ff}
      theme_color:{tags: code_numeric, value: 0x50ff2fff}
      theme_color:{tags: code_numeric_alt_digit_group, value: 0x30af18ff}
      theme_color:{tags: code_string, value: 0x50ff2fff}
      theme_color:{tags: code_meta, value: 0x90b080ff}
      theme_color:{tags: code_comment, value: 0x1f90f0ff}
      theme_color:{tags: line_info_0, value: 0xa253dff}
      theme_color:{tags: line_info_1, value: 0x9103dff}
      theme_color:{tags: line_info_2, value: 0x1e083dff}
      theme_color:{tags: line_info_3, value: 0x1e083dff}
      theme_color:{tags: thread_0, value: 0xd08f1fff}
      theme_color:{tags: thread_1, value: 0x1ea5d0ff}
      theme_color:{tags: thread_unwound, value: 0xb2ccd8ff}
      theme_color:{tags: thread_error, value: 0xb23219ff}
      theme_color:{tags: breakpoint, value: 0xa72911ff}
      theme_color:{tags: "scroll_bar background", value: 0x1d1d1dff}
      theme_color:{tags: "implicit background", value: 0x00000000}
      theme_color:{tags: "implicit border", value: 0x00000000}
      theme_color:{tags: "hollow background", value: 0x00000000}
      theme_color:{tags: "hollow border", value: 0xffffff1f}
      theme_color:{tags: "tab background", value: 0x15490cff}
      theme_color:{tags: "tab border", value: 0x15490cff}
      theme_color:{tags: "tab text", value: 0x90b080ff}
      theme_color:{tags: "tab text weak", value: 0x90b080ff}
      theme_color:{tags: "tab inactive background", value: 0x21321eff}
      theme_color:{tags: "tab inactive border", value: 0x21321eff}
      theme_color:{tags: "tab auto background", value: 0x674f3eff}
      theme_color:{tags: "tab auto border", value: 0x674f3eff}
      theme_color:{tags: "tab auto inactive background", value: 0x47382eff}
      theme_color:{tags: "tab auto inactive border", value: 0x47382eff}
      theme_color:{tags: "drop_site background", value: 0xffffff05}
      theme_color:{tags: "drop_site border", value: 0xffffff0f}
    }
    ```
  }
  
  //- rjf: grove theme
  { Grove            grove            "Grove",
    ```theme:
    {
      theme_color:{  tags: background  , value: 0x1b1f22ff }
      theme_color:{  tags: "alt background"  , value: 0x232929ff }
      theme_color:{  tags: "pop background"  , value: 0x2f4838ff }
      theme_color:{  tags: "fresh background"  , value: 0x31393dff }
      theme_color:{  tags: "match background"  , value: 0x31393dff }
      theme_color:{  tags: border  , value: 0x485347ff }
      theme_color:{  tags: text  , value: 0xffffffff }
      theme_color:{  tags: "weak text"  , value: 0xa2a2a2ff }
      theme_color:{  tags: "good text"  , value: 0x32a852ff }
      theme_color:{  tags: "neutral text"  , value: 0x3a90bbff }
      theme_color:{  tags: "bad text"  , value: 0xcf5242ff }
      theme_color:{  tags: hover  , value: 0xffffffff }
      theme_color:{  tags: "focus overlay"  , value: 0xfda20012 }
      theme_color:{  tags: "focus border"  , value: 0xfda200ff }
      theme_color:{  tags: cursor  , value: 0x8aff00ff }
      theme_color:{  tags: selection  , value: 0x99ccff0f }
      theme_color:{  tags: "inactive background"  , value: 0x0 }
      theme_color:{  tags: drop_shadow  , value: 0x0000007f }
      theme_color:{  tags: "good_pop background"  , value: 0x2c5b36ff }
      theme_color:{  tags: "good_pop border"  , value: 0x568761ff }
      theme_color:{  tags: "good_pop hover"  , value: 0xe3f5d3ff }
      theme_color:{  tags: "good_pop weak text"  , value: 0xe3f5d3ff }
      theme_color:{  tags: "bad_pop background"  , value: 0x803425ff }
      theme_color:{  tags: "bad_pop hover"  , value: 0xff825cff }
      theme_color:{  tags: code_default  , value: 0xad8b69ff }
      theme_color:{  tags: code_symbol  , value: 0x87ad6aff }
      theme_color:{  tags: code_type  , value: 0xb67474ff }
      theme_color:{  tags: code_local  , value: 0xe9bf95ff }
      theme_color:{  tags: code_register  , value: 0xa688b2ff }
      theme_color:{  tags: code_keyword  , value: 0xe49e17ff }
      theme_color:{  tags: code_delimiter_or_operator  , value: 0x795e43ff }
      theme_color:{  tags: code_numeric  , value: 0x98b19eff }
      theme_color:{  tags: code_numeric_alt_digit_group  , value: 0x688b71ff }
      theme_color:{  tags: code_string  , value: 0x98b19eff }
      theme_color:{  tags: code_meta  , value: 0xad5979ff }
      theme_color:{  tags: code_comment  , value: 0x52675dff }
      theme_color:{  tags: line_info_0  , value: 0x4f3022ff }
      theme_color:{  tags: line_info_1  , value: 0x4f3e15ff }
      theme_color:{  tags: line_info_2  , value: 0x434e2aff }
      theme_color:{  tags: line_info_3  , value: 0x36241fff }
      theme_color:{  tags: line_info_4  , value: 0x4f3022ff }
      theme_color:{  tags: line_info_5  , value: 0x4f3e15ff }
      theme_color:{  tags: line_info_6  , value: 0x434e2aff }
      theme_color:{  tags: line_info_7  , value: 0x36241fff }
      theme_color:{  tags: thread_0  , value: 0xffc258ff }
      theme_color:{  tags: thread_1  , value: 0x82d331ff }
      theme_color:{  tags: thread_2  , value: 0xff99e5ff }
      theme_color:{  tags: thread_3  , value: 0x6598ffff }
      theme_color:{  tags: thread_4  , value: 0x65ffcbff }
      theme_color:{  tags: thread_5  , value: 0xff9819ff }
      theme_color:{  tags: thread_6  , value: 0x9932ffff }
      theme_color:{  tags: thread_7  , value: 0x65ff4cff }
      theme_color:{  tags: thread_unwound  , value: 0xb2ccd8ff }
      theme_color:{  tags: thread_error  , value: 0xb23219ff }
      theme_color:{  tags: breakpoint  , value: 0xa72911ff }
      theme_color:{  tags: "floating background"  , value: 0x1b1f2276 }
      theme_color:{  tags: "floating background alt"  , value: 0x0000005f }
      theme_color:{  tags: "floating background fresh"  , value: 0x31393d5f }
      theme_color:{  tags: "floating border"  , value: 0xbfbfbf1f }
      theme_color:{  tags: "floating scroll_bar background"  , value: 0x3b3b3b5f }
      theme_color:{  tags: "floating scroll_bar border"  , value: 0x5f5f5f5f }
      theme_color:{  tags: "menu_bar background"  , value: 0x243d32ff }
      theme_color:{  tags: "menu_bar border"  , value: 0x597b63ff }
      theme_color:{  tags: "scroll_bar background"  , value: 0x232929ff }
      theme_color:{  tags: "scroll_bar border"  , value: 0x3c4a3fff }
      theme_color:{  tags: "implicit background"  , value: 0x00000000 }
      theme_color:{  tags: "implicit border"  , value: 0x00000000 }
      theme_color:{  tags: "hollow background"  , value: 0x00000000 }
      theme_color:{  tags: "hollow border"  , value: 0xffffff1f }
      theme_color:{  tags: "tab background"  , value: 0x243d32ff }
      theme_color:{  tags: "tab border"  , value: 0x597b63ff }
      theme_color:{  tags: "tab inactive background"  , value: 0x30383eff }
      theme_color:{  tags: "tab inactive border"  , value: 0x6b7680ff }
      theme_color:{  tags: "tab auto background"  , value: 0x30636dff }
      theme_color:{  tags: "tab auto border"  , value: 0x768f94ff }
      theme_color:{  tags: "tab auto inactive background"  , value: 0x2f2633ff }
      theme_color:{  tags: "tab auto inactive border"  , value: 0x685073ff }
      theme_color:{  tags: "drop_site background"  , value: 0xffffff05 }
      theme_color:{  tags: "drop_site border"  , value: 0xffffff0f }
    }
    ```
  }
  
  //- rjf: todo
  { FarManager       far_manager      "Far Manager",
    ```theme:
    {
      theme_color:{tags: background, value: 0x000080ff}
      theme_color:{tags: "pop background", value: 0x8080ff}
      theme_color:{tags: "fresh background", value: 0x31393dff}
      theme_color:{tags: "match background", value: 0x31393dff}
      theme_color:{tags: border, value: 0x8080ff}
      theme_color:{tags: text, value: 0xffffffff}
      theme_color:{tags: "weak text", value: 0xffffffff}
      theme_color:{tags: "good text", value: 0x00ff00ff}
      theme_color:{tags: "neutral text", value: 0x00ffffff}
      theme_color:{tags: "bad text", value: 0xff0000ff}
      theme_color:{tags: hover, value: 0xffffffff}
      theme_color:{tags: "focus overlay", value: 0xffff0012}
      theme_color:{tags: "focus border", value: 0xffff00ff}
      theme_color:{tags: cursor, value: 0xffff00ff}
      theme_color:{tags: selection, value: 0xffff0018}
      theme_color:{tags: "inactive background", value: 0x0000002f}
      theme_color:{tags: drop_shadow, value: 0x0000007f}
      theme_color:{tags: "good_pop background", value: 0x6c17ff}
      theme_color:{tags: "good_pop border", value: 0x6c17ff}
      theme_color:{tags: "bad_pop background", value: 0xff0000ff}
      theme_color:{tags: code_default, value: 0xffffffff}
      theme_color:{tags: code_symbol, value: 0xffffff}
      theme_color:{tags: code_type, value: 0x00ff00ff}
      theme_color:{tags: code_local, value: 0x00ffffff}
      theme_color:{tags: code_register, value: 0xff00ffff}
      theme_color:{tags: code_keyword, value: 0xffffffff}
      theme_color:{tags: code_delimiter_or_operator, value: 0xffffffff}
      theme_color:{tags: code_numeric, value: 0xffff00ff}
      theme_color:{tags: code_numeric_alt_digit_group, value: 0xffff00ff}
      theme_color:{tags: code_string, value: 0xffff00ff}
      theme_color:{tags: code_meta, value: 0xff0000ff}
      theme_color:{tags: code_comment, value: 0x008080ff}
      theme_color:{tags: line_info_0, value: 0x8080ff}
      theme_color:{tags: line_info_1, value: 0x800080ff}
      theme_color:{tags: line_info_2, value: 0x800000ff}
      theme_color:{tags: line_info_3, value: 0x08000ff}
      theme_color:{tags: thread_0, value: 0xffff00ff}
      theme_color:{tags: thread_1, value: 0x00ff00ff}
      theme_color:{tags: thread_unwound, value: 0x00ffffff}
      theme_color:{tags: thread_error, value: 0xff0000ff}
      theme_color:{tags: breakpoint, value: 0xff0000ff}
      theme_color:{tags: "menu_bar background", value: 0x008080ff}
      theme_color:{tags: "menu_bar border", value: 0x8080ff}
      theme_color:{tags: "scroll_bar background", value: 0x008080ff}
      theme_color:{tags: "implicit background", value: 0x00000000}
      theme_color:{tags: "implicit border", value: 0x00000000}
      theme_color:{tags: "hollow background", value: 0x00000000}
      theme_color:{tags: "hollow border", value: 0xffffff1f}
      theme_color:{tags: "tab background", value: 0x8080ff}
      theme_color:{tags: "tab border", value: 0x8080ff}
      theme_color:{tags: "tab inactive background", value:0}
      theme_color:{tags: "tab auto background", value: 0x800000ff}
      theme_color:{tags: "tab auto border", value: 0x8080ff}
      theme_color:{tags: "tab auto inactive background", value: 0x300000ff}
      theme_color:{tags: "tab auto inactive border", value: 0x8080ff}
      theme_color:{tags: "drop_site background", value: 0x80ff}
      theme_color:{tags: "drop_site border", value: 0xffffff}
    }
    ```
  }
}

@table(name lower_name)
RD_CodeColorTable:
{
  {CodeDefault               "code_default"}
  {CodeSymbol                "code_symbol"}
  {CodeType                  "code_type"}
  {CodeLocal                 "code_local"}
  {CodeRegister              "code_register"}
  {CodeKeyword               "code_keyword"}
  {CodeDelimiterOperator     "code_delimiter_or_operator"}
  {CodeNumeric               "code_numeric"}
  {CodeNumericAltDigitGroup  "code_numeric_alt_digit_group"}
  {CodeString                "code_string"}
  {CodeMeta                  "code_meta"}
  {CodeComment               "code_comment"}
  {CodeLineNumbers           "code_line_numbers"}
  {CodeLineNumbersSelected   "code_line_numbers_selected"}
}

@enum RD_CodeColorSlot:
{
  @expand(RD_CodeColorTable a) `$(a.name)`,
  COUNT
}

@data(String8) rd_code_color_slot_name_table:
{
  @expand(RD_CodeColorTable a) `str8_lit_comp("$(a.lower_name)")`
}

@enum RD_ThemePreset:
{
  @expand(RD_ThemePresetTable a) `$(a.name)`,
  COUNT,
}

@data(String8) rd_theme_preset_display_string_table:
{
  @expand(RD_ThemePresetTable a) `str8_lit_comp("$(a.display_string)")`,
}

@data(String8) rd_theme_preset_code_string_table:
{
  @expand(RD_ThemePresetTable a) `str8_lit_comp("$(a.name_lower)")`,
}

@data(String8) rd_theme_preset_cfg_string_table:
{
  @expand(RD_ThemePresetTable a) `str8_lit_comp("$(a.cfg)")`,
}

////////////////////////////////
//~ rjf: Help/Docs/README

@markdown
raddbg_readme:
{
  @title "The RAD Debugger (ALPHA)";
  @p "The RAD Debugger is a native, user-mode, multi-process, graphical debugger. It currently only supports local-machine Windows x64 debugging with PDBs, but we're actively working on support and ports for other toolchains and platforms.";
  
  @subtitle "Getting Started";
  @p "**Launching the debugger with your program information:** To launch the RAD Debugger with your executable and command line arguments, run `raddbg` from the command line like so:";
  @p "```raddbg my_program.exe --foo --bar --baz```";
  @p "For more information, see the **Command-Line Usage** section.";
  @p "**Basic commands and keybindings:** Default keyboard shortcuts for common debugger controls include:";
  @unordered_list
  {
    @p "**Ctrl + O**: Open Source Code File";
    @p "**F10**: Step Over";
    @p "**F11**: Step Into";
    @p "**Shift + F11**: Step Out";
    @p "**F5**: Run";
    @p "**Ctrl + Shift + X**, or **Pause**: Halt All Processes";
    @p "**Shift + F5**: Kill All Processes";
    @p "**Shift + F6**: Attach To Process";
    @p "**Ctrl + F**: Search For Text (Forwards)";
    @p "**F9**: Toggle Breakpoint At Cursor";
    @p "**Ctrl + Comma**: Focus Next Panel";
    @p "**Ctrl + Shift + Comma**: Focus Previous Panel";
    @p "**Ctrl + Alt + Arrow Key**: Focus Panel In Direction";
    @p "**Ctrl + Tab**: Focus Next Tab";
    @p "**Ctrl + Shift + Tab**: Focus Previous Tab";
    @p "**Ctrl + W**: Close Tab";
    @p "**F1**: Open Palette (lists commands, keybindings, settings, threads, processes, modules, types, and many other things)";
  }
  @p "For more information, see the **Commands** section.";
  
  @p "**Configuration files (users and projects):** The RAD Debugger stores configuration in two files. One is the 'user file', the other is the 'project file'. Both files are the same format and can store the same kinds of data, but the user file is preferred by the debugger for more likely user-related data (windows, keybindings, theme), and the project file is preferred by the debugger for more likely project-related data (executable debugging targets, breakpoints, recent source files). Project files are more likely to be what you'd check into source control, whereas a user file is more likely to have your personal debugger settings (which will apply identically regardless of which project file is opened).";
  
  @p "The debugger autosaves user and project files. You do not need to manually save them. To switch which path you are using for either, you can use the `Open User` (Ctrl + Alt + Shift + O, by default), or `Open Project` (Ctrl + Alt + O, by default) commands respectively. If a file does not exist at the path you enter for either, then a new one will be created, and the debugger will begin autosaving to it. If the initial paths to these files are not specified on the command line (via `--user` or `--project`), then the debugger uses default paths for them. The user file path, by default, will be `%appdata%/raddbg/default.raddbg_user`. The project file path will be whatever project path was last loaded for the user, or if no such path exists, `%appdata%/raddbg/default.raddbg_project`. If you suspect that your configuration files are corrupted or causing the debugger to behave poorly, it might help to delete your `%appdata%/raddbg` folder (although it'd also help if you [sent it to us in a bug report](https://github.com/EpicGamesExt/raddebugger/issues), so that we can investigate why they were corrupted to begin with!).";
  @p "For more information, see the `**User & Project Files** section.";
  
  @p "**Watch tabs and visualizers:** 'Watch' tabs in the RAD Debugger allow entering expressions, which can reference variables in your program, and visualize what their value is when your program is stopped at a particular time. These expressions roughly follow C expression syntax, but there are a number of extensions which can be used to visualize expressions in a more useful way. Here are some examples:";
  @unordered_list
  {
    @p "`array(pointer, 64)`: Visualizes `pointer` as pointing to a 256-element array.";
    @p "`pointer, 64`: Visualizes `pointer` as pointing to a 256-element array.";
    @p "`pointer, count`: Visualizes `pointer` as pointing to a `count`-element array.";
    @p "`slice(some_slice_struct)`: Interprets a structure type as containing a base pointer and a count (either through an integer, or an 'end pointer'), and visualizes the base pointer, pointing to that many elements.";
    @p "`rows(some_struct, a, b, c)`: Displays the value of `some_struct`, but only showing members `a`, `b`, and `c`.";
    @p "`omit(some_struct, a, b, c)`: Displays the value of `some_struct`, but only showing members other than `a`, `b`, and `c`.";
    @p "`hex(my_int)`: Visualizes the value of `my_int` in base-16 (hexadecimal) form.";
    @p "`dec(my_int)`: Visualizes the value of `my_int` in base-10 (decimal) form.";
    @p "`bin(my_int)`: Visualizes the value of `my_int` in base-2 (binary) form.";
    @p "`oct(my_int)`: Visualizes the value of `my_int` in base-8 (octal) form.";
    @p "`my_int, x`: Visualizes the value of `my_int` in base-16 (hexadecimal) form.";
    @p "`my_int, d`: Visualizes the value of `my_int` in base-10 (decimal) form.";
    @p "`my_int, b`: Visualizes the value of `my_int` in base-2 (binary) form.";
    @p "`my_int, o`: Visualizes the value of `my_int` in base-8 (octal) form.";
    @p "`digits(bin(my_int), 32)`: Visualizes the value of `my_int` in base-2 (binary) form, showing at minimum 32 bits.";
    @p "`my_int.bin().digits(32)`: Visualizes the value of `my_int` in base-2 (binary) form, showing at minimum 32 bits.";
    @p "`bitmap(base_pointer, width, height, fmt=rgba8)`: Visualizes the data starting at `base_pointer` as a bitmap, with width `width` and height `height`, with format `rgba8`.";
  }
  @p "For more information, see the **Views** section.";
  
  @subtitle "Command-Line Usage";
  @p "When run normally, either by launching through a file explorer or running from a command line without arguments, `raddbg` will open a new instance of the debugger, and await further operations. But it also supports a number of command line options for a number of other purposes. These options are specified with a `-` or `--` prefix, followed by the name of the option, and if the option requires an argument value, followed by a `:` or `=`, followed by the argument value. A list of the possible options follows:";
  @unordered_list
  {
    @p "`--help` Displays a help menu which documents the possible command line options.";
    @p "`--user:<path>` Use to specify the location of a user file which should be used. User files are used by default to store user-related settings, including window and panel setups, path mapping, and visual settings. If this file does not exist, it will be created as necessary. This file will be autosaved as user-related changes are made. For more information on user files, see the **User & Project Files** section.";
    @p "`--project:<path>` Use to specify the location of a project file which should be used. Project files are used by default to store project-related settings. If this file does not exist, it will be created as necessary. This file will be autosaved as project-related changes are made. For more information on project files, read the 'User & Project Files' section.";
    @p "`--auto_step` This will step into all active targets after the debugger initially starts.";
    @p "`--auto_run` This will run all active targets after the debugger initially starts.";
    @p "`--quit_after_success` (or `-q`) This will close the debugger automatically after all processes exit, if they all exited successfully (with code 0), and ran with no interruptions.";
    @p "`--ipc` This will launch the debugger in the non-graphical IPC mode, which is used to communicate with another running instance of the debugger. The debugger instance will launch, send the specified command, then immediately terminate. This may be used by editors or other programs to control the debugger. For more information on the set of available commands, see the **Commands** section. For more information on driving another debugger instance with this argument, see the **Driving Another Debugger Instance** section.";
  }
  @p "On the command line, non-options (meaning any command line arguments *not* prefixed with a `-` or `--`) can also be specified. With normal usage, they are interpreted as the command line for a target (see the **Targets** section). When driving another debugger instance (using the `--ipc` argument), this additional command line text is used to encode a debugger command.";
  @p "The debugger will stop parsing `-` and `--` prefixes as arguments after seeing a standalone `--`, *or* after seeing the first non-option argument, when reading the command line left-to-right. Some examples of command line usage and their interpretations are below:";
  @unordered_list
  {
    @p "`raddbg --foo --bar --a:b --c=d test.exe`: All options are used to configure `raddbg`. `test.exe` is interpreted as a target executable. `b` is interpreted as the parameter for the `a` option. `d` is interpreted as the parameter for the `c` option.";
    @p "`raddbg test.exe --foo --bar`: `test.exe`is interpreted as a target executable. `--foo --bar` is interpreted as arguments for `test.exe`, and thus are *not* used to configure `raddbg`.";
    @p "`raddbg -- test.exe`: `test.exe` is interpreted as a target executable.";
    @p "`raddbg --ipc find_code_location \"C:/foo/bar/baz.c:123:1\"`: `--ipc` configures `raddbg` to drive another instance of `raddbg`. The remainder of the text is interpreted as a command.";
    @p "`raddbg \"C:/path with spaces/test.exe\" --foo --bar`: A target is formed from the `test.exe` path, and `--foo --bar` are interpreted as arguments to the `test.exe` target.";
  }
  
  @subtitle "Windows, Panels, & Tabs";
  @p "Each opened debugger window is subdivided into panels. Panels subdivide regions of their window without overlapping. Each panel can contain multiple tabs, and can have one tab selected at any time. Tabs can be dragged and dropped between panels. Each tab is used to view one of the many supported debugger interfaces, including source code, disassembly, memory, or watch tables. When a tab is selected, that interface will fill the tab's containing panel's region of the containing window.";
  @p "There are no 'special' windows, panels, or tabs; the debugger is written such that the number of windows, each window's panel organization, and the placement and arrangement of tabs can all be organized in a large variety of ways.";
  @p "A list of debugger interfaces, which can occupy tabs, are below:";
  @unordered_list
  {
    @expand(RD_WatchTabFastPathTable a) @p "**$(a.display_name)**: $(a.description)";
  }
  @p "You can open one of these tabs in any panel by clicking the `+` icon next to that panel's tabs, or by executing the `Open Tab` command (bound to Ctrl + T) by default.";
  
  @subtitle "Commands";
  @p "The debugger, including implicitly with its UI, is operated almost entirely through 'commands'. Commands may be manually executed in the debugger UI within the palette (which you can open with F1 by default), or within the commands list which is opened when you execute the 'Run Command' command. Operations in the debugger UI are implemented with commands, so if it's ever unclear how to accomplish some operation through the UI, a useful fallback is searching for and running the command through the palette.";
  @p "Commands are also how a debugger instance launched with `--ipc` may communicate with a primary debugger instance.";
  @p "A list of commands, how they're referred to textually (for the purposes of `--ipc` debugger instances), and their descriptions, are below:";
  @unordered_list
  {
    @expand(D_CmdTable a) @p "$(a.ipc_docs_vis == 1 -> '`'..a.display_name..'` '..'(`'..a.string..'`) '..a.desc)";
    @expand(RD_CmdTable a) @p "$(a.ipc_docs_vis == 1 -> '`'..a.display_name..'` '..'(`'..a.string..'`) '..a.desc)";
  }
  
  @subtitle "Targets";
  @p "A *target* is one executable and configuration for launching that executable, including command line arguments and working directory (the directory from which the executable is launched). Each target may also have a custom label (prioritized over the executable name when visualizing the target, and also allows evaluation of the target in a Watch tab), and the name of a custom entry point function (when the default entry points - `main`, `WinMain`, etc. - are not desired when stepping into the program upon launch). The debugger can have several targets at once. Each target can also be enabled or disabled. Some operations work on all enabled targets - for instance, the `Run` or `Kill All` commands (standardly bound as F5 or Shift + F5). Enabling and disabling targets allows one to filter which targets are currently being worked with.";
  @p "To add a target, you can run the `Add Target` command. A target is also created automatically from command line arguments - the rules for how this happens can be found in the `Command-Line Usage` section.";
  @p "Targets created through command line usage are temporary, meaning they are not persistently saved across runs of the debugger. To change this, find the target in the `Targets` tab, and click the `Save To Project` button on that target's row. After doing so, the target will be restored across runs, and will no longer need to be specified on the command-line.";
  
  @subtitle "Views";
  @p "*Views* are used to transform the way that evaluations in the debugger are visualized. An evaluation is produced by taking an expression string - for instance, the name of a variable - and using debug info and information from an attached process' live runtime (memory, registers, and so on) to interpret it.";
  @p "Evaluations may be visualized in a variety of ways. A 64-bit unsigned integer may be visualized as a textual representation of the value with a radix of 10. A 32-bit floating-point value may be visualized as a textual representation of the value. An array of 32-bit floating-point values can be visualized as a list of textual representations of those values.";
  @p "But all of these cases may be visualized in a number of other ways, as well. A 64-bit unsigned integer may be more usefully represented with a radix of 16, 8, or 2. An array of 32-bit floating-point values may encode the R, G, B, and A components of a color, or vertex positions for 3D geometry, or samples for a waveform. An array of bytes may encode raw pixel data for an image, or image data in a compressed format. A struct may have several members which are not useful to look at all the time. A struct may form the head of a linked list, and a flat linked list representation may be more preferable than the traditional watch view representation, which adds an additional layer of hierarchical nesting with the expansion of each 'next' pointer in a linked list. When designing the debugger, we felt that the traditional memory view and watch view representations of data in a debugged-process were not sufficient. Views were added to the traditional watch table structure to allow per-expression specification of extra visualization parameters.";
  @p "Views look just like function calls. They start with the name of the view, a `(`, then a list of expressions which form the arguments for the view (optionally delimited by `,`s), followed by a `)`. The meaning of these arguments can sometimes be inferred through their order; for example, in the case of `bitmap(ptr, 512, 256)`, the `bitmap` view uses the `ptr` as the primary expression to interpret as bitmap data, then assumes the widely-used pattern of width, then height, to interpret the following arguments as the dimensions of the bitmap. In other cases, arguments must be specifically named. For instance, the `fmt` argument in `bitmap(ptr, 512, 256, fmt=bgra8)` is required to override the `bitmap` view's default assumption of RGBA8 bitmap data.";
  @p "A list of currently-supported views are below:";
  @unordered_list
  {
    // TODO(rjf): @lenses generate via metaprogram
    @p "`raw(expr)`: Ignores all views used in `expr`, including those automatically applied by type views.";
    @p "`bin(expr)`: Visualizes all numeric values evaluated in `expr` as base-2 (binary).";
    @p "`oct(expr)`: Visualizes all numeric values evaluated in `expr` as base-8 (octal).";
    @p "`dec(expr)`: Visualizes all numeric values evaluated in `expr` as base-10 (decimal).";
    @p "`hex(expr)`: Visualizes all numeric values evaluated in `expr` as base-16 (hexadecimal).";
    @p "`digits(expr, num)`: Visualizes at least `num` digits in all numeric values evaluated in `expr`.";
    @p "`no_string(expr)`: Disables textual string visualization with pointer evaluations in `expr`.";
    @p "`no_char(expr)`: Disables character visualization with character or integer evaluations in `expr`.";
    @p "`no_addr(expr)`: Disables explicit address visualization with pointer evaluations in `expr`.";
    @p "`sequence(expr)`: Interprets `expr` as an integer, encoding how many sub-expressions `expr` should expand to produce. This can be used in combination with the `table` view to easily generate tables, indexing amongst many arrays.";
    @p "`rows(expr, ...)`: Interpreting all post-`expr` arguments as member names, only expands to show those members of `expr`.";
    @p "`omit(expr, ...)`: Interpreting all post-`expr` arguments as member names, expands to show all members of `expr`, except those with matching names.";
    @p "`range1(expr, min, max)`: Expresses that `expr` is a bounded numeric value between `min` and `max`. Interpreted by the debugger to build slider UI for an evaluation.";
    @p "`array(expr, count)`: Expresses that `expr` points to `count` values, rather than 1, or the fixed size implied by a static array. When expanded, displays only that many values.";
    @p "`slice(expr)`: Expresses that `expr` evaluates to a structure type which bundles a base pointer and a count (encoding how many elements to which the base pointer points). This count can be expressed either as an integer, or as an 'end pointer'. When expanded, displays that many elements following that base pointer.";
    @p "`table(expr, ...)`: Expresses that `expr` should be expanded normally, but interprets all post-`expr` arguments as expressions which should be used to form cells for rows which are generated by this expression's expansions. This replaces the normal cells which are generated for an expansion in a Watch table.";
    @p "`text(expr, [lang = ...])`: Generates a text visualizer, interpreting `expr` as (being or pointing to) text.";
    @p "`disasm(expr, [size = ...]`: Generates a disassembly visualizer, interpreting `expr` as (being or pointing to) machine code.";
    @p "`memory(expr, [size = ...])`: Generates a memory visualizer, interpreting `expr` as (being or pointing to) raw bytes.";
    @p "`bitmap(expr, width, height, [fmt = ...])`: Generates a bitmap visualizer, interpreting `expr` as (being or pointing to) raw bitmap data, with `width` and `height` as dimensions.";
    @p "`color(expr)`: Generates a color picker, interpreting `expr` as a color value.";
  }
  
  @subtitle "Breakpoints";
  @p "Breakpoints interrupt execution of attached processes. They may be placed on arbitrary addresses (e.g. by placing a breakpoint on an instruction within a disassembly view, or with an arbitrary expression, like the name of a function), or on lines of source code. In the latter case, the source code location is resolved to code addresses. If there is no code associated with a line of source code, then the resolution path chooses to use the next closest line of source code in the same file.";
  @p "Breakpoints may have stop conditions attached to them. When a breakpoint is hit by a thread, before it stops execution, the stop condition is evaluated, and if it evaluates to a nonzero value, only then is execution stopped.";
  @p "Each breakpoint has a hit count. Every time a breakpoint causes execution to stop, this counter is increased.";
  @p "Address breakpoints can also point to data, rather than code. This will cause execution to stop if some data is read from, written to, or executed. In this case, the debugger configures the hardware to use the available hardware data breakpoints feature. To enable this path, in the breakpoint's editor, express the number of bytes following the address that should be checked for writes/reads/executions (can be 1, 2, 4, or 8), and select whether or not you want to break on reads, writes, or executions.";
  
  @subtitle "User & Project Files";
  @p "Applicable state controlling the debugger's appearance, behavior, targets, breakpoints, and other configurations is saved and reloaded across runs of the debugger through both *user files* and *project files*. These files are auto-saved. These files are written in a textual format which can be hand-edited as necessary, but they're also continuously re-read and re-written by the debugger. By default, the debugger uses `%appdata%/raddbg/default.raddbg_user` for its user file path, and `%appdata%/raddbg/default.raddbg_project` for its project file path. These paths can be overridden on the command line (see the 'Command-Line Usage' section).";
  @p "The *user file* defaultly stores file path maps, windows (including their preferred monitor, placement, and size), each window's panel layout and tabs, keybindings, theme colors, and fonts.";
  @p "The *project file* defaultly stores targets, breakpoints, watch pins, and exception code filters.";
  @p "Because both can be hand-edited, however, if you want to store something normally stored in a user file in a project file, or vice versa, this can be done by hand transferring the textual data from one file to another. There is no path in the debugger's UI to support this transfer, currently, although this is planned.";
  
  @subtitle "Driving Another Debugger Instance";
  @p "When the debugger is launched with the `--ipc` command-line argument, it does not launch another instance of the graphical debugger. Instead, it launches, sends a string encoding a command to a running instance of the graphical debugger, and then terminates. The set of commands which can be sent are identical to those which can be run from the debugger's UI itself, but these commands must be encoded textually (through the other command-line arguments). These commands are described in the 'Commands' section.";
}
