初始化dotfiles
This commit is contained in:
40
hypr/scripts/keymap
Executable file
40
hypr/scripts/keymap
Executable file
@ -0,0 +1,40 @@
|
||||
#!/bin/sh
|
||||
# 快捷键速查 - 动态从 hyprctl binds 读取
|
||||
|
||||
modmask_to_str() {
|
||||
local mask=$1
|
||||
local mods=""
|
||||
# bit 0: SHIFT (1), bit 2: CTRL (4), bit 3: ALT (8), bit 6: SUPER (64)
|
||||
[ $((mask & 64)) -ne 0 ] && mods="${mods}Super+"
|
||||
[ $((mask & 1)) -ne 0 ] && mods="${mods}Shift+"
|
||||
[ $((mask & 4)) -ne 0 ] && mods="${mods}Ctrl+"
|
||||
[ $((mask & 8)) -ne 0 ] && mods="${mods}Alt+"
|
||||
[ $((mask & 16)) -ne 0 ] && mods="${mods}Mod2+"
|
||||
[ $((mask & 32)) -ne 0 ] && mods="${mods}Mod3+"
|
||||
[ $((mask & 128)) -ne 0 ] && mods="${mods}Mod5+"
|
||||
echo "${mods%+}"
|
||||
}
|
||||
|
||||
hyprctl binds 2>/dev/null | awk -v RS='' -F'\n' '
|
||||
/^bindd/ {
|
||||
key=""; desc=""; mask=""; submap=""
|
||||
for (i=2; i<=NF; i++) {
|
||||
split($i, kv, ": ")
|
||||
if (kv[1] ~ /^[[:space:]]*modmask$/) mask=kv[2]
|
||||
if (kv[1] ~ /^[[:space:]]*key$/) key=kv[2]
|
||||
if (kv[1] ~ /^[[:space:]]*description$/) desc=kv[2]
|
||||
if (kv[1] ~ /^[[:space:]]*submap$/) submap=kv[2]
|
||||
}
|
||||
# 跳过鼠标绑定和无描述的
|
||||
if (key ~ /^mouse/ || desc == "") next
|
||||
if (submap != "") next
|
||||
print mask "\t" key "\t" desc
|
||||
}
|
||||
' | while IFS=$'\t' read -r mask key desc; do
|
||||
mod_str=$(modmask_to_str "$mask")
|
||||
if [ -n "$mod_str" ]; then
|
||||
printf " %-28s %s\n" "${mod_str}+${key}" "${desc}"
|
||||
else
|
||||
printf " %-28s %s\n" "${key}" "${desc}"
|
||||
fi
|
||||
done | fzf --prompt " 快捷键速查 > " --reverse --no-sort --bind 'esc:abort'
|
||||
Reference in New Issue
Block a user