diff --git a/Source/Editor/Modules/SourceCodeEditing/InBuildSourceCodeEditor.cs b/Source/Editor/Modules/SourceCodeEditing/InBuildSourceCodeEditor.cs index 64e3f8d9c..5c4a366be 100644 --- a/Source/Editor/Modules/SourceCodeEditing/InBuildSourceCodeEditor.cs +++ b/Source/Editor/Modules/SourceCodeEditing/InBuildSourceCodeEditor.cs @@ -54,6 +54,9 @@ namespace FlaxEditor.Modules.SourceCodeEditing case CodeEditorTypes.VSCode: Name = "Visual Studio Code"; break; + case CodeEditorTypes.VSCodeInsiders: + Name = "Visual Studio Code - Insiders"; + break; default: throw new ArgumentOutOfRangeException(nameof(type), type, null); } } @@ -68,7 +71,9 @@ namespace FlaxEditor.Modules.SourceCodeEditing { switch (Type) { - case CodeEditorTypes.VSCode: return "-vscode"; + case CodeEditorTypes.VSCodeInsiders: + case CodeEditorTypes.VSCode: + return "-vscode"; default: return null; } } diff --git a/Source/Editor/Scripting/CodeEditor.h b/Source/Editor/Scripting/CodeEditor.h index 1a89eb13d..546907464 100644 --- a/Source/Editor/Scripting/CodeEditor.h +++ b/Source/Editor/Scripting/CodeEditor.h @@ -62,6 +62,11 @@ API_ENUM(Namespace="FlaxEditor", Attributes="HideInEditor") enum class CodeEdito /// VSCode, + /// + /// Visual Studio Code Insiders + /// + VSCodeInsiders, + MAX }; diff --git a/Source/Editor/Scripting/CodeEditors/VisualStudioCodeEditor.cpp b/Source/Editor/Scripting/CodeEditors/VisualStudioCodeEditor.cpp index 27e8e5e48..6abca62ba 100644 --- a/Source/Editor/Scripting/CodeEditors/VisualStudioCodeEditor.cpp +++ b/Source/Editor/Scripting/CodeEditors/VisualStudioCodeEditor.cpp @@ -8,8 +8,9 @@ #include "Engine/Engine/Globals.h" #include "Engine/Platform/Win32/IncludeWindowsHeaders.h" -VisualStudioCodeEditor::VisualStudioCodeEditor(const String& execPath) +VisualStudioCodeEditor::VisualStudioCodeEditor(const String& execPath, const bool isInsiders) : _execPath(execPath) + , _isInsiders(isInsiders) , _workspacePath(Globals::ProjectFolder / Editor::Project->Name + TEXT(".code-workspace")) { } @@ -18,29 +19,40 @@ void VisualStudioCodeEditor::FindEditors(Array* output) { #if PLATFORM_WINDOWS String cmd; + bool isInsiders = false; if (Platform::ReadRegValue(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Classes\\Applications\\Code.exe\\shell\\open\\command"), TEXT(""), &cmd) || cmd.IsEmpty()) { if (Platform::ReadRegValue(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Classes\\Applications\\Code.exe\\shell\\open\\command"), TEXT(""), &cmd) || cmd.IsEmpty()) { - return; + if (Platform::ReadRegValue(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Classes\\Applications\\Code - Insiders.exe\\shell\\open\\command"), TEXT(""), &cmd) || cmd.IsEmpty()) + { + if (Platform::ReadRegValue(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Classes\\Applications\\Code - Insiders.exe\\shell\\open\\command"), TEXT(""), &cmd) || cmd.IsEmpty()) + { + return; + } + else + isInsiders = true; + } + else + isInsiders = true; } } const String path = cmd.Substring(1, cmd.Length() - String(TEXT("\" \"%1\"")).Length() - 1); if (FileSystem::FileExists(path)) { - output->Add(New(path)); + output->Add(New(path, isInsiders)); } #endif } CodeEditorTypes VisualStudioCodeEditor::GetType() const { - return CodeEditorTypes::VSCode; + return _isInsiders ? CodeEditorTypes::VSCodeInsiders : CodeEditorTypes::VSCode; } String VisualStudioCodeEditor::GetName() const { - return TEXT("Visual Studio Code"); + return _isInsiders ? TEXT("Visual Studio Code - Insiders") : TEXT("Visual Studio Code"); } void VisualStudioCodeEditor::OpenFile(const String& path, int32 line) diff --git a/Source/Editor/Scripting/CodeEditors/VisualStudioCodeEditor.h b/Source/Editor/Scripting/CodeEditors/VisualStudioCodeEditor.h index 8742cef31..27939b845 100644 --- a/Source/Editor/Scripting/CodeEditors/VisualStudioCodeEditor.h +++ b/Source/Editor/Scripting/CodeEditors/VisualStudioCodeEditor.h @@ -13,6 +13,7 @@ private: String _execPath; String _workspacePath; + bool _isInsiders; public: @@ -20,7 +21,8 @@ public: /// Initializes a new instance of the class. /// /// Executable file path - VisualStudioCodeEditor(const String& execPath); + /// Is insiders edition + VisualStudioCodeEditor(const String& execPath, const bool isInsiders); public: