├── .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 | 
9 | 
10 | 
11 | 
12 |
13 | [](https://github.com/Anze/KeyCluCask/releases/latest)
14 | [](https://formulae.brew.sh/cask/keyclu)
15 |
16 | ## Screenshots
17 | 
18 |
19 | 
20 |
21 | 
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 |
--------------------------------------------------------------------------------