Files
Beyhan Oğur d5f52cc3d3 first commit
2026-09-03 04:45:36 +03:00

556 lines
25 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Macro Editor
<cite>
**Referenced Files in This Document**
- [Macro.cs](file://ClassicAssist/Browser/Models/Macro.cs)
- [Category.cs](file://ClassicAssist/Browser/Models/Category.cs)
- [Metadata.cs](file://ClassicAssist/Browser/Models/Metadata.cs)
- [Repository.cs](file://ClassicAssist/Browser/Models/Repository.cs)
- [Database.cs](file://ClassicAssist/Browser/Data/Database.cs)
- [Filter.cs](file://ClassicAssist/Browser/Data/Filter.cs)
- [FilterType.cs](file://ClassicAssist/Browser/Data/FilterType.cs)
- [CategoriesConverter.cs](file://ClassicAssist/Browser/Data/CategoriesConverter.cs)
- [MacroBrowserControl.xaml.cs](file://ClassicAssist/Browser/MacroBrowserControl.xaml.cs)
- [MacroBrowserViewModel.cs](file://ClassicAssist/Browser/MacroBrowserViewModel.cs)
- [MacrosCommandWindow.xaml.cs](file://ClassicAssist/UI/Views/Macros/MacrosCommandWindow.xaml.cs)
- [MacrosTabControl.xaml.cs](file://ClassicAssist/UI/Views/MacrosTabControl.xaml.cs)
- [MacrosTabViewModel.cs](file://ClassicAssist.Shared/UI/ViewModels/MacrosTabViewModel.cs)
- [PythonCompletionData.cs](file://ClassicAssist/Data/Macros/PythonCompletionData.cs)
- [Python.xshd](file://ClassicAssist/Python.xshd)
- [Python.Dark.xshd](file://ClassicAssist/Python.Dark.xshd)
- [AvalonEditBehaviour.cs](file://ClassicAssist/UI/Misc/AvalonEditBehaviour.cs)
- [MacroEntry.cs](file://ClassicAssist.Shared/Data/Macros/MacroEntry.cs)
- [MacroInvoker.cs](file://ClassicAssist.Shared/Data/Macros/MacroInvoker.cs)
- [MacroManager.cs](file://ClassicAssist.Shared/Data/Macros/MacroManager.cs)
- [SystemMessageTextWriter.cs](file://ClassicAssist.Shared/Data/Macros/SystemMessageTextWriter.cs)
- [DebugWindow.xaml.cs](file://ClassicAssist/UI/Views/DebugWindow.xaml.cs)
- [DebugWindow.axaml.cs](file://ClassicAssist.Avalonia/Views/DebugWindow.axaml.cs)
- [DebugViewModel.cs](file://ClassicAssist.Shared/UI/ViewModels/DebugViewModel.cs)
</cite>
## Table of Contents
1. [Introduction](#introduction)
2. [Project Structure](#project-structure)
3. [Core Components](#core-components)
4. [Architecture Overview](#architecture-overview)
5. [Detailed Component Analysis](#detailed-component-analysis)
6. [Dependency Analysis](#dependency-analysis)
7. [Performance Considerations](#performance-considerations)
8. [Troubleshooting Guide](#troubleshooting-guide)
9. [Conclusion](#conclusion)
10. [Appendices](#appendices)
## Introduction
This document explains the Macro Editor interface and functionality, focusing on macro creation workflows, script editing capabilities, Python integration (including IntelliSense support and syntax highlighting), organization via folders/categories/metadata, debugging tools, testing in isolation, practical examples for complex automation, and performance optimization techniques. The content is derived from the repository’s UI components, models, and shared macro runtime infrastructure.
## Project Structure
The Macro Editor spans multiple layers:
- Browser layer for browsing, filtering, and organizing macros
- UI layer for editing and running macros
- Shared macro runtime for execution, commands, and diagnostics
- Python language support files for syntax highlighting and completion data
```mermaid
graph TB
subgraph "Browser Layer"
BVM["MacroBrowserViewModel"]
BMC["MacroBrowserControl"]
Repo["Repository"]
DB["Database"]
Cat["Category"]
Meta["Metadata"]
Filt["Filter / FilterType"]
CConv["CategoriesConverter"]
end
subgraph "UI Layer"
MTab["MacrosTabControl"]
MCWin["MacrosCommandWindow"]
AEB["AvalonEditBehaviour"]
end
subgraph "Shared Runtime"
ME["MacroEntry"]
MI["MacroInvoker"]
MM["MacroManager"]
SMTW["SystemMessageTextWriter"]
end
subgraph "Python Support"
PCD["PythonCompletionData"]
PXSHD["Python.xshd"]
PDXSHD["Python.Dark.xshd"]
end
subgraph "Debugging"
DW["DebugWindow"]
DVM["DebugViewModel"]
end
BVM --> Repo
Repo --> DB
BVM --> Cat
BVM --> Meta
BVM --> Filt
BVM --> CConv
MTab --> MCWin
MCWin --> AEB
MCWin --> ME
MCWin --> MI
MI --> MM
MI --> SMTW
AEB --> PXSHD
AEB --> PDXSHD
MCWin --> PCD
MCWin --> DW
DW --> DVM
```
**Diagram sources**
- [MacroBrowserViewModel.cs](file://ClassicAssist/Browser/MacroBrowserViewModel.cs)
- [MacroBrowserControl.xaml.cs](file://ClassicAssist/Browser/MacroBrowserControl.xaml.cs)
- [Repository.cs](file://ClassicAssist/Browser/Models/Repository.cs)
- [Database.cs](file://ClassicAssist/Browser/Data/Database.cs)
- [Category.cs](file://ClassicAssist/Browser/Models/Category.cs)
- [Metadata.cs](file://ClassicAssist/Browser/Models/Metadata.cs)
- [Filter.cs](file://ClassicAssist/Browser/Data/Filter.cs)
- [FilterType.cs](file://ClassicAssist/Browser/Data/FilterType.cs)
- [CategoriesConverter.cs](file://ClassicAssist/Browser/Data/CategoriesConverter.cs)
- [MacrosTabControl.xaml.cs](file://ClassicAssist/UI/Views/MacrosTabControl.xaml.cs)
- [MacrosCommandWindow.xaml.cs](file://ClassicAssist/UI/Views/Macros/MacrosCommandWindow.xaml.cs)
- [AvalonEditBehaviour.cs](file://ClassicAssist/UI/Misc/AvalonEditBehaviour.cs)
- [MacroEntry.cs](file://ClassicAssist.Shared/Data/Macros/MacroEntry.cs)
- [MacroInvoker.cs](file://ClassicAssist.Shared/Data/Macros/MacroInvoker.cs)
- [MacroManager.cs](file://ClassicAssist.Shared/Data/Macros/MacroManager.cs)
- [SystemMessageTextWriter.cs](file://ClassicAssist.Shared/Data/Macros/SystemMessageTextWriter.cs)
- [PythonCompletionData.cs](file://ClassicAssist/Data/Macros/PythonCompletionData.cs)
- [Python.xshd](file://ClassicAssist/Python.xshd)
- [Python.Dark.xshd](file://ClassicAssist/Python.Dark.xshd)
- [DebugWindow.xaml.cs](file://ClassicAssist/UI/Views/DebugWindow.xaml.cs)
- [DebugViewModel.cs](file://ClassicAssist.Shared/UI/ViewModels/DebugViewModel.cs)
**Section sources**
- [MacroBrowserViewModel.cs](file://ClassicAssist/Browser/MacroBrowserViewModel.cs)
- [MacroBrowserControl.xaml.cs](file://ClassicAssist/Browser/MacroBrowserControl.xaml.cs)
- [Repository.cs](file://ClassicAssist/Browser/Models/Repository.cs)
- [Database.cs](file://ClassicAssist/Browser/Data/Database.cs)
- [Category.cs](file://ClassicAssist/Browser/Models/Category.cs)
- [Metadata.cs](file://ClassicAssist/Browser/Models/Metadata.cs)
- [Filter.cs](file://ClassicAssist/Browser/Data/Filter.cs)
- [FilterType.cs](file://ClassicAssist/Browser/Data/FilterType.cs)
- [CategoriesConverter.cs](file://ClassicAssist/Browser/Data/CategoriesConverter.cs)
- [MacrosTabControl.xaml.cs](file://ClassicAssist/UI/Views/MacrosTabControl.xaml.cs)
- [MacrosCommandWindow.xaml.cs](file://ClassicAssist/UI/Views/Macros/MacrosCommandWindow.xaml.cs)
- [AvalonEditBehaviour.cs](file://ClassicAssist/UI/Misc/AvalonEditBehaviour.cs)
- [MacroEntry.cs](file://ClassicAssist.Shared/Data/Macros/MacroEntry.cs)
- [MacroInvoker.cs](file://ClassicAssist.Shared/Data/Macros/MacroInvoker.cs)
- [MacroManager.cs](file://ClassicAssist.Shared/Data/Macros/MacroManager.cs)
- [SystemMessageTextWriter.cs](file://ClassicAssist.Shared/Data/Macros/SystemMessageTextWriter.cs)
- [PythonCompletionData.cs](file://ClassicAssist/Data/Macros/PythonCompletionData.cs)
- [Python.xshd](file://ClassicAssist/Python.xshd)
- [Python.Dark.xshd](file://ClassicAssist/Python.Dark.xshd)
- [DebugWindow.xaml.cs](file://ClassicAssist/UI/Views/DebugWindow.xaml.cs)
- [DebugViewModel.cs](file://ClassicAssist.Shared/UI/ViewModels/DebugViewModel.cs)
## Core Components
- Macro model and metadata:
- Macro entity with properties for identification, content, and metadata
- Category and Metadata models for organization and descriptive information
- Repository and persistence:
- Repository orchestrates loading/saving macros
- Database abstraction for storage operations
- Browser view model:
- Provides filtering, sorting, and category-based views
- Exposes converters to map categories to display values
- Editing UI:
- Macros command window hosts the editor surface
- AvalonEdit behavior wires syntax highlighting and behaviors
- Python integration:
- Completion data source for IntelliSense
- Syntax highlight definitions for light/dark themes
- Execution and diagnostics:
- Macro entry and invoker orchestrate execution
- System message writer routes output to UI
- Debug window and view model provide tracing and inspection
**Section sources**
- [Macro.cs](file://ClassicAssist/Browser/Models/Macro.cs)
- [Category.cs](file://ClassicAssist/Browser/Models/Category.cs)
- [Metadata.cs](file://ClassicAssist/Browser/Models/Metadata.cs)
- [Repository.cs](file://ClassicAssist/Browser/Models/Repository.cs)
- [Database.cs](file://ClassicAssist/Browser/Data/Database.cs)
- [MacroBrowserViewModel.cs](file://ClassicAssist/Browser/MacroBrowserViewModel.cs)
- [CategoriesConverter.cs](file://ClassicAssist/Browser/Data/CategoriesConverter.cs)
- [MacrosCommandWindow.xaml.cs](file://ClassicAssist/UI/Views/Macros/MacrosCommandWindow.xaml.cs)
- [AvalonEditBehaviour.cs](file://ClassicAssist/UI/Misc/AvalonEditBehaviour.cs)
- [PythonCompletionData.cs](file://ClassicAssist/Data/Macros/PythonCompletionData.cs)
- [Python.xshd](file://ClassicAssist/Python.xshd)
- [Python.Dark.xshd](file://ClassicAssist/Python.Dark.xshd)
- [MacroEntry.cs](file://ClassicAssist.Shared/Data/Macros/MacroEntry.cs)
- [MacroInvoker.cs](file://ClassicAssist.Shared/Data/Macros/MacroInvoker.cs)
- [MacroManager.cs](file://ClassicAssist.Shared/Data/Macros/MacroManager.cs)
- [SystemMessageTextWriter.cs](file://ClassicAssist.Shared/Data/Macros/SystemMessageTextWriter.cs)
- [DebugWindow.xaml.cs](file://ClassicAssist/UI/Views/DebugWindow.xaml.cs)
- [DebugViewModel.cs](file://ClassicAssist.Shared/UI/ViewModels/DebugViewModel.cs)
## Architecture Overview
The Macro Editor integrates a browser, an editor, and a runtime. The browser loads and filters macros; the editor provides scripting features; the runtime executes macros and exposes commands. Diagnostics are surfaced through a debug window.
```mermaid
sequenceDiagram
participant User as "User"
participant Browser as "MacroBrowserViewModel"
participant Repo as "Repository"
participant DB as "Database"
participant UI as "MacrosCommandWindow"
participant Edit as "AvalonEditBehaviour"
participant Py as "PythonCompletionData"
participant Inv as "MacroInvoker"
participant Man as "MacroManager"
participant Out as "SystemMessageTextWriter"
participant DBG as "DebugWindow"
User->>Browser : Open Macro Browser
Browser->>Repo : Load macros
Repo->>DB : Read storage
DB-->>Repo : Macro list
Repo-->>Browser : Catalog
User->>UI : Create/Edit macro
UI->>Edit : Configure editor
Edit->>Py : Request completions
Py-->>Edit : Completions
User->>UI : Run macro
UI->>Inv : Execute macro
Inv->>Man : Invoke commands
Man-->>Inv : Results
Inv->>Out : Write messages
Out-->>DBG : Stream logs
DBG-->>User : Show trace/output
```
**Diagram sources**
- [MacroBrowserViewModel.cs](file://ClassicAssist/Browser/MacroBrowserViewModel.cs)
- [Repository.cs](file://ClassicAssist/Browser/Models/Repository.cs)
- [Database.cs](file://ClassicAssist/Browser/Data/Database.cs)
- [MacrosCommandWindow.xaml.cs](file://ClassicAssist/UI/Views/Macros/MacrosCommandWindow.xaml.cs)
- [AvalonEditBehaviour.cs](file://ClassicAssist/UI/Misc/AvalonEditBehaviour.cs)
- [PythonCompletionData.cs](file://ClassicAssist/Data/Macros/PythonCompletionData.cs)
- [MacroInvoker.cs](file://ClassicAssist.Shared/Data/Macros/MacroInvoker.cs)
- [MacroManager.cs](file://ClassicAssist.Shared/Data/Macros/MacroManager.cs)
- [SystemMessageTextWriter.cs](file://ClassicAssist.Shared/Data/Macros/SystemMessageTextWriter.cs)
- [DebugWindow.xaml.cs](file://ClassicAssist/UI/Views/DebugWindow.xaml.cs)
## Detailed Component Analysis
### Macro Model and Organization
- Macro entity holds core fields such as identifier, name, content, and references to metadata.
- Category represents grouping for macros (folders).
- Metadata captures additional attributes like description, author, version, tags, and visibility flags.
- Repository coordinates persistence and retrieval of macros and their metadata.
- Database abstracts storage operations used by the repository.
```mermaid
classDiagram
class Macro {
+string Id
+string Name
+string Content
+string CategoryId
+string MetadataId
}
class Category {
+string Id
+string Name
}
class Metadata {
+string Id
+string Description
+string Author
+string Version
+string Tags
}
class Repository {
+Load()
+Save(macro)
}
class Database {
+Read()
+Write(data)
}
Macro --> Category : "belongs to"
Macro --> Metadata : "has"
Repository --> Database : "uses"
```
**Diagram sources**
- [Macro.cs](file://ClassicAssist/Browser/Models/Macro.cs)
- [Category.cs](file://ClassicAssist/Browser/Models/Category.cs)
- [Metadata.cs](file://ClassicAssist/Browser/Models/Metadata.cs)
- [Repository.cs](file://ClassicAssist/Browser/Models/Repository.cs)
- [Database.cs](file://ClassicAssist/Browser/Data/Database.cs)
**Section sources**
- [Macro.cs](file://ClassicAssist/Browser/Models/Macro.cs)
- [Category.cs](file://ClassicAssist/Browser/Models/Category.cs)
- [Metadata.cs](file://ClassicAssist/Browser/Models/Metadata.cs)
- [Repository.cs](file://ClassicAssist/Browser/Models/Repository.cs)
- [Database.cs](file://ClassicAssist/Browser/Data/Database.cs)
### Browser and Filtering
- MacroBrowserViewModel exposes filtered collections and supports search, category selection, and sorting.
- Filter and FilterType define query criteria and types.
- CategoriesConverter maps category identifiers to human-readable labels for UI binding.
```mermaid
flowchart TD
Start(["Open Browser"]) --> Load["Load catalog via Repository"]
Load --> ApplyFilters{"Apply Filters?"}
ApplyFilters --> |Yes| BuildQuery["Build Filter using FilterType"]
BuildQuery --> Query["Execute query against catalog"]
ApplyFilters --> |No| UseAll["Use full catalog"]
Query --> Display["Display results"]
UseAll --> Display
Display --> End(["Ready to edit/run"])
```
**Diagram sources**
- [MacroBrowserViewModel.cs](file://ClassicAssist/Browser/MacroBrowserViewModel.cs)
- [Filter.cs](file://ClassicAssist/Browser/Data/Filter.cs)
- [FilterType.cs](file://ClassicAssist/Browser/Data/FilterType.cs)
- [CategoriesConverter.cs](file://ClassicAssist/Browser/Data/CategoriesConverter.cs)
- [Repository.cs](file://ClassicAssist/Browser/Models/Repository.cs)
**Section sources**
- [MacroBrowserViewModel.cs](file://ClassicAssist/Browser/MacroBrowserViewModel.cs)
- [Filter.cs](file://ClassicAssist/Browser/Data/Filter.cs)
- [FilterType.cs](file://ClassicAssist/Browser/Data/FilterType.cs)
- [CategoriesConverter.cs](file://ClassicAssist/Browser/Data/CategoriesConverter.cs)
### Script Editing and Python Integration
- MacrosCommandWindow hosts the editor surface and binds to the selected macro.
- AvalonEditBehaviour configures editor behaviors and syntax highlighting.
- PythonCompletionData supplies IntelliSense entries for Python scripts.
- Python.xshd and Python.Dark.xshd define tokenization rules for light/dark themes.
```mermaid
sequenceDiagram
participant UI as "MacrosCommandWindow"
participant Edit as "AvalonEditBehaviour"
participant Py as "PythonCompletionData"
participant Theme as "Python.xshd / Python.Dark.xshd"
UI->>Edit : Initialize editor instance
Edit->>Theme : Load syntax definition
UI->>Py : Request completions on trigger
Py-->>UI : Provide completion items
UI->>Edit : Apply highlighting and completions
```
**Diagram sources**
- [MacrosCommandWindow.xaml.cs](file://ClassicAssist/UI/Views/Macros/MacrosCommandWindow.xaml.cs)
- [AvalonEditBehaviour.cs](file://ClassicAssist/UI/Misc/AvalonEditBehaviour.cs)
- [PythonCompletionData.cs](file://ClassicAssist/Data/Macros/PythonCompletionData.cs)
- [Python.xshd](file://ClassicAssist/Python.xshd)
- [Python.Dark.xshd](file://ClassicAssist/Python.Dark.xshd)
**Section sources**
- [MacrosCommandWindow.xaml.cs](file://ClassicAssist/UI/Views/Macros/MacrosCommandWindow.xaml.cs)
- [AvalonEditBehaviour.cs](file://ClassicAssist/UI/Misc/AvalonEditBehaviour.cs)
- [PythonCompletionData.cs](file://ClassicAssist/Data/Macros/PythonCompletionData.cs)
- [Python.xshd](file://ClassicAssist/Python.xshd)
- [Python.Dark.xshd](file://ClassicAssist/Python.Dark.xshd)
### Macro Execution and Commands
- MacroEntry defines the executable unit and its parameters.
- MacroInvoker orchestrates invocation, context setup, and result handling.
- MacroManager registers and resolves commands available to macros.
- SystemMessageTextWriter streams output for user feedback and debugging.
```mermaid
classDiagram
class MacroEntry {
+string Name
+string Script
+Run(context)
}
class MacroInvoker {
+Invoke(entry)
+SetupContext()
+HandleErrors()
}
class MacroManager {
+RegisterCommands()
+Resolve(commandName)
}
class SystemMessageTextWriter {
+Write(message)
}
MacroInvoker --> MacroEntry : "executes"
MacroInvoker --> MacroManager : "resolves commands"
MacroInvoker --> SystemMessageTextWriter : "writes output"
```
**Diagram sources**
- [MacroEntry.cs](file://ClassicAssist.Shared/Data/Macros/MacroEntry.cs)
- [MacroInvoker.cs](file://ClassicAssist.Shared/Data/Macros/MacroInvoker.cs)
- [MacroManager.cs](file://ClassicAssist.Shared/Data/Macros/MacroManager.cs)
- [SystemMessageTextWriter.cs](file://ClassicAssist.Shared/Data/Macros/SystemMessageTextWriter.cs)
**Section sources**
- [MacroEntry.cs](file://ClassicAssist.Shared/Data/Macros/MacroEntry.cs)
- [MacroInvoker.cs](file://ClassicAssist.Shared/Data/Macros/MacroInvoker.cs)
- [MacroManager.cs](file://ClassicAssist.Shared/Data/Macros/MacroManager.cs)
- [SystemMessageTextWriter.cs](file://ClassicAssist.Shared/Data/Macros/SystemMessageTextWriter.cs)
### Debugging Tools
- DebugWindow surfaces logs, errors, and traces produced during macro execution.
- DebugViewModel manages state and bindings for the debug UI.
- SystemMessageTextWriter feeds messages into the debug stream.
```mermaid
sequenceDiagram
participant Inv as "MacroInvoker"
participant Out as "SystemMessageTextWriter"
participant DBG as "DebugWindow"
participant VM as "DebugViewModel"
Inv->>Out : Write error/info messages
Out->>DBG : Append to log buffer
DBG->>VM : Bind log entries
VM-->>DBG : Render trace and variables
```
**Diagram sources**
- [SystemMessageTextWriter.cs](file://ClassicAssist.Shared/Data/Macros/SystemMessageTextWriter.cs)
- [DebugWindow.xaml.cs](file://ClassicAssist/UI/Views/DebugWindow.xaml.cs)
- [DebugViewModel.cs](file://ClassicAssist.Shared/UI/ViewModels/DebugViewModel.cs)
**Section sources**
- [SystemMessageTextWriter.cs](file://ClassicAssist.Shared/Data/Macros/SystemMessageTextWriter.cs)
- [DebugWindow.xaml.cs](file://ClassicAssist/UI/Views/DebugWindow.xaml.cs)
- [DebugViewModel.cs](file://ClassicAssist.Shared/UI/ViewModels/DebugViewModel.cs)
### Conceptual Overview
- Macro creation workflow:
- Select or create a new macro in the browser
- Assign category and metadata
- Edit script with Python IntelliSense and syntax highlighting
- Save and run in isolation via the command window
- Testing in isolation:
- Use the command window to execute a single macro without global side effects
- Inspect outputs and errors in the debug window
- Organizing large collections:
- Group macros by categories (folders)
- Use metadata tags and descriptions for discoverability
- Leverage filters to narrow down sets during development
[No sources needed since this section doesn't analyze specific files]
## Dependency Analysis
The following diagram highlights key dependencies among macro-related components.
```mermaid
graph LR
BrowserVM["MacroBrowserViewModel"] --> Repo["Repository"]
Repo --> DB["Database"]
BrowserVM --> Cat["Category"]
BrowserVM --> Meta["Metadata"]
BrowserVM --> Filt["Filter / FilterType"]
BrowserVM --> CConv["CategoriesConverter"]
CmdWin["MacrosCommandWindow"] --> Edit["AvalonEditBehaviour"]
Edit --> PyDef["Python.xshd / Python.Dark.xshd"]
CmdWin --> PyComp["PythonCompletionData"]
CmdWin --> Entry["MacroEntry"]
Entry --> Inv["MacroInvoker"]
Inv --> Man["MacroManager"]
Inv --> Out["SystemMessageTextWriter"]
Out --> DBG["DebugWindow"]
```
**Diagram sources**
- [MacroBrowserViewModel.cs](file://ClassicAssist/Browser/MacroBrowserViewModel.cs)
- [Repository.cs](file://ClassicAssist/Browser/Models/Repository.cs)
- [Database.cs](file://ClassicAssist/Browser/Data/Database.cs)
- [Category.cs](file://ClassicAssist/Browser/Models/Category.cs)
- [Metadata.cs](file://ClassicAssist/Browser/Models/Metadata.cs)
- [Filter.cs](file://ClassicAssist/Browser/Data/Filter.cs)
- [FilterType.cs](file://ClassicAssist/Browser/Data/FilterType.cs)
- [CategoriesConverter.cs](file://ClassicAssist/Browser/Data/CategoriesConverter.cs)
- [MacrosCommandWindow.xaml.cs](file://ClassicAssist/UI/Views/Macros/MacrosCommandWindow.xaml.cs)
- [AvalonEditBehaviour.cs](file://ClassicAssist/UI/Misc/AvalonEditBehaviour.cs)
- [Python.xshd](file://ClassicAssist/Python.xshd)
- [Python.Dark.xshd](file://ClassicAssist/Python.Dark.xshd)
- [PythonCompletionData.cs](file://ClassicAssist/Data/Macros/PythonCompletionData.cs)
- [MacroEntry.cs](file://ClassicAssist.Shared/Data/Macros/MacroEntry.cs)
- [MacroInvoker.cs](file://ClassicAssist.Shared/Data/Macros/MacroInvoker.cs)
- [MacroManager.cs](file://ClassicAssist.Shared/Data/Macros/MacroManager.cs)
- [SystemMessageTextWriter.cs](file://ClassicAssist.Shared/Data/Macros/SystemMessageTextWriter.cs)
- [DebugWindow.xaml.cs](file://ClassicAssist/UI/Views/DebugWindow.xaml.cs)
**Section sources**
- [MacroBrowserViewModel.cs](file://ClassicAssist/Browser/MacroBrowserViewModel.cs)
- [Repository.cs](file://ClassicAssist/Browser/Models/Repository.cs)
- [Database.cs](file://ClassicAssist/Browser/Data/Database.cs)
- [Category.cs](file://ClassicAssist/Browser/Models/Category.cs)
- [Metadata.cs](file://ClassicAssist/Browser/Models/Metadata.cs)
- [Filter.cs](file://ClassicAssist/Browser/Data/Filter.cs)
- [FilterType.cs](file://ClassicAssist/Browser/Data/FilterType.cs)
- [CategoriesConverter.cs](file://ClassicAssist/Browser/Data/CategoriesConverter.cs)
- [MacrosCommandWindow.xaml.cs](file://ClassicAssist/UI/Views/Macros/MacrosCommandWindow.xaml.cs)
- [AvalonEditBehaviour.cs](file://ClassicAssist/UI/Misc/AvalonEditBehaviour.cs)
- [Python.xshd](file://ClassicAssist/Python.xshd)
- [Python.Dark.xshd](file://ClassicAssist/Python.Dark.xshd)
- [PythonCompletionData.cs](file://ClassicAssist/Data/Macros/PythonCompletionData.cs)
- [MacroEntry.cs](file://ClassicAssist.Shared/Data/Macros/MacroEntry.cs)
- [MacroInvoker.cs](file://ClassicAssist.Shared/Data/Macros/MacroInvoker.cs)
- [MacroManager.cs](file://ClassicAssist.Shared/Data/Macros/MacroManager.cs)
- [SystemMessageTextWriter.cs](file://ClassicAssist.Shared/Data/Macros/SystemMessageTextWriter.cs)
- [DebugWindow.xaml.cs](file://ClassicAssist/UI/Views/DebugWindow.xaml.cs)
## Performance Considerations
- Efficient filtering:
- Prefer precise filters and avoid overly broad queries when browsing large macro sets
- Lazy loading:
- Defer heavy operations until the macro is opened or executed
- Editor responsiveness:
- Keep syntax highlighting definitions minimal and theme-aware
- Limit completion payload size and cache frequently used entries
- Execution overhead:
- Reuse command resolution where possible
- Minimize I/O during runs; batch writes to the message writer
- Memory management:
- Dispose of large buffers and clear debug logs after sessions
[No sources needed since this section provides general guidance]
## Troubleshooting Guide
- Syntax issues:
- Verify Python syntax highlighting is active and that completion suggestions appear
- Execution errors:
- Check the debug window for stack traces and system messages
- Confirm command availability via the macro manager
- Persistence problems:
- Ensure repository and database paths are valid and accessible
- Category and metadata:
- Validate category IDs and metadata fields for consistency
**Section sources**
- [AvalonEditBehaviour.cs](file://ClassicAssist/UI/Misc/AvalonEditBehaviour.cs)
- [PythonCompletionData.cs](file://ClassicAssist/Data/Macros/PythonCompletionData.cs)
- [SystemMessageTextWriter.cs](file://ClassicAssist.Shared/Data/Macros/SystemMessageTextWriter.cs)
- [DebugWindow.xaml.cs](file://ClassicAssist/UI/Views/DebugWindow.xaml.cs)
- [Repository.cs](file://ClassicAssist/Browser/Models/Repository.cs)
- [Database.cs](file://ClassicAssist/Browser/Data/Database.cs)
- [Category.cs](file://ClassicAssist/Browser/Models/Category.cs)
- [Metadata.cs](file://ClassicAssist/Browser/Models/Metadata.cs)
## Conclusion
The Macro Editor combines a robust browser, a feature-rich editor with Python support, and a flexible runtime with strong diagnostics. By leveraging categories, metadata, and filters, users can organize large macro collections effectively. The integrated debugging tools streamline troubleshooting, while performance-oriented practices ensure smooth operation even with extensive macro libraries.
[No sources needed since this section summarizes without analyzing specific files]
## Appendices
### Practical Examples
- Complex automation workflow:
- Compose multi-step sequences using reusable commands
- Parameterize inputs via macro metadata and pass them at runtime
- Use filters to isolate test subsets during development
- Organizing large collections:
- Group by functional areas (e.g., combat, crafting, navigation)
- Tag macros with version and author metadata for collaboration
- Maintain consistent naming conventions and concise descriptions
[No sources needed since this section doesn't analyze specific files]