From 5ceb25acd487bd064c52c9cd016db828e92b1c74 Mon Sep 17 00:00:00 2001 From: Sam Tran Date: Sun, 6 Oct 2024 16:02:16 -0700 Subject: [PATCH 01/12] Update Gradle and build dependencies - Gradle upgraded from 6.6.1 to 8.10.2 - IntelliJ Platform plugin upgraded from 0.4.26 to 2.1.0 - Changelog plugin upgraded from 0.5.0 to 2.2.1 - JDK version upgraded from 8 to 17 - Minimum supported IDEs bumped from 2020.2 to 2023.1 --- CHANGELOG.md | 12 +- README.md | 351 +++++++++++++---------- build.gradle.kts | 131 ++++++--- gradle.properties | 28 +- gradle/libs.versions.toml | 9 + gradle/wrapper/gradle-wrapper.properties | 4 +- settings.gradle.kts | 3 + src/main/resources/META-INF/plugin.xml | 3 - 8 files changed, 331 insertions(+), 210 deletions(-) create mode 100644 gradle/libs.versions.toml diff --git a/CHANGELOG.md b/CHANGELOG.md index 85d5850..483410e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,15 +1,9 @@ -## [Unreleased] -### Added - -### Changed - -### Deprecated +# Changelog -### Removed +## [Unreleased] -### Fixed +[Unreleased]: https://github.com/samvtran/jetbrains-macos-keybindings-for-all/commits -### Security ## [2.0.0] ### Added - Updated to match latest keymap as of [367cd5f](https://github.com/JetBrains/intellij-community/blob/fb0eb45e7d27dffbb490030c623bcf65eb402aeb/platform/platform-resources/src/keymaps/Mac%20OS%20X%2010.5%2B.xml). diff --git a/README.md b/README.md index 3e1713f..984c708 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,10 @@ > [!TIP] > 👋 **Hello from April 2024!** -> I use this keymap every single day. Please take the lack of updates as a testament to the stability -> of keyboard workflows despite recent UI overhauls across the JetBrains portfolio. If you notice any issues, please [let me know](https://github.com/samvtran/jetbrains-macos-keybindings-for-all/issues/new). +> I use this keymap every single day. Please take the lack of updates as a testament to the +> stability +> of keyboard workflows despite recent UI overhauls across the JetBrains portfolio. If you notice +> any issues, +> please [let me know](https://github.com/samvtran/jetbrains-macos-keybindings-for-all/issues/new). # JetBrains macOS Keymap for Windows and Linux @@ -9,193 +12,223 @@ [Cheatsheet](Keymap-macOS%20For%20All.pdf) -This repo converts the macOS keymap (previously known as Mac OS X 10.5+) in JetBrains IDEs from macOS-specific shortcuts to shortcuts without `meta` (i.e., the Command/splat/cloverleaf interchange from hell). +This repo converts the macOS keymap (previously known as Mac OS X 10.5+) in JetBrains IDEs from +macOS-specific shortcuts to shortcuts without `meta` (i.e., the Command/splat/cloverleaf interchange +from hell). -While some keybindings are close to their original, others have more modifier keys or different bindings altogether to avoid conflicts. +While some keybindings are close to their original, others have more modifier keys or different +bindings altogether to avoid conflicts. ## Build -Follow JetBrains' [guide](https://www.jetbrains.org/intellij/sdk/docs/tutorials/build_system/prerequisites.html) for using Gradle for plugin development. + +Follow +JetBrains' [guide](https://www.jetbrains.org/intellij/sdk/docs/tutorials/build_system/prerequisites.html) +for using Gradle for plugin development. ## Installation -Install the plugin from the [plugin marketplace](https://plugins.jetbrains.com/plugin/13968-macos-for-all) or -grab the zip file from the [latest release](https://github.com/samvtran/jetbrains-macos-keybindings-for-all/releases/latest) and install manually. +Install the plugin from +the [plugin marketplace](https://plugins.jetbrains.com/plugin/13968-macos-for-all) or +grab the zip file from +the [latest release](https://github.com/samvtran/jetbrains-macos-keybindings-for-all/releases/latest) +and install manually. ## Release -For release tasks, the `INTELLIJ_PUBLISH_TOKEN` environment variable should be available. + +For signing and releasing the plugin, this repo uses the environment variables outlined in the IntelliJ +Platform Plugin +Template [environment variables section](https://github.com/JetBrains/intellij-platform-plugin-template?tab=readme-ov-file#environment-variables): + +| Name | Description | +|------------------------|-----------------------------------------------| +| `PRIVATE_KEY` | Certificate private key for signing | +| `PRIVATE_KEY_PASSWORD` | Password for private key | +| `CERTIFICATE_CHAIN` | Certificate chain for signing | +| `PUBLISH_TOKEN` | Token for publishing to JetBrains Marketplace | ## Issues -If you notice any issues, please report them [here](https://github.com/samvtran/jetbrains-macos-keybindings-for-all/issues/new)! + +If you notice any issues, please report +them [here](https://github.com/samvtran/jetbrains-macos-keybindings-for-all/issues/new)! ## Key Updates -| Actions | macOS Keybindings | New Keybindings | -| --: | -- | -- | -| ActivateProjectToolWindow | `Command-1` | `Alt-1` | -| ActivateFavoritesToolWindow | `Command-2` | `Alt-2` | -| ActivateFindToolWindow | `Command-3` | `Alt-3` | -| ActivateRunToolWindow | `Command-4` | `Alt-4` | -| ActivateDebugToolWindow | `Command-5` | `Alt-5` | -| ActivateProblemsViewToolWindow | `Command-6` | `Alt-6` | -| ActivateStructureToolWindow | `Command-7` | `Alt-7` | -| ActivateServicesToolWindow | `Command-8` | `Alt-8` | -| ActivateVersionControlToolWindow | `Command-9` | `Alt-9` | -| ActivateCommitToolWindow | `Command-0` | `Alt-0` | -| Back | `Command-[`
`Command-Alt-Left` | `Control-[` | -| ChangesView.Move | `Command-Shift-M` | `Control-Shift-M` | -| ChooseDebugConfiguration | `Control-Alt-D` | `Control-Alt-Shift-D` | -| ChooseRunConfiguration | `Control-Alt-R` | `Control-Alt-Shift-R` | -| CloseContent | `Command-W` | `Control-W` | -| ContextHelp | `Command-Shift-F1` | `Control-Shift-F1` | -| Debug | `Control-D` | `Control-Alt-D` | -| Diff.NextChange | `Command-Shift-]`
`Control-Right` | `Control-Shift-]` | -| Diff.PrevChange | `Command-Shift-[`
`Control-Left` | `Control-Shift-[` | -| EditorCodeBlockEnd | `Command-Alt-]` | `Control-Alt-]` | -| EditorCodeBlockEndWithSelection | `Command-Alt-Shift-]` | `Control-Alt-Shift-]` | -| EditorCodeBlockStart | `Command-Alt-[` | `Control-Alt-[` | -| EditorCodeBlockStartWithSelection | `Command-Alt-Shift-[` | `Control-Alt-Shift-[` | -| EditorDeleteLine | `Command-Backspace` | `Control-Backspace` | -| EditorLineEnd | `Command-Right` | `Control-Right` | -| EditorLineEndWithSelection | `Command-Shift-Right` | `Control-Shift-End` | -| EditorLineStart | `Command-Left` | `Control-Left` | -| EditorLineStartWithSelection | `Command-Shift-Left` | `Control-Shift-Home` | -| EditorLookupDown | `Control-Down` | `Control-Alt-Down` | -| EditorLookupUp | `Control-Up` | `Control-Alt-Up` | -| EditorMatchBrace | `Control-M` | `Control-Alt-M` | -| EditorToggleColumnMode | `Command-Shift-8` | `Control-Alt-Shift-8` | -| EditSource | `Command-Down` | `Control-Down` | -| EmojiAndSymbols | `Command-Control-Space` | `Control-Alt-Shift-Space` | -| Exit | `Command-Q` | `Control-Q` | -| ExpandAllToLevel1 | `Command-Alt-NumPad[*] + 1` | `Control-Alt-NumPad[*] + 1` | -| ExpandAllToLevel2 | `Command-Alt-NumPad[*] + 2` | `Control-Alt-NumPad[*] + 2` | -| ExpandAllToLevel3 | `Command-Alt-NumPad[*] + 3` | `Control-Alt-NumPad[*] + 3` | -| ExpandAllToLevel4 | `Command-Alt-NumPad[*] + 4` | `Control-Alt-NumPad[*] + 4` | -| ExpandAllToLevel5 | `Command-Alt-NumPad[*] + 5` | `Control-Alt-NumPad[*] + 5` | -| ExportToTextFile | `Control-O` | `Control-Shift-O` | -| FileChooser.TogglePathShowing | `Command-P` | `Control-P` | -| Find | `Command-F` | `Control-F` | -| FindInPath | `Command-Shift-F` | `Control-Shift-F` | -| FindNext | `Command-G` | `Control-Alt-G` | -| FindPrevious | `Command-Shift-G` | `Alt-Shift-G` | -| Forward | `Command-]`
`Command-Alt-Right` | `Control-]` | -| Generate | `Command-N` | `Control-N` | -| GotoChangedFile | `Command-O` | `Control-O` | -| GotoClass | `Command-O` | `Control-O` | -| GotoFile | `Command-Shift-O` | `Control-Shift-O` | -| GotoLine | `Command-L` | `Control-L` | -| GotoRelated | `Control-Meta-Up` | `Control-Alt-Home` | -| GotoSymbol | `Command-Alt-O` | `Control-Alt-O` | -| GotoTypeDeclaration | `Command-Shift-B`
`Control-Shift-B`
`Command-Shift-button1` | `Control-Shift-B`
`Control-Shift-button` | -| MethodDown | `Control-Down` | `Control-Alt-Down` | -| MethodUp | `Control-Up` | `Control-Alt-Up` | -| MinimizeCurrentWindow | `Command-M` | `Control-M` | -| NewElement | `Command-N` | `Control-N` | -| NewScratchFile | `Command-Shift-N` | `Control-Shift-N` | -| NextEditorTab | `Control-Shift-Right` | `Control-Alt-Shift-Right` | -| NextProjectWindow | ``Command-Alt-` `` | ``Control-Alt-` `` | -| NextSplitter | `Alt-Tab` | `Control-Alt-Left` | -| NextTab | `Command-Shift-]`
`Control-Right` | `Control-Shift-]` | -| OptimizeImports | `Control-Alt-O` | `Control-Alt-Shift-O` | -| OverrideMethods | `Control-O` | `Alt-Shift-O` | -| PreviousEditorTab | `Control-Shift-Left` | `Control-Alt-Shift-Left` | -| PreviousProjectWindow | ``Command-Alt-Shift-` `` | ``Control-Alt-Shift-` `` | -| PreviousSplitter | `Alt-Shift-Tab` | `Control-Alt-Right` | -| PreviousTab | `Command-Shift-[`
`Control-Left` | `Control-Shift-[` | -| QuickImplementations | `Command-Y` | `Control-Y` | -| Refresh | `Command-R` | `Control-R`
`Control-F5` | -| ReplaceInPath | `Command-Shift-R` | `Control-Shift-R` | -| Rerun | `Command-R` | `Control-R` | -| Run | `Control-R` | `Control-Alt-R` | -| RunClass | `Control-Shift-R` | `Control-Shift-C` | -| ServiceView.ShowServices | `Command-Shift-T` | `Control-Shift-T` | -| SafeDelete | `Command-Delete` | `Control-Delete` | -| SearchEverywhere.NavigateToNextGroup | `Command-Down` | `Control-Down` | -| SearchEverywhere.NavigateToPrevGroup | `Command-Up` | `Control-Up` | -| SelectAllOccurrences | `Command-Control-G` | `Control-Alt-Shift-G` | -| ShowBookmarks | `Command-F3` | `Control-F3` | -| ShowContent | None | `Control-Shift-Down` | -| ShowNavBar | `Command-Up` | `Control-Up` | -| ShowProjectStructureSettings | `Command-;` | `Control-;` | -| ShowSettings | `Command-,` | `Control-,` | -| TestGestureAction | `Command-1` | `Control-Alt-1` | -| ToggleFullScreen | `Command-Control-F` | `Control-Alt-Shift-F` | -| Undo | `Command-Z` | `Control-Z` | -| Vcs.MoveChangedLinesToChangelist | `Command-Shift-M` | `Control-Shift-M` | -| Vcs.QuickListPopupAction | `Control-V` | `Control-Shift-V` | -| Vcs.ShowMessageHistory | `Command-E` | `Control-E` | -| Vcs.UpdateProject | `Command-T` | `Control-Alt-Shift-T` | -| VcsHistory.ShowAllAffected | `Command-Control-A` | `Control-Alt-A` | -| ZoomCurrentWindow | `Command-Control-=` | `Control-=` | +| Actions | macOS Keybindings | New Keybindings | +|-------------------------------------:|-----------------------------------------------------------------------|-----------------------------------------------| +| ActivateProjectToolWindow | `Command-1` | `Alt-1` | +| ActivateFavoritesToolWindow | `Command-2` | `Alt-2` | +| ActivateFindToolWindow | `Command-3` | `Alt-3` | +| ActivateRunToolWindow | `Command-4` | `Alt-4` | +| ActivateDebugToolWindow | `Command-5` | `Alt-5` | +| ActivateProblemsViewToolWindow | `Command-6` | `Alt-6` | +| ActivateStructureToolWindow | `Command-7` | `Alt-7` | +| ActivateServicesToolWindow | `Command-8` | `Alt-8` | +| ActivateVersionControlToolWindow | `Command-9` | `Alt-9` | +| ActivateCommitToolWindow | `Command-0` | `Alt-0` | +| Back | `Command-[`
`Command-Alt-Left` | `Control-[` | +| ChangesView.Move | `Command-Shift-M` | `Control-Shift-M` | +| ChooseDebugConfiguration | `Control-Alt-D` | `Control-Alt-Shift-D` | +| ChooseRunConfiguration | `Control-Alt-R` | `Control-Alt-Shift-R` | +| CloseContent | `Command-W` | `Control-W` | +| ContextHelp | `Command-Shift-F1` | `Control-Shift-F1` | +| Debug | `Control-D` | `Control-Alt-D` | +| Diff.NextChange | `Command-Shift-]`
`Control-Right` | `Control-Shift-]` | +| Diff.PrevChange | `Command-Shift-[`
`Control-Left` | `Control-Shift-[` | +| EditorCodeBlockEnd | `Command-Alt-]` | `Control-Alt-]` | +| EditorCodeBlockEndWithSelection | `Command-Alt-Shift-]` | `Control-Alt-Shift-]` | +| EditorCodeBlockStart | `Command-Alt-[` | `Control-Alt-[` | +| EditorCodeBlockStartWithSelection | `Command-Alt-Shift-[` | `Control-Alt-Shift-[` | +| EditorDeleteLine | `Command-Backspace` | `Control-Backspace` | +| EditorLineEnd | `Command-Right` | `Control-Right` | +| EditorLineEndWithSelection | `Command-Shift-Right` | `Control-Shift-End` | +| EditorLineStart | `Command-Left` | `Control-Left` | +| EditorLineStartWithSelection | `Command-Shift-Left` | `Control-Shift-Home` | +| EditorLookupDown | `Control-Down` | `Control-Alt-Down` | +| EditorLookupUp | `Control-Up` | `Control-Alt-Up` | +| EditorMatchBrace | `Control-M` | `Control-Alt-M` | +| EditorToggleColumnMode | `Command-Shift-8` | `Control-Alt-Shift-8` | +| EditSource | `Command-Down` | `Control-Down` | +| EmojiAndSymbols | `Command-Control-Space` | `Control-Alt-Shift-Space` | +| Exit | `Command-Q` | `Control-Q` | +| ExpandAllToLevel1 | `Command-Alt-NumPad[*] + 1` | `Control-Alt-NumPad[*] + 1` | +| ExpandAllToLevel2 | `Command-Alt-NumPad[*] + 2` | `Control-Alt-NumPad[*] + 2` | +| ExpandAllToLevel3 | `Command-Alt-NumPad[*] + 3` | `Control-Alt-NumPad[*] + 3` | +| ExpandAllToLevel4 | `Command-Alt-NumPad[*] + 4` | `Control-Alt-NumPad[*] + 4` | +| ExpandAllToLevel5 | `Command-Alt-NumPad[*] + 5` | `Control-Alt-NumPad[*] + 5` | +| ExportToTextFile | `Control-O` | `Control-Shift-O` | +| FileChooser.TogglePathShowing | `Command-P` | `Control-P` | +| Find | `Command-F` | `Control-F` | +| FindInPath | `Command-Shift-F` | `Control-Shift-F` | +| FindNext | `Command-G` | `Control-Alt-G` | +| FindPrevious | `Command-Shift-G` | `Alt-Shift-G` | +| Forward | `Command-]`
`Command-Alt-Right` | `Control-]` | +| Generate | `Command-N` | `Control-N` | +| GotoChangedFile | `Command-O` | `Control-O` | +| GotoClass | `Command-O` | `Control-O` | +| GotoFile | `Command-Shift-O` | `Control-Shift-O` | +| GotoLine | `Command-L` | `Control-L` | +| GotoRelated | `Control-Meta-Up` | `Control-Alt-Home` | +| GotoSymbol | `Command-Alt-O` | `Control-Alt-O` | +| GotoTypeDeclaration | `Command-Shift-B`
`Control-Shift-B`
`Command-Shift-button1` | `Control-Shift-B`
`Control-Shift-button` | +| MethodDown | `Control-Down` | `Control-Alt-Down` | +| MethodUp | `Control-Up` | `Control-Alt-Up` | +| MinimizeCurrentWindow | `Command-M` | `Control-M` | +| NewElement | `Command-N` | `Control-N` | +| NewScratchFile | `Command-Shift-N` | `Control-Shift-N` | +| NextEditorTab | `Control-Shift-Right` | `Control-Alt-Shift-Right` | +| NextProjectWindow | ``Command-Alt-` `` | ``Control-Alt-` `` | +| NextSplitter | `Alt-Tab` | `Control-Alt-Left` | +| NextTab | `Command-Shift-]`
`Control-Right` | `Control-Shift-]` | +| OptimizeImports | `Control-Alt-O` | `Control-Alt-Shift-O` | +| OverrideMethods | `Control-O` | `Alt-Shift-O` | +| PreviousEditorTab | `Control-Shift-Left` | `Control-Alt-Shift-Left` | +| PreviousProjectWindow | ``Command-Alt-Shift-` `` | ``Control-Alt-Shift-` `` | +| PreviousSplitter | `Alt-Shift-Tab` | `Control-Alt-Right` | +| PreviousTab | `Command-Shift-[`
`Control-Left` | `Control-Shift-[` | +| QuickImplementations | `Command-Y` | `Control-Y` | +| Refresh | `Command-R` | `Control-R`
`Control-F5` | +| ReplaceInPath | `Command-Shift-R` | `Control-Shift-R` | +| Rerun | `Command-R` | `Control-R` | +| Run | `Control-R` | `Control-Alt-R` | +| RunClass | `Control-Shift-R` | `Control-Shift-C` | +| ServiceView.ShowServices | `Command-Shift-T` | `Control-Shift-T` | +| SafeDelete | `Command-Delete` | `Control-Delete` | +| SearchEverywhere.NavigateToNextGroup | `Command-Down` | `Control-Down` | +| SearchEverywhere.NavigateToPrevGroup | `Command-Up` | `Control-Up` | +| SelectAllOccurrences | `Command-Control-G` | `Control-Alt-Shift-G` | +| ShowBookmarks | `Command-F3` | `Control-F3` | +| ShowContent | None | `Control-Shift-Down` | +| ShowNavBar | `Command-Up` | `Control-Up` | +| ShowProjectStructureSettings | `Command-;` | `Control-;` | +| ShowSettings | `Command-,` | `Control-,` | +| TestGestureAction | `Command-1` | `Control-Alt-1` | +| ToggleFullScreen | `Command-Control-F` | `Control-Alt-Shift-F` | +| Undo | `Command-Z` | `Control-Z` | +| Vcs.MoveChangedLinesToChangelist | `Command-Shift-M` | `Control-Shift-M` | +| Vcs.QuickListPopupAction | `Control-V` | `Control-Shift-V` | +| Vcs.ShowMessageHistory | `Command-E` | `Control-E` | +| Vcs.UpdateProject | `Command-T` | `Control-Alt-Shift-T` | +| VcsHistory.ShowAllAffected | `Command-Control-A` | `Control-Alt-A` | +| ZoomCurrentWindow | `Command-Control-=` | `Control-=` | ## Removed Keybindings -| Actions | macOS Keybindings | Alternatives | -| --: | -- | -- | -| $Delete | `Command-Backspace` | Just backspace | -| Back | `Command-Alt-Left` | `Control-[` | -| CommentByBlockComment | `Command-Alt-/`
`Command-Shift-/` | `Control-Shift-/` | -| EditorDown | `Control-N` | `Down` | -| EditorLeft | `Control-B` | `Left` | -| EditorLineEnd | `Control-E` | `Control-Right`
`End` | -| EditorLineStart | `Control-A` | `Control-Left`
`Home` | -| EditorPreviousWord | `Control-Alt-B` | `Alt-Left` | -| EditorPreviousWordWithSelection | `Control-Alt-Shift-B` | `Alt-Shift-Left` | -| EditorNextWord | `Control-Alt-F` | `Alt-Right` | -| EditorNextWordWithSelection | `Control-Alt-Shift-F` | `Alt-Shift-Right` | -| EditorRight | `Control-F` | `Right` | -| EditorToggleColumnMode | `Command-Shift-NumPad[*]` | `Control-Alt-Shift-8` | -| EditorUp | `Control-P` | `Up` | -| FindNext | `Control-L` | `F3` | -| FindPrevious | `Control-Shift-L` | `Shift-F3` | -| Forward | `Command-Alt-Right` | `Control-]` -| RerunTests | `Command-Control-R` | `Alt-Shift-R` | -| Resume | `Command-Alt-R` | `F9` | -| Vcs.ShowMessageHistory | `Control-M` | `Control-E` | +| Actions | macOS Keybindings | Alternatives | +|--------------------------------:|----------------------------------------|----------------------------| +| $Delete | `Command-Backspace` | Just backspace | +| Back | `Command-Alt-Left` | `Control-[` | +| CommentByBlockComment | `Command-Alt-/`
`Command-Shift-/` | `Control-Shift-/` | +| EditorDown | `Control-N` | `Down` | +| EditorLeft | `Control-B` | `Left` | +| EditorLineEnd | `Control-E` | `Control-Right`
`End` | +| EditorLineStart | `Control-A` | `Control-Left`
`Home` | +| EditorPreviousWord | `Control-Alt-B` | `Alt-Left` | +| EditorPreviousWordWithSelection | `Control-Alt-Shift-B` | `Alt-Shift-Left` | +| EditorNextWord | `Control-Alt-F` | `Alt-Right` | +| EditorNextWordWithSelection | `Control-Alt-Shift-F` | `Alt-Shift-Right` | +| EditorRight | `Control-F` | `Right` | +| EditorToggleColumnMode | `Command-Shift-NumPad[*]` | `Control-Alt-Shift-8` | +| EditorUp | `Control-P` | `Up` | +| FindNext | `Control-L` | `F3` | +| FindPrevious | `Control-Shift-L` | `Shift-F3` | +| Forward | `Command-Alt-Right` | `Control-]` +| RerunTests | `Command-Control-R` | `Alt-Shift-R` | +| Resume | `Command-Alt-R` | `F9` | +| Vcs.ShowMessageHistory | `Control-M` | `Control-E` | ## Default Implicit Keybindings -These keybindings are set by the [`$default`](https://github.com/JetBrains/intellij-community/blob/master/platform/platform-resources/src/keymaps/%24default.xml) keymap + +These keybindings are set by the [ +`$default`](https://github.com/JetBrains/intellij-community/blob/master/platform/platform-resources/src/keymaps/%24default.xml) +keymap and are not currently included, even if the macOS keymap defines them explicitly. -| Actions | macOS Keybindings | $default Keybindings | -| --: | -- | -- | -| ChangesView.GroupBy.Directory | `Control-P` | `Control-Alt-P` | -| ChangesView.GroupBy.Module | `Control-M` | `Control-Alt-M` | -| Diff.ApplyLeftSide | `Control-Shift-Right` | `Alt-Shift-Right` | -| Diff.ApplyRightSide | `Control-Shift-Left` | `Alt-Shift-Left` | -| ForceRefresh | `Command-Alt-Shift-R` | `Control-Shift-F5` | -| GoToDeclaration | `Command-B`
`Command-click`
`Middle click`
Force touch | `Control-B`
`Control-click` | -| RunToCursor | `Alt-F9`
Force touch | `Alt-F9` | -| ServiceView.GroupByContributor | `Control-T` | `Control-Alt-T` | -| ServiceView.GroupByServiceGroups | `Control-P` | `Control-Alt-P` | -| TodoViewGroupByShowModules | `Control-M` | `Control-Alt-M` | -| TodoViewGroupByShowPackages | `Control-P` | `Control-Alt-P` | -| TodoViewGroupByFlattenPackage | `Control-F` | `Control-Alt-C` | -| ToggleAmendCommitMode | `Control-Alt-M` | `Alt-M` | -| ToggleFindInSelection | `Control-Alt-E` | `Control-Alt-E` | -| UsageGrouping.Module | `Control-M` | `Control-Alt-M` | -| UsageGrouping.Directory | `Control-P` | `Control-Alt-P` | -| UsageGrouping.UsageType | `Control-T` | `Control-Alt-T` | -| UsageGrouping.FlattenModules | `Control-O` | `Control-Alt-O` | -| UsageGrouping.FileStructure | `Control-F` | `Control-Alt-F` | -| UsageGrouping.DirectoryStructure | `Control-D` | `Control-Alt-D` | +| Actions | macOS Keybindings | $default Keybindings | +|---------------------------------:|-----------------------------------------------------------------------|----------------------------------| +| ChangesView.GroupBy.Directory | `Control-P` | `Control-Alt-P` | +| ChangesView.GroupBy.Module | `Control-M` | `Control-Alt-M` | +| Diff.ApplyLeftSide | `Control-Shift-Right` | `Alt-Shift-Right` | +| Diff.ApplyRightSide | `Control-Shift-Left` | `Alt-Shift-Left` | +| ForceRefresh | `Command-Alt-Shift-R` | `Control-Shift-F5` | +| GoToDeclaration | `Command-B`
`Command-click`
`Middle click`
Force touch | `Control-B`
`Control-click` | +| RunToCursor | `Alt-F9`
Force touch | `Alt-F9` | +| ServiceView.GroupByContributor | `Control-T` | `Control-Alt-T` | +| ServiceView.GroupByServiceGroups | `Control-P` | `Control-Alt-P` | +| TodoViewGroupByShowModules | `Control-M` | `Control-Alt-M` | +| TodoViewGroupByShowPackages | `Control-P` | `Control-Alt-P` | +| TodoViewGroupByFlattenPackage | `Control-F` | `Control-Alt-C` | +| ToggleAmendCommitMode | `Control-Alt-M` | `Alt-M` | +| ToggleFindInSelection | `Control-Alt-E` | `Control-Alt-E` | +| UsageGrouping.Module | `Control-M` | `Control-Alt-M` | +| UsageGrouping.Directory | `Control-P` | `Control-Alt-P` | +| UsageGrouping.UsageType | `Control-T` | `Control-Alt-T` | +| UsageGrouping.FlattenModules | `Control-O` | `Control-Alt-O` | +| UsageGrouping.FileStructure | `Control-F` | `Control-Alt-F` | +| UsageGrouping.DirectoryStructure | `Control-D` | `Control-Alt-D` | ## Missing/no-op Keybindings -This list may change over time. -| Actions | Keybindings | Reason | -| --: | -- | -- | -| PrevWindow/NextWindow | ``Command+Shift+` ``/``Command+` `` | Workaround for [platform-specific issues](https://youtrack.jetbrains.com/issue/IDEA-217613). For Linux, use ``Alt-`​`` in supported WMs. For Windows, try [AltBacktick](https://github.com/akiver/AltBacktick) or [window-switcher](https://github.com/sigoden/window-switcher). | -| EmojiAndSymbols | `Command-Control-Space` | This is rebound to `Control-Alt-Shift-Space` but [does not function outside macOS](https://github.com/JetBrains/intellij-community/blob/b69a466631b01c408897e1b9f4159f6632470a0b/platform/platform-impl/src/com/intellij/ide/actions/MacEmojiAndSymbolsInputAction.java). For Windows, use `Super+;` or `Super+.` to activate the built-in emoji picker. | +This list may change over time. +| Actions | Keybindings | Reason | +|----------------------:|-------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| PrevWindow/NextWindow | ``Command+Shift+` ``/``Command+` `` | Workaround for [platform-specific issues](https://youtrack.jetbrains.com/issue/IDEA-217613). For Linux, use ``Alt-`​`` in supported WMs. For Windows, try [AltBacktick](https://github.com/akiver/AltBacktick) or [window-switcher](https://github.com/sigoden/window-switcher). | +| EmojiAndSymbols | `Command-Control-Space` | This is rebound to `Control-Alt-Shift-Space` but [does not function outside macOS](https://github.com/JetBrains/intellij-community/blob/b69a466631b01c408897e1b9f4159f6632470a0b/platform/platform-impl/src/com/intellij/ide/actions/MacEmojiAndSymbolsInputAction.java). For Windows, use `Super+;` or `Super+.` to activate the built-in emoji picker. | ## FAQ + ### Oh no! My favorite keybinding changed after an update! What do I do? -This project tries to follow the macOS keybindings (still called "Mac OS X 10.5+" in the JetBrains codebase) as closely as possible. + +This project tries to follow the macOS keybindings (still called "Mac OS X 10.5+" in the JetBrains +codebase) as closely as possible. As new UI elements and IDE features are added, JetBrains may add and remove keybindings to better match their evolving feature set. If you find that your muscle memory is getting in the way of a new binding, make a copy of this keymap for your own custom shortcuts. ### I just switched from macOS to Linux/Windows. What can I do to make the transition easier? -If you don't use Caps Lock very often, try rebinding it to Command on macOS and Control on Windows and Linux for more consistent hand and finger positioning. -Use a plugin like [Key Promoter X](https://plugins.jetbrains.com/plugin/9792-key-promoter-x) to help with learning new shortcuts. +If you don't use Caps Lock very often, try rebinding it to Command on macOS and Control on Windows +and Linux for more consistent hand and finger positioning. + +Use a plugin like [Key Promoter X](https://plugins.jetbrains.com/plugin/9792-key-promoter-x) to help +with learning new shortcuts. diff --git a/build.gradle.kts b/build.gradle.kts index 09f081a..8466ae1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,57 +1,116 @@ -import org.jetbrains.changelog.closure +import org.jetbrains.changelog.Changelog import org.jetbrains.changelog.markdownToHTML plugins { - id("org.jetbrains.intellij") version "0.4.26" - id("org.jetbrains.changelog") version "0.5.0" + java + alias(libs.plugins.intelliJPlatform) + alias(libs.plugins.changelog) } -val pluginGroup: String by project -val pluginName_: String by project -val pluginVersion: String by project - -val platformVersion: String by project - -group = pluginGroup -version = pluginVersion - -buildscript { - repositories { - // Workaround: https://github.com/JetBrains/gradle-intellij-plugin/issues/537 - maven("https://jetbrains.bintray.com/intellij-plugin-service") +java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) } } +// Configure project's dependencies repositories { mavenCentral() - jcenter() -} -// See https://github.com/JetBrains/gradle-intellij-plugin/ -intellij { - pluginName = pluginName_ - version = platformVersion - updateSinceUntilBuild = false + // IntelliJ Platform Gradle Plugin Repositories Extension - read more: https://plugins.jetbrains.com/docs/intellij/tools-intellij-platform-gradle-plugin-repositories-extension.html + intellijPlatform { + defaultRepositories() + } } -tasks { - // Set the compatibility versions to 1.8 - withType { - sourceCompatibility = "1.8" - targetCompatibility = "1.8" +// Dependencies are managed with Gradle version catalog - read more: https://docs.gradle.org/current/userguide/platforms.html#sub:version-catalog +dependencies { + // IntelliJ Platform Gradle Plugin Dependencies Extension - read more: https://plugins.jetbrains.com/docs/intellij/tools-intellij-platform-gradle-plugin-dependencies-extension.html + intellijPlatform { + create(providers.gradleProperty("platformType"), providers.gradleProperty("platformVersion")) + + // Plugin Dependencies. Uses `platformBundledPlugins` property from the gradle.properties file for bundled IntelliJ Platform plugins. + bundledPlugins(providers.gradleProperty("platformBundledPlugins").map { it.split(',') }) + + // Plugin Dependencies. Uses `platformPlugins` property from the gradle.properties file for plugin from JetBrains Marketplace. + plugins(providers.gradleProperty("platformPlugins").map { it.split(',') }) + + pluginVerifier() + zipSigner() } +} - patchPluginXml { - changeNotes( - closure { - changelog.getLatest().toHTML() +// Configure IntelliJ Platform Gradle Plugin - read more: https://plugins.jetbrains.com/docs/intellij/tools-intellij-platform-gradle-plugin-extension.html +intellijPlatform { + pluginConfiguration { + version = providers.gradleProperty("pluginVersion") + + // Extract the section from README.md and provide for the plugin's manifest + description = providers.fileContents(layout.projectDirectory.file("README.md")).asText.map { + val start = "" + val end = "" + + with(it.lines()) { + if (!containsAll(listOf(start, end))) { + throw GradleException("Plugin description section not found in README.md:\n$start ... $end") } - ) + subList(indexOf(start) + 1, indexOf(end)).joinToString("\n").let(::markdownToHTML) + } + } + + val changelog = project.changelog // local variable for configuration cache compatibility + // Get the latest available change notes from the changelog file + changeNotes = providers.gradleProperty("pluginVersion").map { pluginVersion -> + with(changelog) { + renderItem( + (getOrNull(pluginVersion) ?: getUnreleased()) + .withHeader(false) + .withEmptySections(false), + Changelog.OutputType.HTML, + ) + } + } + + ideaVersion { + sinceBuild = providers.gradleProperty("pluginSinceBuild") + untilBuild = providers.gradleProperty("pluginUntilBuild") + } + } + + signing { + certificateChain = providers.environmentVariable("CERTIFICATE_CHAIN") + privateKey = providers.environmentVariable("PRIVATE_KEY") + password = providers.environmentVariable("PRIVATE_KEY_PASSWORD") + } + + publishing { + token = providers.environmentVariable("PUBLISH_TOKEN") + // The pluginVersion is based on the SemVer (https://semver.org) and supports pre-release labels, like 2.1.7-alpha.3 + // Specify pre-release label to publish the plugin in a custom Release Channel automatically. Read more: + // https://plugins.jetbrains.com/docs/intellij/deployment.html#specifying-a-release-channel + channels = providers.gradleProperty("pluginVersion").map { listOf(it.substringAfter('-', "").substringBefore('.').ifEmpty { "default" }) } + } + + pluginVerification { + ides { + recommended() + } + } +} + +// Configure Gradle Changelog Plugin - read more: https://github.com/JetBrains/gradle-changelog-plugin +changelog { + version.set(providers.gradleProperty("pluginVersion")) + groups.empty() + repositoryUrl = providers.gradleProperty("pluginRepositoryUrl") +} + +tasks { + wrapper { + gradleVersion = providers.gradleProperty("gradleVersion").get() } publishPlugin { - dependsOn("patchChangelog") - token(System.getenv("INTELLIJ_PUBLISH_TOKEN")) - channels(pluginVersion.split('-').getOrElse(1) { "default" }.split('.').first()) + dependsOn(patchChangelog) } } diff --git a/gradle.properties b/gradle.properties index 8bf31cb..410eda0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,28 @@ +# IntelliJ Platform Artifacts Repositories -> https://plugins.jetbrains.com/docs/intellij/intellij-artifacts.html pluginGroup = com.samvtran pluginName_ = macosforallkeymap -pluginVersion = 2.0.0 -platformVersion = LATEST-EAP-SNAPSHOT +pluginRepositoryUrl = https://github.com/samvtran/jetbrains-macos-keybindings-for-all +pluginVersion = 3.0.0 + +# Supported build number ranges and IntelliJ Platform versions -> https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html +pluginSinceBuild = 231 + +# IntelliJ Platform Properties -> https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html#configuration-intellij-extension +platformType = IC +platformVersion = 2023.1 + +# Plugin Dependencies -> https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html +platformPlugins = +platformBundledPlugins = + +# Gradle Releases -> https://github.com/gradle/gradle/releases +gradleVersion = 8.10.2 + +# Opt-out flag for bundling Kotlin standard library -> https://jb.gg/intellij-platform-kotlin-stdlib +kotlin.stdlib.default.dependency = false + +# Enable Gradle Configuration Cache -> https://docs.gradle.org/current/userguide/configuration_cache.html +org.gradle.configuration-cache = true + +# Enable Gradle Build Cache -> https://docs.gradle.org/current/userguide/build_cache.html +org.gradle.caching = true diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 0000000..ae29650 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,9 @@ +[versions] +changelog = "2.2.1" +intelliJPlatform = "2.1.0" + +[libraries] + +[plugins] +changelog = { id = "org.jetbrains.changelog", version.ref = "changelog" } +intelliJPlatform = { id = "org.jetbrains.intellij.platform", version.ref = "intelliJPlatform" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 12d38de..df97d72 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/settings.gradle.kts b/settings.gradle.kts index 747b880..bca5de4 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,2 +1,5 @@ rootProject.name = "macosforallkeymap" +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0" +} diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 3036a76..f1db6ec 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -11,9 +11,6 @@ open an issue on GitHub. ]]> - - - com.intellij.modules.lang From e6f9b0c9047450dbadab7f9ea9ca905997566898 Mon Sep 17 00:00:00 2001 From: Sam Tran Date: Sun, 6 Oct 2024 16:14:33 -0700 Subject: [PATCH 02/12] Fix build and remove description logic --- .gitignore | 1 + CHANGELOG.md | 9 ++++++++- README.md | 5 ++--- build.gradle.kts | 15 +-------------- src/main/resources/META-INF/plugin.xml | 2 +- 5 files changed, 13 insertions(+), 19 deletions(-) diff --git a/.gitignore b/.gitignore index 8ba33ad..0027aeb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ build .idea .gradle +.intellijPlatform diff --git a/CHANGELOG.md b/CHANGELOG.md index 483410e..b62ead1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,12 +4,19 @@ [Unreleased]: https://github.com/samvtran/jetbrains-macos-keybindings-for-all/commits -## [2.0.0] +### Changed +- Build dependencies updates +- Plugin signing added + +## [2.0.0] - 2020-09-24 + ### Added - Updated to match latest keymap as of [367cd5f](https://github.com/JetBrains/intellij-community/blob/fb0eb45e7d27dffbb490030c623bcf65eb402aeb/platform/platform-resources/src/keymaps/Mac%20OS%20X%2010.5%2B.xml). - Support new commit tool window (`Alt-0` when commit is active) + ### Removed - `ActivateTODOToolWindow` removed from keymap as of [b6eda](https://github.com/JetBrains/intellij-community/commit/24fe6c91cc91d51a2042737e9b7d01dd94305943#diff-8d8929a05e92b93072513b4727735c81) to make room for the Problems view. + ### Fixed - Keymap range set to 2020.2.* and beyond (no `untilBuild`) - `NextSplitter` and `PrevSplitter` updated to prevent conflicts with Alt-Tab diff --git a/README.md b/README.md index 984c708..662c88f 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,8 @@ [Cheatsheet](Keymap-macOS%20For%20All.pdf) -This repo converts the macOS keymap (previously known as Mac OS X 10.5+) in JetBrains IDEs from -macOS-specific shortcuts to shortcuts without `meta` (i.e., the Command/splat/cloverleaf interchange -from hell). +This plugin converts the macOS keymap (previously known as Mac OS X 10.5+) in JetBrains IDEs from +macOS-specific shortcuts to shortcuts without the Command (⌘) key for use on Windows and Linux. While some keybindings are close to their original, others have more modifier keys or different bindings altogether to avoid conflicts. diff --git a/build.gradle.kts b/build.gradle.kts index 8466ae1..8a152f0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -34,7 +34,7 @@ dependencies { // Plugin Dependencies. Uses `platformPlugins` property from the gradle.properties file for plugin from JetBrains Marketplace. plugins(providers.gradleProperty("platformPlugins").map { it.split(',') }) - + instrumentationTools() pluginVerifier() zipSigner() } @@ -45,19 +45,6 @@ intellijPlatform { pluginConfiguration { version = providers.gradleProperty("pluginVersion") - // Extract the section from README.md and provide for the plugin's manifest - description = providers.fileContents(layout.projectDirectory.file("README.md")).asText.map { - val start = "" - val end = "" - - with(it.lines()) { - if (!containsAll(listOf(start, end))) { - throw GradleException("Plugin description section not found in README.md:\n$start ... $end") - } - subList(indexOf(start) + 1, indexOf(end)).joinToString("\n").let(::markdownToHTML) - } - } - val changelog = project.changelog // local variable for configuration cache compatibility // Get the latest available change notes from the changelog file changeNotes = providers.gradleProperty("pluginVersion").map { pluginVersion -> diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index f1db6ec..a8cc836 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -4,7 +4,7 @@ samvtran key updates table.

If you notice any conflicting shortcuts or have a suggestion for a new keybinding, please From c343f0ed73ede07b39920658fc65aebada6861ba Mon Sep 17 00:00:00 2001 From: Sam Tran Date: Sun, 6 Oct 2024 16:24:58 -0700 Subject: [PATCH 03/12] Add GitHub Actions workflows --- .github/workflows/build.yml | 165 ++++++++++++++++++++++++++++++++++ .github/workflows/release.yml | 101 +++++++++++++++++++++ CHANGELOG.md | 1 + 3 files changed, 267 insertions(+) create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..c3eb77d --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,165 @@ +name: Build +on: + # Trigger the workflow on pushes to only the 'main' branch (this avoids duplicate checks being run e.g., for dependabot pull requests) + push: + branches: [ master ] + # Trigger the workflow on any pull request + pull_request: + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + + # Prepare environment and build the plugin + build: + name: Build + runs-on: ubuntu-latest + outputs: + version: ${{ steps.properties.outputs.version }} + changelog: ${{ steps.properties.outputs.changelog }} + pluginVerifierHomeDir: ${{ steps.properties.outputs.pluginVerifierHomeDir }} + steps: + + # Check out the current repository + - name: Fetch Sources + uses: actions/checkout@v4 + + # Validate wrapper + - name: Gradle Wrapper Validation + uses: gradle/actions/wrapper-validation@v3 + + # Set up Java environment for the next steps + - name: Setup Java + uses: actions/setup-java@v4 + with: + distribution: zulu + java-version: 17 + + # Setup Gradle + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + # Set environment variables + - name: Export Properties + id: properties + shell: bash + run: | + PROPERTIES="$(./gradlew properties --console=plain -q)" + VERSION="$(echo "$PROPERTIES" | grep "^version:" | cut -f2- -d ' ')" + CHANGELOG="$(./gradlew getChangelog --unreleased --no-header --console=plain -q)" + + echo "version=$VERSION" >> $GITHUB_OUTPUT + echo "pluginVerifierHomeDir=~/.pluginVerifier" >> $GITHUB_OUTPUT + + echo "changelog<> $GITHUB_OUTPUT + echo "$CHANGELOG" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + + # Build plugin + - name: Build plugin + run: ./gradlew buildPlugin + + # Prepare plugin archive content for creating artifact + - name: Prepare Plugin Artifact + id: artifact + shell: bash + run: | + cd ${{ github.workspace }}/build/distributions + FILENAME=`ls *.zip` + unzip "$FILENAME" -d content + + echo "filename=${FILENAME:0:-4}" >> $GITHUB_OUTPUT + + # Store already-built plugin as an artifact for downloading + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: ${{ steps.artifact.outputs.filename }} + path: ./build/distributions/content/*/* + + # Run plugin structure verification along with IntelliJ Plugin Verifier + verify: + name: Verify plugin + needs: [ build ] + runs-on: ubuntu-latest + steps: + + # Free GitHub Actions Environment Disk Space + - name: Maximize Build Space + uses: jlumbroso/free-disk-space@main + with: + tool-cache: false + large-packages: false + + # Check out the current repository + - name: Fetch Sources + uses: actions/checkout@v4 + + # Set up Java environment for the next steps + - name: Setup Java + uses: actions/setup-java@v4 + with: + distribution: zulu + java-version: 17 + + # Setup Gradle + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + # Cache Plugin Verifier IDEs + - name: Setup Plugin Verifier IDEs Cache + uses: actions/cache@v4 + with: + path: ${{ needs.build.outputs.pluginVerifierHomeDir }}/ides + key: plugin-verifier-${{ hashFiles('build/listProductsReleases.txt') }} + + # Run Verify Plugin task and IntelliJ Plugin Verifier tool + - name: Run Plugin Verification tasks + run: ./gradlew verifyPlugin -Dplugin.verifier.home.dir=${{ needs.build.outputs.pluginVerifierHomeDir }} + + # Collect Plugin Verifier Result + - name: Collect Plugin Verifier Result + if: ${{ always() }} + uses: actions/upload-artifact@v4 + with: + name: pluginVerifier-result + path: ${{ github.workspace }}/build/reports/pluginVerifier + + # Prepare a draft release for GitHub Releases page for the manual verification + # If accepted and published, release workflow would be triggered + releaseDraft: + name: Release draft + if: github.event_name != 'pull_request' + needs: [ build, verify ] + runs-on: ubuntu-latest + permissions: + contents: write + steps: + + # Check out the current repository + - name: Fetch Sources + uses: actions/checkout@v4 + + # Remove old release drafts by using the curl request for the available releases with a draft flag + - name: Remove Old Release Drafts + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh api repos/{owner}/{repo}/releases \ + --jq '.[] | select(.draft == true) | .id' \ + | xargs -I '{}' gh api -X DELETE repos/{owner}/{repo}/releases/{} + + # Create a new release draft which is not publicly visible and requires manual acceptance + - name: Create Release Draft + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh release create "v${{ needs.build.outputs.version }}" \ + --draft \ + --title "v${{ needs.build.outputs.version }}" \ + --notes "$(cat << 'EOM' + ${{ needs.build.outputs.changelog }} + EOM + )" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..5174ab9 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,101 @@ +# GitHub Actions Workflow created for handling the release process based on the draft release prepared with the Build workflow. +# Running the publishPlugin task requires all following secrets to be provided: PUBLISH_TOKEN, PRIVATE_KEY, PRIVATE_KEY_PASSWORD, CERTIFICATE_CHAIN. +# See https://plugins.jetbrains.com/docs/intellij/plugin-signing.html for more information. + +name: Release +on: + release: + types: [prereleased, released] + +jobs: + + # Prepare and publish the plugin to JetBrains Marketplace repository + release: + name: Publish Plugin + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + steps: + + # Check out the current repository + - name: Fetch Sources + uses: actions/checkout@v4 + with: + ref: ${{ github.event.release.tag_name }} + + # Set up Java environment for the next steps + - name: Setup Java + uses: actions/setup-java@v4 + with: + distribution: zulu + java-version: 17 + + # Setup Gradle + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + # Set environment variables + - name: Export Properties + id: properties + shell: bash + run: | + CHANGELOG="$(cat << 'EOM' | sed -e 's/^[[:space:]]*$//g' -e '/./,$!d' + ${{ github.event.release.body }} + EOM + )" + + echo "changelog<> $GITHUB_OUTPUT + echo "$CHANGELOG" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + + # Update the Unreleased section with the current release note + - name: Patch Changelog + if: ${{ steps.properties.outputs.changelog != '' }} + env: + CHANGELOG: ${{ steps.properties.outputs.changelog }} + run: | + ./gradlew patchChangelog --release-note="$CHANGELOG" + + # Publish the plugin to JetBrains Marketplace + - name: Publish Plugin + env: + PUBLISH_TOKEN: ${{ secrets.PUBLISH_TOKEN }} + CERTIFICATE_CHAIN: ${{ secrets.CERTIFICATE_CHAIN }} + PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }} + PRIVATE_KEY_PASSWORD: ${{ secrets.PRIVATE_KEY_PASSWORD }} + run: ./gradlew publishPlugin + + # Upload artifact as a release asset + - name: Upload Release Asset + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: gh release upload ${{ github.event.release.tag_name }} ./build/distributions/* + + # Create a pull request + - name: Create Pull Request + if: ${{ steps.properties.outputs.changelog != '' }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + VERSION="${{ github.event.release.tag_name }}" + BRANCH="changelog-update-$VERSION" + LABEL="release changelog" + + git config user.email "action@github.com" + git config user.name "GitHub Action" + + git checkout -b $BRANCH + git commit -am "Changelog update - $VERSION" + git push --set-upstream origin $BRANCH + + gh label create "$LABEL" \ + --description "Pull requests with release changelog update" \ + --force \ + || true + + gh pr create \ + --title "Changelog update - \`$VERSION\`" \ + --body "Current pull request contains patched \`CHANGELOG.md\` file for the \`$VERSION\` version." \ + --label "$LABEL" \ + --head $BRANCH diff --git a/CHANGELOG.md b/CHANGELOG.md index b62ead1..8d8ede5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ ### Changed - Build dependencies updates - Plugin signing added +- Adds GitHub Actions workflows ## [2.0.0] - 2020-09-24 From 5436f4c28fbf518d413a7d16ca78b93d4d1a107f Mon Sep 17 00:00:00 2001 From: Sam Tran Date: Sun, 6 Oct 2024 16:28:52 -0700 Subject: [PATCH 04/12] Mark gradlew script as executable --- gradlew | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 gradlew diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 From 152ba6f886095b0618864a4d9d6bfe4f687e7a6c Mon Sep 17 00:00:00 2001 From: Sam Tran Date: Sun, 6 Oct 2024 16:46:54 -0700 Subject: [PATCH 05/12] Fix #8: Rebind `NextSplitter`, `PrevSplitter`, `Back`, and `Forward` --- CHANGELOG.md | 4 ++++ src/main/resources/keymaps/macOS For All.xml | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d8ede5..6918dfc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,10 @@ - Build dependencies updates - Plugin signing added - Adds GitHub Actions workflows +- Ctrl+Alt+ rebound from `PrevSplitter` to `Back` +- Ctrl+Alt+ rebound from `NextSplitter` to `Forward` +- Ctrl+Alt+Shift+PageDown bound to `NextSplitter` +- Ctrl+Alt+Shift+PageUp bound to `PrevSplitter` ## [2.0.0] - 2020-09-24 diff --git a/src/main/resources/keymaps/macOS For All.xml b/src/main/resources/keymaps/macOS For All.xml index 2e639c4..bd1e998 100644 --- a/src/main/resources/keymaps/macOS For All.xml +++ b/src/main/resources/keymaps/macOS For All.xml @@ -18,10 +18,10 @@ - + - + @@ -507,10 +507,12 @@ + + From ed940ea4ab322dbcb6a2514c4a2a0dbc3fb7b9bf Mon Sep 17 00:00:00 2001 From: Sam Tran Date: Sun, 6 Oct 2024 16:48:48 -0700 Subject: [PATCH 06/12] Rebind `ExportToTextFile` --- src/main/resources/keymaps/macOS For All.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/keymaps/macOS For All.xml b/src/main/resources/keymaps/macOS For All.xml index bd1e998..bce0e98 100644 --- a/src/main/resources/keymaps/macOS For All.xml +++ b/src/main/resources/keymaps/macOS For All.xml @@ -229,7 +229,7 @@ - + From 8ad0cdcae0c0b82b4f9d4dc950db4e92f8c7a5c8 Mon Sep 17 00:00:00 2001 From: Sam Tran Date: Sun, 6 Oct 2024 17:49:19 -0700 Subject: [PATCH 07/12] Keybinding updates from latest macOS keymap Keybindings caught up to https://github.com/JetBrains/intellij-community/commit/c670a481d5bd8656469f41c3ff6924d4f0d73fcd - Rename: FileChooser.TogglePathShowing -> FileChooser.TogglePathBar - Rename: ActivateFavoritesToolWindow -> ActivateBookmarksToolWindow - Removed: GotoChangedFile - Removed: FindPrevWordAtCaret --- CHANGELOG.md | 13 +++++++++---- src/main/resources/keymaps/macOS For All.xml | 9 ++++----- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6918dfc..eaff2ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,14 +4,19 @@ [Unreleased]: https://github.com/samvtran/jetbrains-macos-keybindings-for-all/commits +### Removed +- `GoToChangedFile` which was removed from _all_ JetBrains keymaps +- `FindPrevWordAtCaret` which is explicitly unbound in the macOS keymap + ### Changed - Build dependencies updates - Plugin signing added - Adds GitHub Actions workflows -- Ctrl+Alt+ rebound from `PrevSplitter` to `Back` -- Ctrl+Alt+ rebound from `NextSplitter` to `Forward` -- Ctrl+Alt+Shift+PageDown bound to `NextSplitter` -- Ctrl+Alt+Shift+PageUp bound to `PrevSplitter` +- `Ctrl+Alt+←` updated to `Back` and removed from `PrevSplitter` +- `Ctrl+Alt+→` updated to `Forward` and removed from `NextSplitter` +- `NextSplitter` updated to `Ctrl+Alt+Shift+PageDown`, similar to VS Code +- `PrevSplitter` updated to `Ctrl+Alt+Shift+PageUp`, similar to VS Code +- `ExportToTextFile` updated to `Ctrl+Alt+Shift+O`, making `Ctrl+Alt+O` work for `GoToFile` when the Find pane is open ## [2.0.0] - 2020-09-24 diff --git a/src/main/resources/keymaps/macOS For All.xml b/src/main/resources/keymaps/macOS For All.xml index bce0e98..607e8b1 100644 --- a/src/main/resources/keymaps/macOS For All.xml +++ b/src/main/resources/keymaps/macOS For All.xml @@ -1,5 +1,5 @@ - + @@ -190,7 +190,7 @@ - + @@ -394,9 +394,7 @@ - - - + @@ -469,6 +467,7 @@ + From 8cbf333ee76fd0732eaf507f0dc3e6b03b355acc Mon Sep 17 00:00:00 2001 From: Sam Tran Date: Sun, 6 Oct 2024 17:54:49 -0700 Subject: [PATCH 08/12] Disable verification build step for PRs --- .github/workflows/build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c3eb77d..cbded9b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -82,6 +82,8 @@ jobs: # Run plugin structure verification along with IntelliJ Plugin Verifier verify: name: Verify plugin + # This is pretty slow and doesn't really need to run for PRs + if: github.event_name != 'pull_request' needs: [ build ] runs-on: ubuntu-latest steps: From 6fdd96dacb04bcb0546c3a644193c80f9a825a43 Mon Sep 17 00:00:00 2001 From: Sam Tran Date: Sun, 6 Oct 2024 18:19:12 -0700 Subject: [PATCH 09/12] Update cheatsheet --- Keymap-macOS For All.pdf | Bin 42231 -> 48454 bytes README.md | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Keymap-macOS For All.pdf b/Keymap-macOS For All.pdf index 60dfe793027e173e2aa1e0d14bc99ca71c0d230a..da53c0d790d65a00bb2394b7dc05a0f09db1d2b3 100644 GIT binary patch literal 48454 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 Date: Mon, 7 Oct 2024 06:58:23 -0700 Subject: [PATCH 10/12] Fix prev/next direction and update bindings table --- CHANGELOG.md | 16 ++--- README.md | 65 +++++++++++--------- src/main/resources/keymaps/macOS For All.xml | 4 +- 3 files changed, 45 insertions(+), 40 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eaff2ef..ec71e87 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,19 +4,19 @@ [Unreleased]: https://github.com/samvtran/jetbrains-macos-keybindings-for-all/commits -### Removed -- `GoToChangedFile` which was removed from _all_ JetBrains keymaps -- `FindPrevWordAtCaret` which is explicitly unbound in the macOS keymap +### Fixed +- `ExportToTextFile` updated to `Ctrl+Alt+Shift+O`, making `Ctrl+Alt+O` work for `GoToFile` when the Find pane is open ### Changed -- Build dependencies updates -- Plugin signing added -- Adds GitHub Actions workflows +- Updated to match latest keymap as of [c670a48](https://github.com/JetBrains/intellij-community/blob/c670a481d5bd8656469f41c3ff6924d4f0d73fcd/platform/platform-resources/src/keymaps/Mac%20OS%20X%2010.5%2B.xml) - `Ctrl+Alt+←` updated to `Back` and removed from `PrevSplitter` - `Ctrl+Alt+→` updated to `Forward` and removed from `NextSplitter` - `NextSplitter` updated to `Ctrl+Alt+Shift+PageDown`, similar to VS Code -- `PrevSplitter` updated to `Ctrl+Alt+Shift+PageUp`, similar to VS Code -- `ExportToTextFile` updated to `Ctrl+Alt+Shift+O`, making `Ctrl+Alt+O` work for `GoToFile` when the Find pane is open +- `PrevSplitter` updated to `Ctrl+Alt+Shift+PageUp`, similar to VS Code + +### Removed +- `GoToChangedFile` which was removed from _all_ JetBrains keymaps +- `FindPrevWordAtCaret` which is explicitly unbound in the macOS keymap ## [2.0.0] - 2020-09-24 diff --git a/README.md b/README.md index e465f76..ff71b63 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ them [here](https://github.com/samvtran/jetbrains-macos-keybindings-for-all/issu | Actions | macOS Keybindings | New Keybindings | |-------------------------------------:|-----------------------------------------------------------------------|-----------------------------------------------| | ActivateProjectToolWindow | `Command-1` | `Alt-1` | -| ActivateFavoritesToolWindow | `Command-2` | `Alt-2` | +| ActivateBookmarksToolWindow | `Command-2` | `Alt-2` | | ActivateFindToolWindow | `Command-3` | `Alt-3` | | ActivateRunToolWindow | `Command-4` | `Alt-4` | | ActivateDebugToolWindow | `Command-5` | `Alt-5` | @@ -64,7 +64,7 @@ them [here](https://github.com/samvtran/jetbrains-macos-keybindings-for-all/issu | ActivateServicesToolWindow | `Command-8` | `Alt-8` | | ActivateVersionControlToolWindow | `Command-9` | `Alt-9` | | ActivateCommitToolWindow | `Command-0` | `Alt-0` | -| Back | `Command-[`
`Command-Alt-Left` | `Control-[` | +| Back | `Command-[`
`Command-Alt-Left` | `Control-[`
`Control-Alt-Left` | | ChangesView.Move | `Command-Shift-M` | `Control-Shift-M` | | ChooseDebugConfiguration | `Control-Alt-D` | `Control-Alt-Shift-D` | | ChooseRunConfiguration | `Control-Alt-R` | `Control-Alt-Shift-R` | @@ -94,15 +94,14 @@ them [here](https://github.com/samvtran/jetbrains-macos-keybindings-for-all/issu | ExpandAllToLevel3 | `Command-Alt-NumPad[*] + 3` | `Control-Alt-NumPad[*] + 3` | | ExpandAllToLevel4 | `Command-Alt-NumPad[*] + 4` | `Control-Alt-NumPad[*] + 4` | | ExpandAllToLevel5 | `Command-Alt-NumPad[*] + 5` | `Control-Alt-NumPad[*] + 5` | -| ExportToTextFile | `Control-O` | `Control-Shift-O` | -| FileChooser.TogglePathShowing | `Command-P` | `Control-P` | +| ExportToTextFile | `Control-O` | `Control-Alt-Shift-O` | +| FileChooser.TogglePathBar | `Command-P` | `Control-P` | | Find | `Command-F` | `Control-F` | | FindInPath | `Command-Shift-F` | `Control-Shift-F` | | FindNext | `Command-G` | `Control-Alt-G` | | FindPrevious | `Command-Shift-G` | `Alt-Shift-G` | -| Forward | `Command-]`
`Command-Alt-Right` | `Control-]` | +| Forward | `Command-]`
`Command-Alt-Right` | `Control-]`
`Control-Alt-Right` | | Generate | `Command-N` | `Control-N` | -| GotoChangedFile | `Command-O` | `Control-O` | | GotoClass | `Command-O` | `Control-O` | | GotoFile | `Command-Shift-O` | `Control-Shift-O` | | GotoLine | `Command-L` | `Control-L` | @@ -116,11 +115,12 @@ them [here](https://github.com/samvtran/jetbrains-macos-keybindings-for-all/issu | NewScratchFile | `Command-Shift-N` | `Control-Shift-N` | | NextEditorTab | `Control-Shift-Right` | `Control-Alt-Shift-Right` | | NextProjectWindow | ``Command-Alt-` `` | ``Control-Alt-` `` | -| NextSplitter | `Alt-Tab` | `Control-Alt-Left` | +| NextSplitter | `Alt-Tab` | `Control-Alt-Shift-PageDown` | | NextTab | `Command-Shift-]`
`Control-Right` | `Control-Shift-]` | | OptimizeImports | `Control-Alt-O` | `Control-Alt-Shift-O` | | OverrideMethods | `Control-O` | `Alt-Shift-O` | | PreviousEditorTab | `Control-Shift-Left` | `Control-Alt-Shift-Left` | +| PrevSplitter | `Alt-Shift-Tab` | `Control-Alt-Shift-PageUp` | | PreviousProjectWindow | ``Command-Alt-Shift-` `` | ``Control-Alt-Shift-` `` | | PreviousSplitter | `Alt-Shift-Tab` | `Control-Alt-Right` | | PreviousTab | `Command-Shift-[`
`Control-Left` | `Control-Shift-[` | @@ -170,7 +170,7 @@ them [here](https://github.com/samvtran/jetbrains-macos-keybindings-for-all/issu | EditorUp | `Control-P` | `Up` | | FindNext | `Control-L` | `F3` | | FindPrevious | `Control-Shift-L` | `Shift-F3` | -| Forward | `Command-Alt-Right` | `Control-]` +| Forward | `Command-Alt-Right` | `Control-]` | RerunTests | `Command-Control-R` | `Alt-Shift-R` | | Resume | `Command-Alt-R` | `F9` | | Vcs.ShowMessageHistory | `Control-M` | `Control-E` | @@ -182,28 +182,33 @@ These keybindings are set by the [ keymap and are not currently included, even if the macOS keymap defines them explicitly. -| Actions | macOS Keybindings | $default Keybindings | -|---------------------------------:|-----------------------------------------------------------------------|----------------------------------| -| ChangesView.GroupBy.Directory | `Control-P` | `Control-Alt-P` | -| ChangesView.GroupBy.Module | `Control-M` | `Control-Alt-M` | -| Diff.ApplyLeftSide | `Control-Shift-Right` | `Alt-Shift-Right` | -| Diff.ApplyRightSide | `Control-Shift-Left` | `Alt-Shift-Left` | -| ForceRefresh | `Command-Alt-Shift-R` | `Control-Shift-F5` | -| GoToDeclaration | `Command-B`
`Command-click`
`Middle click`
Force touch | `Control-B`
`Control-click` | -| RunToCursor | `Alt-F9`
Force touch | `Alt-F9` | -| ServiceView.GroupByContributor | `Control-T` | `Control-Alt-T` | -| ServiceView.GroupByServiceGroups | `Control-P` | `Control-Alt-P` | -| TodoViewGroupByShowModules | `Control-M` | `Control-Alt-M` | -| TodoViewGroupByShowPackages | `Control-P` | `Control-Alt-P` | -| TodoViewGroupByFlattenPackage | `Control-F` | `Control-Alt-C` | -| ToggleAmendCommitMode | `Control-Alt-M` | `Alt-M` | -| ToggleFindInSelection | `Control-Alt-E` | `Control-Alt-E` | -| UsageGrouping.Module | `Control-M` | `Control-Alt-M` | -| UsageGrouping.Directory | `Control-P` | `Control-Alt-P` | -| UsageGrouping.UsageType | `Control-T` | `Control-Alt-T` | -| UsageGrouping.FlattenModules | `Control-O` | `Control-Alt-O` | -| UsageGrouping.FileStructure | `Control-F` | `Control-Alt-F` | -| UsageGrouping.DirectoryStructure | `Control-D` | `Control-Alt-D` | +| Actions | macOS Keybindings | $default Keybindings | +|-----------------------------------------------------------:|------------------------------------------------------------------------|----------------------------------| +| ActivateNuGetToolWindow | `Command-Alt-7` | `Alt-Shift-7` | +| ActivateUnitTestsToolWindow | `Command-Alt-8` | `Alt-Shift-8` | +| ChangesView.GroupBy.Directory | `Control-P` | `Control-Alt-P` | +| ChangesView.GroupBy.Module | `Control-M` | `Control-Alt-M` | +| Diff.ApplyLeftSide | `Control-Shift-Right` | `Alt-Shift-Right` | +| Diff.ApplyRightSide | `Control-Shift-Left` | `Alt-Shift-Left` | +| ForceRefresh | `Command-Alt-Shift-R` | `Control-Shift-F5` | +| GoToDeclaration | `Command-B`
`Command-click`
`Middle click`
Force touch | `Control-B`
`Control-click` | +| RunToCursor | `Alt-F9`
Force touch | `Alt-F9` | +| ServiceView.GroupByContributor | `Control-T` | `Control-Alt-T` | +| ServiceView.GroupByServiceGroups | `Control-P` | `Control-Alt-P` | +| TodoViewGroupByShowModules | `Control-M` | `Control-Alt-M` | +| TodoViewGroupByShowPackages | `Control-P` | `Control-Alt-P` | +| TodoViewGroupByFlattenPackage | `Control-F` | `Control-Alt-C` | +| ToggleAmendCommitMode | `Control-Alt-M` | `Alt-M` | +| ToggleFindInSelection | `Control-Alt-E` | `Control-Alt-E` | +| UsageFiltering.ReadAccess | `Control-R` | `Control-R` | +| UsageFiltering.WriteAccess | `Control-W` | `Control-W` | +| UsageFiltering.Imports | `Control-I` | `Control-I` | +| UsageGrouping.Module | `Control-M` | `Control-Alt-M` | +| UsageGrouping.Directory | `Control-P` | `Control-Alt-P` | +| UsageGrouping.UsageType | `Control-T` | `Control-Alt-T` | +| UsageGrouping.FlattenModules | `Control-O` | `Control-Alt-O` | +| UsageGrouping.FileStructure | `Control-F` | `Control-Alt-F` | +| UsageGrouping.DirectoryStructure | `Control-D` | `Control-Alt-D` | ## Missing/no-op Keybindings diff --git a/src/main/resources/keymaps/macOS For All.xml b/src/main/resources/keymaps/macOS For All.xml index 607e8b1..165a956 100644 --- a/src/main/resources/keymaps/macOS For All.xml +++ b/src/main/resources/keymaps/macOS For All.xml @@ -506,12 +506,12 @@
- + - + From 9f081ca335fa3a1a5601e6a31c4e01a60e57f946 Mon Sep 17 00:00:00 2001 From: Sam Tran Date: Mon, 7 Oct 2024 07:10:41 -0700 Subject: [PATCH 11/12] Simplify changelog and disable searachable option jar --- CHANGELOG.md | 8 ++++---- README.md | 8 -------- build.gradle.kts | 2 ++ 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ec71e87..97f4c32 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,10 +9,10 @@ ### Changed - Updated to match latest keymap as of [c670a48](https://github.com/JetBrains/intellij-community/blob/c670a481d5bd8656469f41c3ff6924d4f0d73fcd/platform/platform-resources/src/keymaps/Mac%20OS%20X%2010.5%2B.xml) -- `Ctrl+Alt+←` updated to `Back` and removed from `PrevSplitter` -- `Ctrl+Alt+→` updated to `Forward` and removed from `NextSplitter` -- `NextSplitter` updated to `Ctrl+Alt+Shift+PageDown`, similar to VS Code -- `PrevSplitter` updated to `Ctrl+Alt+Shift+PageUp`, similar to VS Code +- `Back` updated to `Ctrl+Alt+←` +- `Forward` updated to `Ctrl+Alt+→` +- `NextSplitter` updated to `Ctrl+Alt+Shift+PageDown` +- `PrevSplitter` updated to `Ctrl+Alt+Shift+PageUp` ### Removed - `GoToChangedFile` which was removed from _all_ JetBrains keymaps diff --git a/README.md b/README.md index ff71b63..4998481 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,3 @@ -> [!TIP] -> 👋 **Hello from April 2024!** -> I use this keymap every single day. Please take the lack of updates as a testament to the -> stability -> of keyboard workflows despite recent UI overhauls across the JetBrains portfolio. If you notice -> any issues, -> please [let me know](https://github.com/samvtran/jetbrains-macos-keybindings-for-all/issues/new). - # JetBrains macOS Keymap for Windows and Linux [![JetBrains IntelliJ Plugins](https://img.shields.io/jetbrains/plugin/v/13968-macos-for-all?style=for-the-badge)](https://plugins.jetbrains.com/plugin/13968-macos-for-all) diff --git a/build.gradle.kts b/build.gradle.kts index 8a152f0..1a30f05 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -42,6 +42,8 @@ dependencies { // Configure IntelliJ Platform Gradle Plugin - read more: https://plugins.jetbrains.com/docs/intellij/tools-intellij-platform-gradle-plugin-extension.html intellijPlatform { + buildSearchableOptions = false + pluginConfiguration { version = providers.gradleProperty("pluginVersion") From 7c1c66741b64edd24e5169e777879bff15a2e8e4 Mon Sep 17 00:00:00 2001 From: Sam Tran Date: Mon, 7 Oct 2024 17:21:53 -0700 Subject: [PATCH 12/12] Update README --- README.md | 80 +++++++++++++++++++++++++++---------------------------- 1 file changed, 39 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index 4998481..83e343f 100644 --- a/README.md +++ b/README.md @@ -12,23 +12,16 @@ bindings altogether to avoid conflicts. ## Build -Follow -JetBrains' [guide](https://www.jetbrains.org/intellij/sdk/docs/tutorials/build_system/prerequisites.html) -for using Gradle for plugin development. +Follow JetBrains' [guide](https://www.jetbrains.org/intellij/sdk/docs/tutorials/build_system/prerequisites.html) for using Gradle for plugin development. ## Installation -Install the plugin from -the [plugin marketplace](https://plugins.jetbrains.com/plugin/13968-macos-for-all) or -grab the zip file from -the [latest release](https://github.com/samvtran/jetbrains-macos-keybindings-for-all/releases/latest) -and install manually. +Install the plugin from the [plugin marketplace](https://plugins.jetbrains.com/plugin/13968-macos-for-all) or grab the zip file from the [latest release](https://github.com/samvtran/jetbrains-macos-keybindings-for-all/releases/latest) and install manually. ## Release -For signing and releasing the plugin, this repo uses the environment variables outlined in the IntelliJ -Platform Plugin -Template [environment variables section](https://github.com/JetBrains/intellij-platform-plugin-template?tab=readme-ov-file#environment-variables): +For signing and releasing the plugin, this repo uses the environment variables outlined in the +IntelliJ Platform Plugin Template [environment variables section](https://github.com/JetBrains/intellij-platform-plugin-template?tab=readme-ov-file#environment-variables): | Name | Description | |------------------------|-----------------------------------------------| @@ -40,7 +33,7 @@ Template [environment variables section](https://github.com/JetBrains/intellij-p ## Issues If you notice any issues, please report -them [here](https://github.com/samvtran/jetbrains-macos-keybindings-for-all/issues/new)! +them [here](https://github.com/samvtran/jetbrains-macos-keybindings-for-all/issues/new). ## Key Updates @@ -147,7 +140,6 @@ them [here](https://github.com/samvtran/jetbrains-macos-keybindings-for-all/issu | Actions | macOS Keybindings | Alternatives | |--------------------------------:|----------------------------------------|----------------------------| | $Delete | `Command-Backspace` | Just backspace | -| Back | `Command-Alt-Left` | `Control-[` | | CommentByBlockComment | `Command-Alt-/`
`Command-Shift-/` | `Control-Shift-/` | | EditorDown | `Control-N` | `Down` | | EditorLeft | `Control-B` | `Left` | @@ -162,7 +154,6 @@ them [here](https://github.com/samvtran/jetbrains-macos-keybindings-for-all/issu | EditorUp | `Control-P` | `Up` | | FindNext | `Control-L` | `F3` | | FindPrevious | `Control-Shift-L` | `Shift-F3` | -| Forward | `Command-Alt-Right` | `Control-]` | RerunTests | `Command-Control-R` | `Alt-Shift-R` | | Resume | `Command-Alt-R` | `F9` | | Vcs.ShowMessageHistory | `Control-M` | `Control-E` | @@ -174,33 +165,33 @@ These keybindings are set by the [ keymap and are not currently included, even if the macOS keymap defines them explicitly. -| Actions | macOS Keybindings | $default Keybindings | -|-----------------------------------------------------------:|------------------------------------------------------------------------|----------------------------------| -| ActivateNuGetToolWindow | `Command-Alt-7` | `Alt-Shift-7` | -| ActivateUnitTestsToolWindow | `Command-Alt-8` | `Alt-Shift-8` | -| ChangesView.GroupBy.Directory | `Control-P` | `Control-Alt-P` | -| ChangesView.GroupBy.Module | `Control-M` | `Control-Alt-M` | -| Diff.ApplyLeftSide | `Control-Shift-Right` | `Alt-Shift-Right` | -| Diff.ApplyRightSide | `Control-Shift-Left` | `Alt-Shift-Left` | -| ForceRefresh | `Command-Alt-Shift-R` | `Control-Shift-F5` | -| GoToDeclaration | `Command-B`
`Command-click`
`Middle click`
Force touch | `Control-B`
`Control-click` | -| RunToCursor | `Alt-F9`
Force touch | `Alt-F9` | -| ServiceView.GroupByContributor | `Control-T` | `Control-Alt-T` | -| ServiceView.GroupByServiceGroups | `Control-P` | `Control-Alt-P` | -| TodoViewGroupByShowModules | `Control-M` | `Control-Alt-M` | -| TodoViewGroupByShowPackages | `Control-P` | `Control-Alt-P` | -| TodoViewGroupByFlattenPackage | `Control-F` | `Control-Alt-C` | -| ToggleAmendCommitMode | `Control-Alt-M` | `Alt-M` | -| ToggleFindInSelection | `Control-Alt-E` | `Control-Alt-E` | -| UsageFiltering.ReadAccess | `Control-R` | `Control-R` | -| UsageFiltering.WriteAccess | `Control-W` | `Control-W` | -| UsageFiltering.Imports | `Control-I` | `Control-I` | -| UsageGrouping.Module | `Control-M` | `Control-Alt-M` | -| UsageGrouping.Directory | `Control-P` | `Control-Alt-P` | -| UsageGrouping.UsageType | `Control-T` | `Control-Alt-T` | -| UsageGrouping.FlattenModules | `Control-O` | `Control-Alt-O` | -| UsageGrouping.FileStructure | `Control-F` | `Control-Alt-F` | -| UsageGrouping.DirectoryStructure | `Control-D` | `Control-Alt-D` | +| Actions | macOS Keybindings | $default Keybindings | +|---------------------------------:|-----------------------------------------------------------------------|----------------------------------| +| ActivateNuGetToolWindow | `Command-Alt-7` | `Alt-Shift-7` | +| ActivateUnitTestsToolWindow | `Command-Alt-8` | `Alt-Shift-8` | +| ChangesView.GroupBy.Directory | `Control-P` | `Control-Alt-P` | +| ChangesView.GroupBy.Module | `Control-M` | `Control-Alt-M` | +| Diff.ApplyLeftSide | `Control-Shift-Right` | `Alt-Shift-Right` | +| Diff.ApplyRightSide | `Control-Shift-Left` | `Alt-Shift-Left` | +| ForceRefresh | `Command-Alt-Shift-R` | `Control-Shift-F5` | +| GoToDeclaration | `Command-B`
`Command-click`
`Middle click`
Force touch | `Control-B`
`Control-click` | +| RunToCursor | `Alt-F9`
Force touch | `Alt-F9` | +| ServiceView.GroupByContributor | `Control-T` | `Control-Alt-T` | +| ServiceView.GroupByServiceGroups | `Control-P` | `Control-Alt-P` | +| TodoViewGroupByShowModules | `Control-M` | `Control-Alt-M` | +| TodoViewGroupByShowPackages | `Control-P` | `Control-Alt-P` | +| TodoViewGroupByFlattenPackage | `Control-F` | `Control-Alt-C` | +| ToggleAmendCommitMode | `Control-Alt-M` | `Alt-M` | +| ToggleFindInSelection | `Control-Alt-E` | `Control-Alt-E` | +| UsageFiltering.ReadAccess | `Control-R` | `Control-R` | +| UsageFiltering.WriteAccess | `Control-W` | `Control-W` | +| UsageFiltering.Imports | `Control-I` | `Control-I` | +| UsageGrouping.Module | `Control-M` | `Control-Alt-M` | +| UsageGrouping.Directory | `Control-P` | `Control-Alt-P` | +| UsageGrouping.UsageType | `Control-T` | `Control-Alt-T` | +| UsageGrouping.FlattenModules | `Control-O` | `Control-Alt-O` | +| UsageGrouping.FileStructure | `Control-F` | `Control-Alt-F` | +| UsageGrouping.DirectoryStructure | `Control-D` | `Control-Alt-D` | ## Missing/no-op Keybindings @@ -213,6 +204,13 @@ This list may change over time. ## FAQ +### Can I add my own custom shortcuts? + +Yes, choose _Duplicate..._ from the Settings -> Keymap gear menu to create your own keymap based off +this keymap. Your keymap will inherit all keybindings from this base keymap with your own changes +applied on top. You can sync this user-defined keymap alongside the macOS For All keymap across all +of your machines and IDEs. + ### Oh no! My favorite shortcut changed after an update! What do I do? This project tries to follow the macOS keybindings (still called "Mac OS X 10.5+" in the JetBrains