Files
raddebugger/src/raddbg/raddbg.mdesk
T

2477 lines
249 KiB
Plaintext

// Copyright (c) 2024 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/seguisb.ttf"
@embed_file rd_default_code_font_bytes: "../data/liberation-mono.ttf"
//@embed_file rd_default_code_font_bytes: "../data/Inconsolata-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,
}
```
}
// 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 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,
}
```
}
{
bitmap,
```
@inherit(tab) x:
{
@description("An expression which refers to the 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': path,
'stderr_path': path,
'stdin_path': 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': @absolute path, 'dest': @absolute 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: 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 }
{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 }
{Dir2 dir2 Dir2 }
{String8 string String }
{String8 cmd_name CmdName }
{`MD_Node *` params_tree ParamsTree }
{`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(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 runner
{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" "" }
//- 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" "" }
//- 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," }
{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." "" "" }
//- 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." "" "" }
//- 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: 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.";
}