@@ -49,6 +49,17 @@ parse_keycodes() {
4949 code=" ${BASH_REMATCH[1]} "
5050 symbol=$( lookup_keycode_cached " $code " " $XKB_KEYMAP_CACHE " )
5151 echo " ${line/ code: ${code} / $symbol } "
52+ elif [[ " $line " =~ mouse:([0-9]+) ]]; then
53+ code=" ${BASH_REMATCH[1]} "
54+
55+ case " $code " in
56+ 272) symbol=" LEFT MOUSE BUTTON" ;;
57+ 273) symbol=" RIGHT MOUSE BUTTON" ;;
58+ 274) symbol=" MIDDLE MOUSE BUTTON" ;;
59+ * ) symbol=" mouse:${code} " ;;
60+ esac
61+
62+ echo " ${line/ mouse: ${code} / $symbol } "
5263 else
5364 echo " $line "
5465 fi
@@ -101,6 +112,11 @@ dynamic_bindings() {
101112 -e ' s/^77,/SUPER SHIFT CTRL ALT,/'
102113}
103114
115+ # Hardcoded bindings, like the copy-url extension and such
116+ static_bindings () {
117+ echo " SHIFT ALT,L,Copy URL from Web App,extension,copy-url"
118+ }
119+
104120# Parse and format keybindings
105121#
106122# `awk` does the heavy lifting:
@@ -147,13 +163,67 @@ parse_bindings() {
147163}'
148164}
149165
166+ prioritize_entries () {
167+ awk '
168+ {
169+ line = $0
170+ prio = 50
171+ if (match(line, /Terminal/)) prio = 0
172+ if (match(line, /Browser/) && !match(line, /Browser[[:space:]]*\(/)) prio = 1
173+ if (match(line, /File manager/)) prio = 2
174+ if (match(line, /Launch apps/)) prio = 3
175+ if (match(line, /Omarchy menu/)) prio = 4
176+ if (match(line, /System menu/)) prio = 5
177+ if (match(line, /Theme menu/)) prio = 6
178+ if (match(line, /Full screen/)) prio = 7
179+ if (match(line, /Close window/)) prio = 8
180+ if (match(line, /Toggle window floating/)) prio = 9
181+ if (match(line, /Toggle window split/)) prio = 10
182+ if (match(line, /Universal/)) prio = 11
183+ if (match(line, /Clipboard/)) prio = 12
184+ if (match(line, /Emoji picker/)) prio = 13
185+ if (match(line, /Color picker/)) prio = 14
186+ if (match(line, /Screenshot/)) prio = 15
187+ if (match(line, /Screenrecording/)) prio = 16
188+ if (match(line, /(Switch|Next|Former|Previous).*workspace/)) prio = 17
189+ if (match(line, /Move window to workspace/)) prio = 18
190+ if (match(line, /Swap window/)) prio = 19
191+ if (match(line, /Move window focus/)) prio = 20
192+ if (match(line, /Move window$/)) prio = 21
193+ if (match(line, /Resize window/)) prio = 22
194+ if (match(line, /Expand window/)) prio = 23
195+ if (match(line, /Shrink window/)) prio = 24
196+ if (match(line, /scratchpad/)) prio = 25
197+ if (match(line, /notification/)) prio = 26
198+ if (match(line, /Toggle window transparency/)) prio = 27
199+ if (match(line, /Toggle workspace gaps/)) prio = 28
200+ if (match(line, /Toggle nightlight/)) prio = 29
201+ if (match(line, /group/)) prio = 94
202+ if (match(line, /Scroll active workspace/)) prio = 95
203+ if (match(line, /Cycle to/)) prio = 96
204+ if (match(line, /Reveal active/)) prio = 97
205+ if (match(line, /Apple Display/)) prio = 98
206+ if (match(line, /XF86/)) prio = 99
207+
208+ # print "priority<TAB>line"
209+ printf "%d\t%s\n", prio, line
210+ }' |
211+ sort -k1,1n -k2,2 |
212+ cut -f2-
213+ }
214+
150215monitor_height=$( hyprctl monitors -j | jq -r ' .[] | select(.focused == true) | .height' )
151216menu_height=$(( monitor_height * 40 / 100 ))
152217
153218build_keymap_cache
154219
155- dynamic_bindings |
220+ {
221+ dynamic_bindings
222+ static_bindings
223+ } |
156224 sort -u |
157225 parse_keycodes |
158226 parse_bindings |
227+ prioritize_entries |
159228 walker --dmenu -p ' Keybindings' --width 800 --height " $menu_height "
229+
0 commit comments