The above Gif length is 1 minute 35 seconds
Only 287.1 MB Memory usage after opening the source code in a published executable of itself and parsing the entire solution with its own - from scratch - C# parser (v0.9.7.7)
The gif is sped up by cutting the frames in half.
https://luthetus.github.io/Luthetus.Ide/
- A free and open source IDE
- Runs on Linux, Windows, and Mac
- Written with the .NET environment: C#, Blazor UI Framework, and a lightweight Photino webview.
The IDE can support any programming language by way of the 'ICompilerService' interface (see links to source code below).
See for example the C# support:
- CSharpParser.cs
- CSharpBinder.Main.cs
- CSharpBinder.Expressions.cs
- CSharpCompilerService.cs
- CSharpResource.cs
These are links to the interfaces:
One maps a file extension to an ICompilerService with the:
The colors used for syntax highlighting and presentation are provided with the:
NOTE: The prefix 'Luthetus' has been ommitted here from some types for brevity.
Given: <App/>, the '.razor' pseudo code has the following as App's descendent nodes.
- <CommonInitializer/> | codebehind
- override void OnInitialized()
- AppOptions.SetActiveThemeRecordKey(default);
- AppOptions.SetFromLocalStorageAsync();
- AddToContextSwitch(this); // 'Ctrl' + 'Tab' keybind
- <DragInitializer/> | codebehind | css
- <DialogInitializer/> | codebehind
- <WidgetInitializer/> | codebehind
- <NotificationInitializer/> | codebehind
- <DropdownInitializer/> | codebehind
- <OutlineInitializer/> | codebehind | css
- override void OnInitialized()
- <TextEditorInitializer/> | only has codebehind, no markup
- override void OnInitialized()
- EditorOptions.RegisterThemes(customThemeList);
- EditorOptions.SetActiveThemeRecordKey(default);
- EditorOptions.SetFromLocalStorageAsync();
- AddToContextSwitch(this);
- RegisterKeymapLayer();
- override void OnInitialized()
- <LuthetusIdeInitializer/> | codebehind
- override void OnInitialized()
- EditorOptions.RegisterThemes(customThemeList);
- RegisterTerminals(terminalList);
- InitializePanelTabs();
- InitializeCommands();
- override Task OnAfterRenderAsync(bool firstRender)
- if (LuthetusHostingKind == Photino) then JsRuntime.GetLuthetusIdeApi().PreventDefaultBrowserKeybindings();
- <ContextInitializerDisplay/> | codebehind
- override void OnInitialized()
- Header
- Body
- PanelGroupLeft | PanelGroupDisplay.razor | .cs | .css
- <TabListDisplay/> | .cs | .css
- PanelGroupBody
- DynamicComponent | learn.microsoft.com
- <EditorDisplay/> | .cs | .css
- PanelGroupRight | PanelGroupDisplay.razor | .cs | .css
- <TabListDisplay/> | .cs | .css
- PanelGroupBody
- DynamicComponent | learn.microsoft.com
- PanelGroupLeft | PanelGroupDisplay.razor | .cs | .css
- Footer
- PanelGroupBottom | PanelGroupDisplay.razor | .cs | .css
- PanelGroupTabs
- <TabListDisplay/> | .cs | .css
- InteractiveIconUi
- PanelGroupBody
- DynamicComponent | learn.microsoft.com
- PanelGroupTabs
- PanelGroupBottom | PanelGroupDisplay.razor | .cs | .css
The individual libraries used in Luthetus.Ide are available as NuGet Packages.
There is a README.md for each of the libraries to aid in installation:
There are videos about the IDE here: youtube channel.