├── .gitignore ├── img ├── logo.png ├── cmd-ani1.gif ├── cmd-ani2.gif ├── keyclu.png ├── screenshot_1.png ├── screenshot_2.png └── screenshot_3.png ├── .github ├── FUNDING.yml └── ISSUE_TEMPLATE │ ├── config.yml │ ├── feature_request.yml │ └── bug_report.yml ├── LICENSE ├── readme.md └── changelog.txt /.gitignore: -------------------------------------------------------------------------------- 1 | ## macos 2 | .DS_Store 3 | -------------------------------------------------------------------------------- /img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anze/KeyCluCask/HEAD/img/logo.png -------------------------------------------------------------------------------- /img/cmd-ani1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anze/KeyCluCask/HEAD/img/cmd-ani1.gif -------------------------------------------------------------------------------- /img/cmd-ani2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anze/KeyCluCask/HEAD/img/cmd-ani2.gif -------------------------------------------------------------------------------- /img/keyclu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anze/KeyCluCask/HEAD/img/keyclu.png -------------------------------------------------------------------------------- /img/screenshot_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anze/KeyCluCask/HEAD/img/screenshot_1.png -------------------------------------------------------------------------------- /img/screenshot_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anze/KeyCluCask/HEAD/img/screenshot_2.png -------------------------------------------------------------------------------- /img/screenshot_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anze/KeyCluCask/HEAD/img/screenshot_3.png -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: Anze 2 | ko_fi: statarenkov/donate 3 | custom: ["https://www.paypal.com/donate/?hosted_button_id=ZREZJUGEE8GGN"] 4 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | 3 | contact_links: 4 | - name: "\U0001F914 Support Question" 5 | url: https://github.com/Anze/KeyCluCask/discussions 6 | about: Q&A, ideas and more 7 | - name: "\U0001F4D6 User Manual" 8 | url: https://github.com/Anze/KeyCluCask/wiki 9 | about: Read or Contribute – learn and share your knowledge 10 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.yml: -------------------------------------------------------------------------------- 1 | --- 2 | name: "\U0001F680 Feature Request" 3 | description: Suggest an idea for KeyClu 4 | title: "[feature]: a great idea" 5 | labels: [improvement] 6 | body: 7 | - type: markdown 8 | attributes: 9 | value: | 10 | **Thanks :heart: for using KeyClu and taking the time to fill out this feature request!** 11 | 12 | Before you submit your feature request, please complete each text area below with the relevant details for your idea. 13 | - type: textarea 14 | attributes: 15 | label: Proposal 16 | description: | 17 | Briefly but precisely describe the solution you'd like. 18 | 19 | Consider attaching images showing what you are imagining. 20 | validations: 21 | required: true 22 | - type: textarea 23 | attributes: 24 | label: Alternatives 25 | description: | 26 | Describe alternative solutions you've considered. 27 | validations: 28 | required: false 29 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD-3-Clause-Clear License 2 | 3 | Copyright (c) 2023-2025 Sergii Tatarenkov 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without modification, are permitted (subject to the limitations in the disclaimer below) provided that the following conditions are met: 7 | 8 | * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 9 | 10 | * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 11 | 12 | * Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 13 | 14 | NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.yml: -------------------------------------------------------------------------------- 1 | --- 2 | name: "\U0001F41E Bug Report" 3 | description: Something isn't working as expected 4 | title: "[bug]: issue title" 5 | labels: [bug] 6 | body: 7 | - type: markdown 8 | attributes: 9 | value: | 10 | **Thanks :heart: for using KeyClu and taking the time to fill out this bug report!** 11 | - type: textarea 12 | id: what-happened 13 | attributes: 14 | label: Description 15 | description: | 16 | A clear and concise description of the bug. 17 | 18 | If you think this issue has been recently introduced and did not occur in an earlier version, please note that. 19 | If possible, include the last version that the behavior was correct in addition to your current version. 20 | An attached screenshot that is exhibiting the issue, and/or [ips-file if the crash report](https://github.com/Anze/KeyCluCask/wiki/FAQ#keyclu-just-crashed) would greatly helps. 21 | validations: 22 | required: true 23 | - type: textarea 24 | id: expected-behavior 25 | attributes: 26 | label: Expected behavior 27 | description: "Describe what you expect to happen." 28 | validations: 29 | required: false 30 | - type: input 31 | id: app 32 | attributes: 33 | label: App version 34 | description: The version of the App used. 35 | placeholder: "'0.21' for example" 36 | validations: 37 | required: true 38 | - type: input 39 | id: env 40 | attributes: 41 | label: macOS version 42 | description: The version of the OS running. 43 | placeholder: "'macOS Sonoma 14.4' for example" 44 | validations: 45 | required: true 46 | - type: dropdown 47 | id: installation 48 | attributes: 49 | label: Installation method 50 | description: Installation method used. 51 | options: 52 | - Manual (dmg/zip) 53 | - Homebrew 54 | default: 0 55 | validations: 56 | required: true 57 | - type: checkboxes 58 | id: ivetried 59 | attributes: 60 | label: Checklist before submitting a bug 61 | description: Please verify all the following items before submitting a bug. 62 | options: 63 | - label: This issue hasn't been addressed in an [existing GitHub issue](https://github.com/Anze/KeyCluCask/issues) or [discussion](https://github.com/Anze/KeyCluCask/discussions). 64 | required: true 65 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

KeyClu for macOS

4 |

5 | 6 | Simple and handy overview of applications shortcuts. Easy to use: just press `⌘` twice and hold to see the list. 7 | 8 | ![platform:macos  + Intel](https://img.shields.io/badge/platform-macOS%20%20%20+%20Intel-2F3640.svg) 9 | ![version:bigsur](https://img.shields.io/badge/requirements-Big%20Sur%2B-337AFF.svg) 10 | ![category:productivity](https://img.shields.io/badge/category-productivity-blue.svg) 11 | ![license:bsd-3-clause-clear](https://img.shields.io/badge/license-BSD--3--Clause--Clear-orange.svg) 12 | 13 | [![github downloads](https://img.shields.io/github/downloads/Anze/KeyCluCask/total.svg?label=github%20downloads)](https://github.com/Anze/KeyCluCask/releases/latest) 14 | [![brew downloads](https://img.shields.io/badge/dynamic/json.svg?url=https://formulae.brew.sh/api/cask/keyclu.json&query=$.analytics.install[%27365d%27].keyclu&label=homebrew%20installs&color=brightgreen)](https://formulae.brew.sh/cask/keyclu) 15 | 16 | ## Screenshots 17 | ![screenshot1](https://raw.githubusercontent.com/Anze/KeyCluCask/main/img/screenshot_1.png) 18 | 19 | ![screenshot2](https://raw.githubusercontent.com/Anze/KeyCluCask/main/img/screenshot_2.png) 20 | 21 | ![screenshot3](https://raw.githubusercontent.com/Anze/KeyCluCask/main/img/screenshot_3.png) 22 | 23 | ## Installation 24 | ### Homebrew 25 | To install it using Homebrew, open the Terminal app and type: 26 | ``` 27 | brew install --cask keyclu 28 | ``` 29 | ### Manual 30 | Download the [latest version](https://github.com/Anze/KeyCluCask/releases/latest) `.dmg`, open it and move the KeyClu app to the Applications folder. 31 | 32 | ## Permissions 33 | * Required access to `Accessibility API` to operate. 34 | * Preferred to have access to `Notification Center` to provide gentle update notification. 35 | 36 | ## Basic usage 37 | * Press `⌘` key twice and hold (default) to present shortcuts of current app 38 | * Press `⌘` key and hold (alternative) to present shortcuts of current app 39 | 40 | ## Features 41 | A few of the things you can do with KeyClu: 42 | * Adjust view to your liking 43 | * Personalize appearance to `system`, `light` and `dark` 44 | * Bookmark shortcuts 45 | * Hide known shortcuts 46 | * List own & skhd shortcuts 47 | * Collapsible groups of shortcuts 48 | * Export App's shortcuts to markdown file 49 | 50 | ## Integrations 51 | * [CustomShortcuts](https://www.houdah.com/customShortcuts/) to customize shortcuts 52 | * [skhd](https://github.com/koekeishiya/skhd) to list shortcuts, more details on [skhd wiki page](https://github.com/Anze/KeyCluCask/wiki/Integrations-%E2%80%90-skhd) 53 | * CLI params, more details on [CLI params wiki page](https://github.com/Anze/KeyCluCask/wiki/Integrations-%E2%80%90-CLI-params) 54 | 55 | ## FAQ 56 | ### How to open Settings if icon is hidden? 57 | To open Settings simply launch app again. 58 | 59 | ### App just crashed! 60 | In case of a crash, please open the issue and provide details, relevant logs, and a brief description of your activities that might leading up to the crash. Check the page [FAQ - KeyClu just crashed](https://github.com/Anze/KeyCluCask/wiki/FAQ#keyclu-just-crashed) for guidance on collecting the necessary information for the issue. Your cooperation will help to resolve issue more effectively. 61 | 62 | ## Roadmap 63 | Take a look at [KeyClu's Project board](https://github.com/users/Anze/projects/1) to get an idea of what's brewing! 64 | 65 | Feature requests are always welcome. 66 | 67 | ## Privacy Policy 68 | KeyClu collects no personal information nor does use any services for analytics, advertising etc. 69 | 70 | ## License & Credits 71 | KeyClu is released under the BSD-3-Clause-Clear license. See [LICENSE](LICENSE) for details. 72 | 73 | This software uses the following open source packages: 74 | * [Sparkle](https://github.com/sparkle-project/Sparkle) 75 | * [SQLite.swift](https://github.com/stephencelis/SQLite.swift) 76 | * [SQLiteMigrationManager.swift](https://github.com/garriguv/SQLiteMigrationManager.swift) 77 | * [JSON.swift](https://github.com/mikezs/Tisander) 78 | 79 | ## Thanks 80 | * Special thanks to everyone who contributed to getting the KeyClu to the current state 81 | * [@wanwindwalker](https://github.com/wanwindwalker) for legacy app icon 82 | 83 | ## Support 84 | If you ❤️ the KeyClu and found it useful for your tasks, be sure to ⭐ it and maybe support me with caffeine. 85 | 86 | 87 | -------------------------------------------------------------------------------- /changelog.txt: -------------------------------------------------------------------------------- 1 | v0.26 2 | - fixed issue with non working "power" button in Settings under certain conditions 3 | - fixed issue with not properly loading translation for macOS hotkeys in older macOS causing not display hotkeys completely 4 | - improved import/export of "My Shortcuts", now preserve shortcut groups order 5 | - improved settings ui 6 | - added multi monitor support #49 7 | - added link for "Extensions page" at "My Shortcuts" #67 (display missing shortcuts for apps and more) 8 | - added "Bookmarked" group #68 9 | - added "Collapsible" groups #69 10 | - moved filtering shortcuts functionality to "Experimental Features" as not stable enough 11 | 12 | v0.25 13 | - fixed issue with focus Settings after updating My Shortcuts 14 | - fixed issue with highlight 15 | - enhance ui, finally lineup shortcuts 16 | - added possibility to list macOS Keyboard Shortcuts (Integrations section) 17 | 18 | v0.24 19 | - fixed issue #59 with activation hotkeys 20 | - fixed issue #60 with fallback to desktop after close panel 21 | - fixed issue #61 with highlighting option 22 | - improved skhd parsing, sorting order 23 | - improved ui 24 | 25 | v0.23.1 26 | - fixed issue with parser of skhd format 27 | - enhanced ui: now skhd sections always displayed in alphabetical order 28 | 29 | v0.23 30 | - fixed issue with apps without bundle identifier 31 | - fixed issue with conditions to activate Shortcuts & Persistent Panel, less accidental activation 32 | - fixed issue with skhd files, now checking all default locations 33 | - improved ui: background color tweaked for a smoother experience for macOS < 13 34 | - added possibility to show only skhd hotkeys with --toggle-panel cli param (experimental feature) 35 | 36 | v0.22 37 | - fixed bug with Shortcuts Panel being showed briefly if called from status menu bar or via cli 38 | - fixed issue of incorrect targeting KeyClu as active app 39 | - fixed issue with forced request of Notification Permission 40 | - improved app stability and performance 41 | - added option to show/hide My Shortcuts (Settings -> Integrations) 42 | - added option to show/hide skhd shortcuts (Settings -> Integrations) 43 | - added possibility to export App's menu item shortcuts to Markdown file via button M on the bottom right of Command bar 44 | - removed feature to access Settings via tapping 3x control key when App icon is hidden 45 | 46 | v0.21 47 | - fixed filtering field issues (might be not all) 48 | - fixed app stability and performance issues 49 | - changed menu item actions to be accessible with a simple tap on the "menu" (bookmark) icon 50 | - enhanced accessibility privileges verification 51 | - added possibility to close 'Persistent Panel' with pressing ⎋ key 52 | - added silent launch and quit options for the app 53 | - removed gap for 'Persistent Panel' when aligned to the left or right 54 | 55 | v0.20 56 | - fixed app crashes on certain conditions 57 | - added filtering functionality for menu items, available when 'Show credits line' is enabled in 'Window Presets' (not available in Persistent Panel) 58 | - improved permission checks in 'General Presets' 59 | 60 | v0.19 61 | - fixed issue with clicking on the shortcut empty space 62 | - enhanced the key capture mechanism to minimize unintended Shortcuts Panel activations 63 | - implemented shortcut highlighting for enhanced user experience when modifier keys are pressed 64 | - implemented configurable option to allow dismiss Shortcuts Panel by releasing all modifier keys or pressing any non-modifier key 65 | - changed App icon 66 | - changed behavior of the Shortcuts Panel, now it closes when clicking on a menu item 67 | 68 | v0.18 69 | - fixed issue with F keys (F13 to F20) 70 | - added possibility to control Shortcut Panel width and height 71 | - added possibility to control Persistent Panel width, height and position (to control position pick "desired" option in Window Settings) 72 | 73 | v0.17 74 | - small cosmetic update for macOS 11 75 | - update UI wording and phrases 76 | - improve performance 77 | 78 | v0.16 79 | - fixed a bug that occurred when attempting to edit two columns simultaneously 80 | - fixed a bug that was causing not all menu elements to be displayed 81 | - fixed a bug that prevent menu element to be hovered properly 82 | - fixed a bug with incorrect scroll bar height calculation for Persistent Panel 83 | - added the option to adjust the delay to support Sticky Keys (Settings -> Advanced) 84 | - introduced a new feature for grouping in "My Shortcuts" 85 | - improved the title editing experience for "My Shortcuts" (now with double click/tap) 86 | - improved the format of the exported file, making it more human-readable 87 | 88 | v0.15 89 | - added the capability to switch displaying and bookmarking status of all Custom Shortcuts by clicking table column 90 | - added a notification to indicate the success or failure of the import process 91 | - improved the performance 92 | - improved sending process of user defined Shortcuts 93 | - improved the distribution and filled the columns more evenly 94 | - introduced a custom file extension for import/export Custom Shortcuts files 95 | 96 | v0.14 97 | - fixed typo in English spelling 98 | - fixed Hide Shortcut Panel behaviour when App is not paused 99 | - fixed vertical layout in macOS 12 100 | - added possibility to disable trigger for Persistent Panel 101 | - added possibility to manually register shortcuts 102 | - improved performance 103 | - removed button for Login Items in macOS 11 & 12, as can not open proper place 104 | 105 | v0.13 106 | - fixed crash when pause and toggle hide/show menu bar icon 107 | - added opening Settings Window when opening app while it is running, for people who hide menu bar icon 108 | - added possibility to show app icon 109 | - improved Setting Window view 110 | - changed behaviour of `--show-shortcuts` param from *show* to *toggle* when app is paused 111 | 112 | v0.12 113 | - fixed issue with hiding persistent panel when focused 114 | - improved work with multi-monitor environment 115 | - added integration with CustomShortcuts to customize shortcuts 116 | - added possibility to pause/resume app 117 | - added possibility to toggle Shortcuts panel from menu 118 | - added possibility to toggle Persistent panel from menu 119 | - updated Settings window to modern look 120 | - updated app icon, thanks to wanwindwalker 121 | 122 | v0.11 123 | - fixed bug which might lead to crash in macOS 14 124 | - changed accessing Settings window shortcut key, from pressing ⌘(cmd) 3 times to ⌃(ctrl) 3 times 125 | - added persistent panel (basic), toggle it by pressing ⌘(cmd) 3 times 126 | - added support `skhd` with command line params 127 | - added possibility to trigger show shortcuts panel by passing `--show-shortcuts` param to binary * 128 | - added possibility to toggle persistent panel by passing `--toggle-persistent` param to binary 129 | - improved handling of activation key(s) 130 | - improved bookmark targeting 131 | - improved symbols looks 132 | 133 | \* It's important to note: due to workflow, there's a deliberate delay of 0.5 seconds before the window appears. 134 | 135 | v0.10 136 | - fix issue when some keys was not shown 137 | - fix issue when menu element was not shown if title was empty, for example in firefox (bug?), whatsapp (hidden menu?) 138 | - fix issue when menu group was shown even if no submenu elements left to present 139 | - added option to choose preferred scheme to display 140 | - added option to limit amount of elements for browsers 141 | - added option to truncate long menu titles 142 | - improved performance 143 | - minor interface improvements 144 | 145 | v0.9 146 | - fix issue with icon in Settings in macOS 11 & 12 147 | - fix issue with hover effect on elements in macOS 11 & 12 148 | - fix issue with possible crash when list of shortcuts is too small 149 | - added hide/show shortcuts locally and globally feature (right click element to pick action) 150 | - added bookmarks to shortcuts feature 151 | - added settings to show/hide bookmarked and user-hidden elements 152 | - added legends to preview window in Settings 153 | - added images to help user grant permission 154 | - known issue: no horizontal line present when credits are shown in macOS 14 155 | 156 | v0.8.1 157 | - fixed issue with autoupdater 158 | - fixed issue with incrorrect activation key behaviour 159 | - improving look, allow to hide credits 160 | - add activation key for Settings when menubar icon is hidden (quickly press ⌘ 3 times) 161 | 162 | v0.8 163 | - fixed shortcuts with non standard keys (umlauts etc) 164 | - added other way to activate shortcut list 165 | - added possibility to hide icon in menubar 166 | - added autoupdater 167 | - improved views and scrolls 168 | 169 | v0.7 170 | - fixed issue for displays with larger texts 171 | - added possibility to set delay for hotkey list to appear 172 | - fixed issue with showing empty (duplicate) menus 173 | 174 | v0.6 175 | - improved support macOS Sonoma (14) 176 | - updated symbols look for better experience (+, -, *, delete, backspace) 177 | 178 | v0.5.1 179 | - remove code for old way to add App to Login items 180 | 181 | v0.5 182 | - lower requirements down to macOS 11 183 | - better handling of shortcuts 184 | - allow to change font size 185 | --------------------------------------------------------------------------------