Files
raddebugger/src/raddbg/raddbg.mdesk
T

2135 lines
217 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)
RD_WatchTabFastPathTable:
{
{Watch "Watch" watches 0 Binoculars }
{Locals "Locals" locals 1 Binoculars }
{Registers "Registers" registers 1 Binoculars }
{Globals "Globals" globals 1 Binoculars }
{ThreadLocals "Thread Locals" thread_locals 1 Binoculars }
{Types "Types" types 1 Binoculars }
{Procedures "Procedures" procedures 1 Binoculars }
{CallStack "Call Stack" call_stack 1 Thread }
{Targets "Targets" targets 1 Target }
{Breakpoints "Breakpoints" breakpoints 1 CircleFilled }
{WatchPins "Watch Pins" watch_pins 1 Pin }
{Threads "Threads" threads 1 Threads }
{Processes "Processes" processes 1 Scheduler }
{Machines "Machines" machines 1 Machine }
{Modules "Modules" modules 1 Module }
{FilePathMaps "File Path Map" file_path_maps 1 FileOutline }
{TypeViews "Type Views" type_views 1 Binoculars }
}
@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
@default(1) 'hover_animations': bool,
@default(1) 'press_animations': bool,
@default(0) 'focus_animations': bool,
@default(1) 'tooltip_animations': bool,
@default(1) 'menu_animations': bool,
@default(1) 'scrolling_animations': bool,
//- rjf: fonts
@display_name('UI Font') @description("The name of, or path to, the font used when displaying non-code UI elements.")
'main_font': string,
@display_name('Code Font') @description("The name of, or path to, the font used when displaying code.")
'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,
//- 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:
{
@default(11) @display_name('Tab Font Size') @description("Controls the tab's font size.")
'font_size': @range[6, 72] u64,
}
```
}
//- rjf: views
{
watch,
```
@inherit(tab) x:
{
@default(3.f) @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': code_string,
@no_expand 'watches': query,
}
```
}
{
text,
```
@inherit(tab) x:
{
@description("An expression to describe data which should be viewed as text or code.")
'expression': code_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,
@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': code_string,
'arch': code_string,
'syntax': code_string,
'size': code_string,
@default(1) @description("Controls whether or not addresses are shown in the disassembly text.")
'show_addresses': bool,
@default(0) @description("Controls whether or not code bytes are shown in the disassembly text.")
'show_code_bytes': bool,
@default(1) @description("Controls whether or not source lines, corresponding to disassembly instruction ranges, are shown in the disassembly text.")
'show_source_lines': bool,
@default(1) @description("Controls whether or not disassembly text is decorated with symbol names.")
'show_symbol_names': bool,
@default(1) @description("Controls whether or not line numbers are shown.")
'show_line_numbers': bool,
}
```
}
{
memory,
```
@inherit(tab) x:
{
@display_name("Base Address") @description("An expression to describe the base address or offset of the memory view.")
'expression': code_string,
@display_name("Address Range Size") @description("The number of bytes of the viewed memory range.")
'size': code_string,
@display_name("Cursor Address") @description("The address of the cursor.")
'cursor': code_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:
{
@display_name("Base Pointer") @description("An expression to describe the base address or offset of the bitmap data.")
'expression': code_string,
@order(0) 'w': u64,
@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': code_string,
}
```
}
{
geo3d,
```
@inherit(tab) x:
{
@display_name("Expression") @description("An expression to describe the base address of the index buffer.")
'expression': code_string,
'count': code_string,
'vtx': code_string,
'vtx_size': code_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(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': code_string,
'stdout_path': path,
'stderr_path': path,
'stdin_path': path,
'environment': query,
'debug_subprocesses': bool,
@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)
x:
{
'label': code_string,
'condition': code_string,
'source_location': string,
'address_location': code_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_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': code_string,
'source_location': string,
'address_location': code_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':code_string, 'expr':code_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 }
{U128 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 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: 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 1 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
{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" "" }
//- 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." "" "" }
//- rjf: breakpoints
{AddBreakpoint 1 1 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 CircleFilled "add_breakpoint" "Add 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," }
{ToggleBreakpoint 1 1 1 0 "" Null null Nil Null 0 0 0 0 0 0 0 CircleFilled "toggle_breakpoint" "Toggle 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." "" "" }
//- 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 }
{ "reload_active" R ctrl shift 0 }
{ "switch" I ctrl 0 0 }
{ "switch_to_partner_file" O 0 0 alt }
//- rjf: setting config paths
{ "open_user" O ctrl shift alt }
{ "open_project" O ctrl 0 alt }
//- rjf: meta controls
{ "edit" F2 0 0 0 }
{ "accept" Return 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 }
//- 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)" }
//- 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: todo
{ SolarizedLight solarized_light "Solarized (Light)" }
//- 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: 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" }
}
@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, with plans to expand and port in the future.";
@subtitle "Getting Started";
@p "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 "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 Command Palette";
}
@p "For more information, see the 'Commands' section.";
@p "View rules can be used to visualize expressions differently in the watch window. Here are some examples:";
@unordered_list
{
@p "`array:16`: Visualize a pointer as pointing to a 16-element array.";
@p "`array:(count*2)`: Visualize a pointer as pointing to a `count*2`-element array.";
// @p "`list:next`: Visualize a linked list flatly, where each node has a `next` pointer, which points to the next node in the list.";
@p "`hex`: Visualize numeric literals as base-16 (hexadecimal).";
@p "`dec`: Visualize numeric literals as base-10 (decimal).";
@p "`oct`: Visualize numeric literals as base-8 (octal).";
@p "`bin`: Visualize numeric literals as base-2 (binary).";
@p "`omit:(foo bar baz)`: Prohibits members named `foo`, `bar`, and `baz` from being displayed.";
@p "`only:(foo bar baz)`: Only allows members named `foo`, `bar`, and `baz` to be displayed.";
@p "`slice`: Attempts to interpret a structure evaluation as encoding a slice, with a base pointer and an integer delimiting the number of elements to which the pointer points.";
}
@p "Multiple view rules can be specified on one line, so they can be combined like so:";
@p "```array:16, hex, only: {x, y, z}```";
@p "For more information, see the 'View Rules' 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 a parameter, followed by a `:` or `=`, followed by the parameter's content. 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 to store settings for users, 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, read the 'User & Profile Files' section.";
@p "`--project:<path>` Use to specify the location of a project file which should be used. Project files are used to store settings for users and projects. 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 commands, read the 'Commands' section. For more information on driving another debugger instance with this argument, read 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 *window* in the debugger frontend 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 watches. 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_ViewRuleTable a) @p "$(a.show_in_docs -> '`'..a.display_name..'` '..a.description)";
}
@subtitle "Commands";
@p "The debugger is operated with *commands*. Commands may be manually executed in the debugger UI through the `Commands` menu, which you can open with the `Run Command` keybinding, which is F1 by default). 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 command menu.";
@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 (replaces the executable path when visualizing the target), 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, you can right click the command-line-created target in the `Targets` view, and click `Save To Project`. After doing so, the target will be restored across runs, and will no longer need to be specified on the command-line.";
@subtitle "View Rules";
@p "*View rules* 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. View rules were added to the traditional watch view structure to allow per-row specification of extra visualization parameters.";
@p "View rules are specified with the name of a view rule, and depending on the view rule, a `:`, followed by parameters for the view rule. These parameters may be whitespace delimited, but importantly, multiple view rules may be specified per-row in a watch view. To explicitly separate the parameters of one view rule from the name of another - for instance, in a case like `array:16 bin`, where `bin` will not be interpreted as a view rule, but as a parameter of `array` - then commas and semicolons may be used to separate the two view rules (`array:16, bin`), or parentheses/braces/brackets may also be used to explicitly delimit the view rule parameters (`array:(16) bin`).";
@p "A list of currently-supported view rules are below:";
@unordered_list
{
@expand(D_ViewRuleTable a) @p "$(a.docs == 'x' -> '`'..a.string..'` ('..a.display_name..') '..a.description)";
}
@subtitle "Breakpoints";
@p "Breakpoints interrupt execution of attached processes. They may be placed on specific code addresses, lines of source code, on specific symbol names. In the latter two cases, the higher level locations are 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. A symbol name breakpoint will only work if the symbol name is found within loaded debug info.";
@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 "Processor breakpoints are not currently supported, but planned to be in the future.";
@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.";
}