#fuzzy #launcher #theming #menu #scheme #multi-page #keybinds

app fr33zmenu

终端的多页面模糊启动器

6个版本

0.1.5 2023年1月13日
0.1.4 2022年12月18日

#3#theming

每月24次下载

GPL-3.0-or-later

220KB
925

 
 
preview

fr33zmenu

终端的多页面模糊启动器,用Rust编写。

支持主题和多种按键绑定方案,包括基本的vim按键绑定。

安装      使用      集成      配置
 
 

安装

如果您没有Rust,请按照此处的安装说明进行操作。

运行以下命令安装fr33zmenu

cargo install fr33zmenu

使用

运行以下命令查看帮助:fr33zmenu --help

如果找不到命令,您需要将 ~/.cargo/bin 添加到您的路径中。

echo 'export PATH=$PATH:~/.cargo/bin' >> ~/.bashrc
source ~/.bashrc

如果您使用的是zsh,将 ~/.bashrc 替换为 ~/.zshrc

集成

本指南将演示如何将fr33zmenu与您的窗口管理器集成。您需要根据您的终端和窗口管理器进行调整(显然),但在此指南中,我使用Hyprland(wayland合成器)和Kitty(终端)。

1. 创建配置文件

请参阅下面的配置部分。我将我的保存为~/.config/fr33menu/menu.toml

2. 为您的窗口管理器创建一个脚本

我将我的保存为~/scripts/launcher

#!/bin/sh

fr33zmenu ~/.config/fr33zmenu/menu.toml \
    --exec-with "nohup hyprctl dispatch exec" \
    --transient

3. 配置窗口管理器/合成器

通过按键绑定和窗口规则,可以使终端窗口表现得像一个图形启动器。我的目标是使窗口以固定大小在屏幕中央弹出。

以下配置已添加到我的~/.config/hypr/hyprland.conf

$launcher = kitty --class fr33zmenu ~/scripts/launcher
bind = $mainMod, SPACE, exec, $launcher

windowrulev2 = float, class:fr33zmenu
windowrulev2 = size 600 400, class:fr33zmenu
windowrulev2 = center, class:fr33zmenu

如果您的终端不支持使用提供的类打开,可以使用窗口的标题。

配置

  • 支持格式:toml json yaml ini ron json5

支持主题、按键绑定和菜单的配置。没有预设的配置目录,因为您的配置文件路径将作为位置参数传递。即便如此,您可能希望将配置文件存储在~/.config/fr33zmenu中,以便于组织。

注意:所有配置选项必须位于传递给程序的单一文件中。目前不支持提供或导入多个配置文件。

菜单

必需

菜单定义了程序的交互内容。每个菜单在界面的第一行显示为一个选项卡,当前菜单的条目显示在菜单提示下方。

示例

[menus.programs]         # Define a new menu named "programs"
order  = -1              # Ensure it is the first menu
prompt = "launch -> "    # Give it a cool prompt

[menus.programs.entries] # Define the menu's entries
# ↓ Name      ↓ Value
emacs      = "emacsclient -c -a emacs"
librewolf  = "librewolf --browser"
strawberry = "strawberry"
gimp       = "gimp --new-instance"
gajim      = "gajim --show"

[menus.power]            # Another menu
prompt = "power -> "

[menus.power.entries]
shutdown = "shutdown now"
reboot   = "reboot"

快捷键

可选 - 如果您的配置中缺少此部分,将加载默认值。

  • 快捷键必须包含恰好一个非修饰键。
  • 一个命令可以有多个快捷键,但一个快捷键不能绑定到多个命令。
  • 快捷键不区分大小写。

命名键

  • 修饰键
    • shift
    • control | ctrl
    • alt
    • backspace | back
    • enter | return | ret
  • 非修饰键
    • left
    • right
    • up
    • down
    • home
    • end
    • pageup | pgup
    • pagedown | pgdn
    • tab
    • delete | del
    • insert
    • escape | esc

示例(默认快捷键)

[keybinds]
exit        = [ "escape", "ctrl+c" ]
submit      = [ "enter" ]
clear       = [ "shift+del", "ctrl+del" ]
delete_next = [ "delete" ]
delete_back = [ "backspace" ]
input_next  = [ "right" ]
input_back  = [ "left" ]
entry_next  = [ "down", "ctrl+down", "ctrl+j", "tab" ]
entry_back  = [ "up", "ctrl+up", "ctrl+k", "shift+tab" ]
menu_next   = [ "ctrl+right", "ctrl+l" ]
menu_back   = [ "ctrl+left", "ctrl+h" ]

主题

可选 - 如果您的配置中缺少此部分,将加载默认值。

界面上所有文本都可以自定义主题。主题中的每个值都接受以下属性

  • fg - 前景色/文字颜色
  • bg - 背景颜色
  • attrs - 由逗号分隔的文字样式属性字符串,例如:bold, italic, underlined
    • bold
    • dim
    • italic
    • underlined
    • hidden

接受任何有效的CSS颜色字符串,但alpha值将无效果。

示例(默认主题)

[theme]
prompt             = { fg = "#a6e3a1", attrs = "bold" }
input              = { fg = "#cdd6f4" }
entry_name         = { fg = "#cdd6f4" }
entry_value        = { fg = "#6c7086" }
entry_match        = { fg = "#74c7ec", attrs = "bold" }
entry_hidden       = { fg = "#45475a" }
entry_cursor       = { fg = "#1e1e2e", bg = "#cdd6f4", attrs = "bold" }
entry_cursor_match = { fg = "#1e1e2e", bg = "#74c7ec", attrs = "bold" }
menu_name          = { fg = "#f38ba8" }
menu_cursor        = { fg = "#1e1e2e", bg = "#f38ba8", attrs = "bold" }
overflow           = { fg = "#f9e2af", attrs = "bold" }

依赖关系

~5–17MB
~167K SLoC