59 lines
2.0 KiB
Bash
59 lines
2.0 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
NIRI_DIR="$HOME/.config/niri"
|
|
|
|
# === 界面尺寸设置 (在这里微调,下方的所有终端会自动应用) ===
|
|
MENU_WIDTH=90
|
|
MENU_HEIGHT=20
|
|
|
|
# 检查目录
|
|
if [[ ! -d "$NIRI_DIR" ]]; then
|
|
echo "Error: 找不到配置目录 $NIRI_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
# 提取并使用 column 对齐
|
|
MENU_ITEMS=$(grep -Rh 'hotkey-overlay-title=' "$NIRI_DIR" --include="*.kdl" | \
|
|
grep -v '^[ \t]*//' | \
|
|
sed -n -E 's/^[ \t]*(.*)[ \t]+hotkey-overlay-title="([^"]+)".*/\1|\2/p' | \
|
|
sed -E 's/[ \t]*\|/\|/' | \
|
|
column -t -s '|')
|
|
|
|
if [[ -z "$MENU_ITEMS" ]]; then
|
|
echo "没有找到有效的快捷键配置。"
|
|
exit 1
|
|
fi
|
|
|
|
# Fzf 核心命令
|
|
FZF_CMD="echo \"$MENU_ITEMS\" | fzf --reverse --prompt=' 快捷键: ' --info=hidden --border=none > /dev/null"
|
|
|
|
# 动态检测终端并使用对应的参数启动
|
|
if command -v kitty >/dev/null 2>&1; then
|
|
kitty --class "niri-hotkey-menu" --title "快捷键菜单" \
|
|
-o remember_window_size=no -o initial_window_width=${MENU_WIDTH}c -o initial_window_height=${MENU_HEIGHT}c \
|
|
bash -c "$FZF_CMD"
|
|
|
|
elif command -v foot >/dev/null 2>&1; then
|
|
foot --app-id "niri-hotkey-menu" --title "快捷键菜单" \
|
|
--window-size-chars=${MENU_WIDTH}x${MENU_HEIGHT} \
|
|
bash -c "$FZF_CMD"
|
|
|
|
elif command -v alacritty >/dev/null 2>&1; then
|
|
alacritty --class "niri-hotkey-menu" --title "快捷键菜单" \
|
|
-o window.dimensions.columns=${MENU_WIDTH} -o window.dimensions.lines=${MENU_HEIGHT} \
|
|
-e bash -c "$FZF_CMD"
|
|
|
|
elif command -v wezterm >/dev/null 2>&1; then
|
|
wezterm start --class "niri-hotkey-menu" -- bash -c "$FZF_CMD"
|
|
|
|
elif [[ -n "$TERMINAL" ]]; then
|
|
$TERMINAL -e bash -c "$FZF_CMD"
|
|
|
|
else
|
|
echo "Error: 未检测到支持的终端模拟器。"
|
|
if command -v fuzzel >/dev/null 2>&1; then
|
|
# Fuzzel 降级方案也会自动读取顶层变量
|
|
echo "$MENU_ITEMS" | fuzzel --dmenu -i -p " 快捷键: " -w ${MENU_WIDTH} > /dev/null
|
|
fi
|
|
fi
|