From ae438b64889742040b9d6a3c2bc9c0018134272d Mon Sep 17 00:00:00 2001 From: Tsvetilian Yankov Date: Tue, 13 Dec 2022 17:56:10 +0200 Subject: [PATCH 01/11] Add support on Windows --- app/src/lib/editors/win32.ts | 45 +++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/app/src/lib/editors/win32.ts b/app/src/lib/editors/win32.ts index d24776e5ee..074b8b88dd 100644 --- a/app/src/lib/editors/win32.ts +++ b/app/src/lib/editors/win32.ts @@ -18,6 +18,14 @@ interface IWindowsAppInformation { type RegistryKey = { key: HKEY; subKey: string } +type WindowsExternalEditorJetbrainsToolbox = { + /** + * Default shell script name for JetBrains Products + * Note: Don't use on JetBrains community and edu editions + */ + readonly toolboxShellScriptName?: string +} + type WindowsExternalEditorPathInfo = | { /** @@ -60,7 +68,8 @@ type WindowsExternalEditor = { /** Value of the Publisher registry key that belongs to this editor. */ readonly publisher: string -} & WindowsExternalEditorPathInfo +} & WindowsExternalEditorPathInfo & + WindowsExternalEditorJetbrainsToolbox const registryKey = (key: HKEY, ...subKeys: string[]): RegistryKey => ({ key, @@ -312,6 +321,7 @@ const editors: WindowsExternalEditor[] = [ name: 'JetBrains Webstorm', registryKeys: registryKeysForJetBrainsIDE('WebStorm'), executableShimPaths: executableShimPathsForJetBrainsIDE('webstorm'), + toolboxShellScriptName: 'webstorm', displayNamePrefix: 'WebStorm', publisher: 'JetBrains s.r.o.', }, @@ -319,6 +329,7 @@ const editors: WindowsExternalEditor[] = [ name: 'JetBrains Phpstorm', registryKeys: registryKeysForJetBrainsIDE('PhpStorm'), executableShimPaths: executableShimPathsForJetBrainsIDE('phpstorm'), + toolboxShellScriptName: 'phpstorm', displayNamePrefix: 'PhpStorm', publisher: 'JetBrains s.r.o.', }, @@ -326,6 +337,7 @@ const editors: WindowsExternalEditor[] = [ name: 'Android Studio', registryKeys: [LocalMachineUninstallKey('Android Studio')], installLocationRegistryKey: 'UninstallString', + toolboxShellScriptName: 'studio', executableShimPaths: [ ['..', 'bin', `studio64.exe`], ['..', 'bin', `studio.exe`], @@ -349,6 +361,7 @@ const editors: WindowsExternalEditor[] = [ name: 'JetBrains Rider', registryKeys: registryKeysForJetBrainsIDE('JetBrains Rider'), executableShimPaths: executableShimPathsForJetBrainsIDE('rider'), + toolboxShellScriptName: 'rider', displayNamePrefix: 'JetBrains Rider', publisher: 'JetBrains s.r.o.', }, @@ -363,6 +376,7 @@ const editors: WindowsExternalEditor[] = [ name: 'JetBrains IntelliJ Idea', registryKeys: registryKeysForJetBrainsIDE('IntelliJ IDEA'), executableShimPaths: executableShimPathsForJetBrainsIDE('idea'), + toolboxShellScriptName: 'idea', displayNamePrefix: 'IntelliJ IDEA ', publisher: 'JetBrains s.r.o.', }, @@ -379,6 +393,7 @@ const editors: WindowsExternalEditor[] = [ name: 'JetBrains PyCharm', registryKeys: registryKeysForJetBrainsIDE('PyCharm'), executableShimPaths: executableShimPathsForJetBrainsIDE('pycharm'), + toolboxShellScriptName: 'pycharm', displayNamePrefix: 'PyCharm ', publisher: 'JetBrains s.r.o.', }, @@ -393,6 +408,7 @@ const editors: WindowsExternalEditor[] = [ name: 'JetBrains CLion', registryKeys: registryKeysForJetBrainsIDE('CLion'), executableShimPaths: executableShimPathsForJetBrainsIDE('clion'), + toolboxShellScriptName: 'clion', displayNamePrefix: 'CLion ', publisher: 'JetBrains s.r.o.', }, @@ -400,6 +416,7 @@ const editors: WindowsExternalEditor[] = [ name: 'JetBrains RubyMine', registryKeys: registryKeysForJetBrainsIDE('RubyMine'), executableShimPaths: executableShimPathsForJetBrainsIDE('rubymine'), + toolboxShellScriptName: 'rubymine', displayNamePrefix: 'RubyMine ', publisher: 'JetBrains s.r.o.', }, @@ -407,6 +424,7 @@ const editors: WindowsExternalEditor[] = [ name: 'JetBrains GoLand', registryKeys: registryKeysForJetBrainsIDE('GoLand'), executableShimPaths: executableShimPathsForJetBrainsIDE('goland'), + toolboxShellScriptName: 'goland', displayNamePrefix: 'GoLand ', publisher: 'JetBrains s.r.o.', }, @@ -465,6 +483,31 @@ async function findApplication(editor: WindowsExternalEditor) { } } + if (editor.toolboxShellScriptName) { + const toolboxRegistryReference = [ + CurrentUserUninstallKey('toolbox'), + Wow64LocalMachineUninstallKey('toolbox'), + ] + + for (const { key, subKey } of toolboxRegistryReference) { + const keys = enumerateValues(key, subKey) + + if (keys.length > 0) { + const editorPathInToolbox = Path.join( + getKeyOrEmpty(keys, 'UninstallString'), + '..', + '..', + 'scripts', + `${editor.toolboxShellScriptName}.cmd` + ) + const exists = await pathExists(editorPathInToolbox) + if (exists) { + return editorPathInToolbox + } + } + } + } + return null } From 45d18e19d6e0f7357dff4f97dc9af7779e5a16f0 Mon Sep 17 00:00:00 2001 From: Tsvetilian Yankov Date: Tue, 13 Dec 2022 17:56:46 +0200 Subject: [PATCH 02/11] Add JetBrains Fleet for Windows --- app/src/lib/editors/win32.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/src/lib/editors/win32.ts b/app/src/lib/editors/win32.ts index 074b8b88dd..2bf9e8de4a 100644 --- a/app/src/lib/editors/win32.ts +++ b/app/src/lib/editors/win32.ts @@ -428,6 +428,14 @@ const editors: WindowsExternalEditor[] = [ displayNamePrefix: 'GoLand ', publisher: 'JetBrains s.r.o.', }, + { + name: 'JetBrains Fleet', + registryKeys: [LocalMachineUninstallKey('Fleet')], + toolboxShellScriptName: 'fleet', + installLocationRegistryKey: 'DisplayIcon', + displayNamePrefix: 'Fleet ', + publisher: 'JetBrains s.r.o.', + }, ] function getKeyOrEmpty( From b5e38986920e5fe5175db91bc9e9ae6d6c732542 Mon Sep 17 00:00:00 2001 From: Tsvetilian Yankov Date: Tue, 13 Dec 2022 20:46:41 +0200 Subject: [PATCH 03/11] Add Fleet as supported editor on darwin systems --- app/src/lib/editors/darwin.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/lib/editors/darwin.ts b/app/src/lib/editors/darwin.ts index b9690c82c5..aee891a40f 100644 --- a/app/src/lib/editors/darwin.ts +++ b/app/src/lib/editors/darwin.ts @@ -144,6 +144,10 @@ const editors: IDarwinExternalEditor[] = [ name: 'Lite XL', bundleIdentifiers: ['com.lite-xl'], }, + { + name: 'JetBrains Fleet', + bundleIdentifiers: ['Fleet.app'], + }, ] async function findApplication( From 99208c4603c009c1f438e374a8691a71a8722ca5 Mon Sep 17 00:00:00 2001 From: Tsvetilian Yankov Date: Tue, 13 Dec 2022 21:16:41 +0200 Subject: [PATCH 04/11] Update docs --- docs/technical/editor-integration.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/docs/technical/editor-integration.md b/docs/technical/editor-integration.md index 095c4cbc08..57a348860e 100644 --- a/docs/technical/editor-integration.md +++ b/docs/technical/editor-integration.md @@ -203,6 +203,25 @@ location with an interface that doesn't change between updates. Desktop will confirm this file exists on disk before launching - if it's missing or lost it won't let you launch the external editor. +### Support for JetBrains Toolbox editors + +Now GitHub Desktop support editors installed through JetBrains Toolbox. +The technique used to achieve that is using `toolboxShellScriptName` parameter +to check if, in the default section for scripts in JetBrainsm Toolbox a script +with the corresponding name exists. + + +```ts +{ + name: 'JetBrains PyCharm', + ... + toolboxShellScriptName: 'pycharm', +}, +``` + +The current method supports only the default generated JetBrains Toolbox shell +scripts. + ## macOS The source for the editor integration on macOS is found in From 1bb55e7caaf52e1803e64654610181145231787a Mon Sep 17 00:00:00 2001 From: Tsvetilian Yankov Date: Tue, 13 Dec 2022 21:20:06 +0200 Subject: [PATCH 05/11] Update type docs --- app/src/lib/editors/win32.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/lib/editors/win32.ts b/app/src/lib/editors/win32.ts index 2bf9e8de4a..ed03b184cf 100644 --- a/app/src/lib/editors/win32.ts +++ b/app/src/lib/editors/win32.ts @@ -21,6 +21,8 @@ type RegistryKey = { key: HKEY; subKey: string } type WindowsExternalEditorJetbrainsToolbox = { /** * Default shell script name for JetBrains Products + * To get the script name go to: + * JetBrains Toolbox > Editor settings > Shell script name * Note: Don't use on JetBrains community and edu editions */ readonly toolboxShellScriptName?: string From f8067510f0e784e383daeb4d741926fc05d661fe Mon Sep 17 00:00:00 2001 From: Tsvetilian Yankov Date: Tue, 13 Dec 2022 22:13:47 +0200 Subject: [PATCH 06/11] Change JetBrains Fleet to Fleet Matching the name of JetBrains Fleet with the other JetBrains products in GitHub Desktop on macOS --- app/src/lib/editors/darwin.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/lib/editors/darwin.ts b/app/src/lib/editors/darwin.ts index aee891a40f..3086ebacff 100644 --- a/app/src/lib/editors/darwin.ts +++ b/app/src/lib/editors/darwin.ts @@ -145,7 +145,7 @@ const editors: IDarwinExternalEditor[] = [ bundleIdentifiers: ['com.lite-xl'], }, { - name: 'JetBrains Fleet', + name: 'Fleet', bundleIdentifiers: ['Fleet.app'], }, ] From 79f86735a685e7fe0b63e68994c8eaa914f03a87 Mon Sep 17 00:00:00 2001 From: Tsvetilian Yankov Date: Wed, 14 Dec 2022 00:45:00 +0200 Subject: [PATCH 07/11] Add Fleet to the list with supported editors --- docs/technical/editor-integration.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/technical/editor-integration.md b/docs/technical/editor-integration.md index 57a348860e..4d36523b0d 100644 --- a/docs/technical/editor-integration.md +++ b/docs/technical/editor-integration.md @@ -44,6 +44,7 @@ These editors are currently supported: - [Notepad++](https://notepad-plus-plus.org/) - [RStudio](https://rstudio.com/) - [Aptana Studio](http://www.aptana.com/) + - [JetBrains Fleet](https://www.jetbrains.com/fleet/) These are defined in a list at the top of the file: @@ -257,6 +258,7 @@ These editors are currently supported: - [Aptana Studio](http://www.aptana.com/) - [Emacs](https://www.gnu.org/software/emacs/) - [Lite XL](https://lite-xl.com/) + - [JetBrains Fleet](https://www.jetbrains.com/fleet/) These are defined in a list at the top of the file: From f4b221afe9d58657f3ce66c7836aec6c2a1e07c5 Mon Sep 17 00:00:00 2001 From: Tsvetilian Yankov Date: Fri, 16 Dec 2022 22:03:37 +0200 Subject: [PATCH 08/11] Remove unnecessary type for toolbox --- app/src/lib/editors/win32.ts | 45 +++++++++++++++++------------------- 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/app/src/lib/editors/win32.ts b/app/src/lib/editors/win32.ts index ed03b184cf..f55ecb8ad8 100644 --- a/app/src/lib/editors/win32.ts +++ b/app/src/lib/editors/win32.ts @@ -18,16 +18,6 @@ interface IWindowsAppInformation { type RegistryKey = { key: HKEY; subKey: string } -type WindowsExternalEditorJetbrainsToolbox = { - /** - * Default shell script name for JetBrains Products - * To get the script name go to: - * JetBrains Toolbox > Editor settings > Shell script name - * Note: Don't use on JetBrains community and edu editions - */ - readonly toolboxShellScriptName?: string -} - type WindowsExternalEditorPathInfo = | { /** @@ -70,8 +60,15 @@ type WindowsExternalEditor = { /** Value of the Publisher registry key that belongs to this editor. */ readonly publisher: string -} & WindowsExternalEditorPathInfo & - WindowsExternalEditorJetbrainsToolbox + + /** + * Default shell script name for JetBrains Products + * To get the script name go to: + * JetBrains Toolbox > Editor settings > Shell script name + * Note: Don't use on JetBrains community and edu editions + */ + readonly jetBrainsToolboxScriptName?: string +} & WindowsExternalEditorPathInfo const registryKey = (key: HKEY, ...subKeys: string[]): RegistryKey => ({ key, @@ -323,7 +320,7 @@ const editors: WindowsExternalEditor[] = [ name: 'JetBrains Webstorm', registryKeys: registryKeysForJetBrainsIDE('WebStorm'), executableShimPaths: executableShimPathsForJetBrainsIDE('webstorm'), - toolboxShellScriptName: 'webstorm', + jetBrainsToolboxScriptName: 'webstorm', displayNamePrefix: 'WebStorm', publisher: 'JetBrains s.r.o.', }, @@ -331,7 +328,7 @@ const editors: WindowsExternalEditor[] = [ name: 'JetBrains Phpstorm', registryKeys: registryKeysForJetBrainsIDE('PhpStorm'), executableShimPaths: executableShimPathsForJetBrainsIDE('phpstorm'), - toolboxShellScriptName: 'phpstorm', + jetBrainsToolboxScriptName: 'phpstorm', displayNamePrefix: 'PhpStorm', publisher: 'JetBrains s.r.o.', }, @@ -339,7 +336,7 @@ const editors: WindowsExternalEditor[] = [ name: 'Android Studio', registryKeys: [LocalMachineUninstallKey('Android Studio')], installLocationRegistryKey: 'UninstallString', - toolboxShellScriptName: 'studio', + jetBrainsToolboxScriptName: 'studio', executableShimPaths: [ ['..', 'bin', `studio64.exe`], ['..', 'bin', `studio.exe`], @@ -363,7 +360,7 @@ const editors: WindowsExternalEditor[] = [ name: 'JetBrains Rider', registryKeys: registryKeysForJetBrainsIDE('JetBrains Rider'), executableShimPaths: executableShimPathsForJetBrainsIDE('rider'), - toolboxShellScriptName: 'rider', + jetBrainsToolboxScriptName: 'rider', displayNamePrefix: 'JetBrains Rider', publisher: 'JetBrains s.r.o.', }, @@ -378,7 +375,7 @@ const editors: WindowsExternalEditor[] = [ name: 'JetBrains IntelliJ Idea', registryKeys: registryKeysForJetBrainsIDE('IntelliJ IDEA'), executableShimPaths: executableShimPathsForJetBrainsIDE('idea'), - toolboxShellScriptName: 'idea', + jetBrainsToolboxScriptName: 'idea', displayNamePrefix: 'IntelliJ IDEA ', publisher: 'JetBrains s.r.o.', }, @@ -395,7 +392,7 @@ const editors: WindowsExternalEditor[] = [ name: 'JetBrains PyCharm', registryKeys: registryKeysForJetBrainsIDE('PyCharm'), executableShimPaths: executableShimPathsForJetBrainsIDE('pycharm'), - toolboxShellScriptName: 'pycharm', + jetBrainsToolboxScriptName: 'pycharm', displayNamePrefix: 'PyCharm ', publisher: 'JetBrains s.r.o.', }, @@ -410,7 +407,7 @@ const editors: WindowsExternalEditor[] = [ name: 'JetBrains CLion', registryKeys: registryKeysForJetBrainsIDE('CLion'), executableShimPaths: executableShimPathsForJetBrainsIDE('clion'), - toolboxShellScriptName: 'clion', + jetBrainsToolboxScriptName: 'clion', displayNamePrefix: 'CLion ', publisher: 'JetBrains s.r.o.', }, @@ -418,7 +415,7 @@ const editors: WindowsExternalEditor[] = [ name: 'JetBrains RubyMine', registryKeys: registryKeysForJetBrainsIDE('RubyMine'), executableShimPaths: executableShimPathsForJetBrainsIDE('rubymine'), - toolboxShellScriptName: 'rubymine', + jetBrainsToolboxScriptName: 'rubymine', displayNamePrefix: 'RubyMine ', publisher: 'JetBrains s.r.o.', }, @@ -426,14 +423,14 @@ const editors: WindowsExternalEditor[] = [ name: 'JetBrains GoLand', registryKeys: registryKeysForJetBrainsIDE('GoLand'), executableShimPaths: executableShimPathsForJetBrainsIDE('goland'), - toolboxShellScriptName: 'goland', + jetBrainsToolboxScriptName: 'goland', displayNamePrefix: 'GoLand ', publisher: 'JetBrains s.r.o.', }, { name: 'JetBrains Fleet', registryKeys: [LocalMachineUninstallKey('Fleet')], - toolboxShellScriptName: 'fleet', + jetBrainsToolboxScriptName: 'fleet', installLocationRegistryKey: 'DisplayIcon', displayNamePrefix: 'Fleet ', publisher: 'JetBrains s.r.o.', @@ -493,7 +490,7 @@ async function findApplication(editor: WindowsExternalEditor) { } } - if (editor.toolboxShellScriptName) { + if (editor.jetBrainsToolboxScriptName) { const toolboxRegistryReference = [ CurrentUserUninstallKey('toolbox'), Wow64LocalMachineUninstallKey('toolbox'), @@ -508,7 +505,7 @@ async function findApplication(editor: WindowsExternalEditor) { '..', '..', 'scripts', - `${editor.toolboxShellScriptName}.cmd` + `${editor.jetBrainsToolboxScriptName}.cmd` ) const exists = await pathExists(editorPathInToolbox) if (exists) { From 7204c01aad6f9427130f494f358ff58e72818c51 Mon Sep 17 00:00:00 2001 From: Tsvetilian Yankov Date: Fri, 16 Dec 2022 22:07:54 +0200 Subject: [PATCH 09/11] Extract JetBrains Toolbox detection to a function --- app/src/lib/editors/win32.ts | 46 +++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/app/src/lib/editors/win32.ts b/app/src/lib/editors/win32.ts index f55ecb8ad8..9c16da9d6e 100644 --- a/app/src/lib/editors/win32.ts +++ b/app/src/lib/editors/win32.ts @@ -490,27 +490,35 @@ async function findApplication(editor: WindowsExternalEditor) { } } - if (editor.jetBrainsToolboxScriptName) { - const toolboxRegistryReference = [ - CurrentUserUninstallKey('toolbox'), - Wow64LocalMachineUninstallKey('toolbox'), - ] + return findJetBrainsToolboxApplication(editor) +} - for (const { key, subKey } of toolboxRegistryReference) { - const keys = enumerateValues(key, subKey) +/** + * Find JetBrain products installed through JetBrains Toolbox + */ +async function findJetBrainsToolboxApplication(editor: WindowsExternalEditor) { + if (!editor.jetBrainsToolboxScriptName) { + return null + } - if (keys.length > 0) { - const editorPathInToolbox = Path.join( - getKeyOrEmpty(keys, 'UninstallString'), - '..', - '..', - 'scripts', - `${editor.jetBrainsToolboxScriptName}.cmd` - ) - const exists = await pathExists(editorPathInToolbox) - if (exists) { - return editorPathInToolbox - } + const toolboxRegistryReference = [ + CurrentUserUninstallKey('toolbox'), + Wow64LocalMachineUninstallKey('toolbox'), + ] + + for (const { key, subKey } of toolboxRegistryReference) { + const keys = enumerateValues(key, subKey) + if (keys.length > 0) { + const editorPathInToolbox = Path.join( + getKeyOrEmpty(keys, 'UninstallString'), + '..', + '..', + 'scripts', + `${editor.jetBrainsToolboxScriptName}.cmd` + ) + const exists = await pathExists(editorPathInToolbox) + if (exists) { + return editorPathInToolbox } } } From 9a3db00ce4c2b95bc1d6dd257a6dff8c946b7ab5 Mon Sep 17 00:00:00 2001 From: Tsvetilian Yankov Date: Sat, 17 Dec 2022 00:01:29 +0200 Subject: [PATCH 10/11] Update docs --- app/src/lib/editors/win32.ts | 6 ++++-- docs/technical/editor-integration.md | 22 +++++++++++++++++----- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/app/src/lib/editors/win32.ts b/app/src/lib/editors/win32.ts index 9c16da9d6e..bf786e8f3a 100644 --- a/app/src/lib/editors/win32.ts +++ b/app/src/lib/editors/win32.ts @@ -62,10 +62,12 @@ type WindowsExternalEditor = { readonly publisher: string /** - * Default shell script name for JetBrains Products + * Default shell script name for JetBrains Product * To get the script name go to: * JetBrains Toolbox > Editor settings > Shell script name - * Note: Don't use on JetBrains community and edu editions + * + * Go to `/docs/techical/editor-integration.md` for more information on + * how to use this field. */ readonly jetBrainsToolboxScriptName?: string } & WindowsExternalEditorPathInfo diff --git a/docs/technical/editor-integration.md b/docs/technical/editor-integration.md index 4d36523b0d..f34c0d4357 100644 --- a/docs/technical/editor-integration.md +++ b/docs/technical/editor-integration.md @@ -206,20 +206,32 @@ missing or lost it won't let you launch the external editor. ### Support for JetBrains Toolbox editors -Now GitHub Desktop support editors installed through JetBrains Toolbox. -The technique used to achieve that is using `toolboxShellScriptName` parameter -to check if, in the default section for scripts in JetBrainsm Toolbox a script +Now GitHub Desktop support editors installed through JetBrains Toolbox. +The technique used to achieve that is using `jetBrainsToolboxScriptName` field +to check if, in the default section for scripts in JetBrainsm Toolbox, a script with the corresponding name exists. - ```ts { name: 'JetBrains PyCharm', ... - toolboxShellScriptName: 'pycharm', + jetBrainsToolboxScriptName: 'pycharm', }, ``` +**Note:** Don't use `jetBrainsToolboxScriptName` field on JetBrains community and edu +editions. When JetBrains Toolbox generates the scripts. It doesn't consider the +different editions, so when a new product edition is installed, it generates a shell +script with the same name that overrides the existing one. So it's impossible to +differentiate between the various editions of the same product. + +**Overriding example:** +1. Install JetBrains PyCharm Community +2. At this point, JetBrains Toolbox will generate a shell script called `pycharm` +3. Install JetBrains PyCharm Professional +4. JetBrains Toolbox will generate a new script with the same name, `pycharm` +and will override the script generated for the community version + The current method supports only the default generated JetBrains Toolbox shell scripts. From 7f5d8b6d860104f6c46626dbe742ba6262a07fdf Mon Sep 17 00:00:00 2001 From: Tsvetilian Yankov Date: Thu, 12 Jan 2023 00:01:26 +0200 Subject: [PATCH 11/11] Update the usage docs for JetBrains Toolbox --- docs/technical/editor-integration.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/technical/editor-integration.md b/docs/technical/editor-integration.md index f34c0d4357..6a780b8be4 100644 --- a/docs/technical/editor-integration.md +++ b/docs/technical/editor-integration.md @@ -219,11 +219,11 @@ with the corresponding name exists. }, ``` -**Note:** Don't use `jetBrainsToolboxScriptName` field on JetBrains community and edu -editions. When JetBrains Toolbox generates the scripts. It doesn't consider the -different editions, so when a new product edition is installed, it generates a shell -script with the same name that overrides the existing one. So it's impossible to -differentiate between the various editions of the same product. +**Note:** Use `jetBrainsToolboxScriptName` field only on the main edition of +the product. When JetBrains Toolbox generates the scripts, it doesn't consider the +different editions, so when a new product edition is installed, it generates a +shell script with the same name that overrides the existing one. So it's +impossible to differentiate between the various editions of the same product. **Overriding example:** 1. Install JetBrains PyCharm Community