#!/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