CLI【免费下载链接】rofiRofi: A window switcher, application launcher and dmenu replacement项目地址https://gitcode.com/gh_mirrors/ro/rofi点击查看免费下载rofi是一款面向 X11 的弹出式窗口切换器window switcher、运行对话框run dialog、dmenu 替代方案及 SSH 对话框。它以“快速使用、极少干扰”为设计目标支持键盘与鼠标导航、输入过滤、分词检索tokenized search等功能。本文基于仓库内 mkdocs/docs/1.7.6/rofi.1.markdown 完整讲解 rofi 1.7.6 的运行方式、全部核心配置项、匹配算法、模式mode体系与实战示例并对照源码source/、source/helper.c、source/modes/揭示底层实现原理。读完本文你将能够直接用命令行启动任意 rofi 模式、用 rasi 配置文件持久化全部选项、按需切换匹配与排序算法、自定义 script 模式并集成进 i3 等窗口管理器。基本用法USAGErofi的核心功能是辅助工作流快速切换窗口、启动应用或通过ssh登录远程主机。不同类型的动作由不同的模式mode承担。rofi 是独立应用不应被整合进脚本如需脚本集成请使用其内置的 dmenu 模式详见下文“模拟 dmenu”。直接启动指定模式用rofi -show mode直接以某模式启动。例如显示drun对话框rofi -show drun在极简窗口管理器中一个实用的组合是同时开启drun、run与window模式rofi -show combi -modes combi -combi-modes window,drun,run在该组合模式下列表会先展示所有已打开的窗口再展示所有已安装的应用。因此输入 firefox 并回车时若 firefox 正在运行则切换到它否则启动它。模拟 dmenu使用-dmenu参数即可让 rofi 模拟dmenu(1)X11 下的动态菜单。更多细节参见 doc/rofi-dmenu.5.markdown。显示错误信息rofi -e my message可从命令行直接弹出错误对话框消息支持多行通过配置项可启用 Pango markup 支持见下文。配置体系CONFIGURATION配置选项共有三种设置途径按以下顺序求值后者覆盖前者系统配置文件例如/etc/rofi.rasi先检查XDG_CONFIG_DIRS再检查编译时传入的SYSCONFDIR。只加载找到的第一个配置文件不会合并多个系统配置文件。Rasi 主题文件新的theme格式可以设置配置值。命令行选项直接传给 rofi 的参数。获取配置模板rofi -dump-config config.rasi该命令会输出注释掉的全部当前配置选项被修改过的选项会以未注释形式呈现。若想要同时设置了 icon-theme 的模板rofi -icon-theme hicolor -dump-config官方强烈建议以此为起点编写自己的配置。空的配置段长这样configuration { // set config options here }除-show、-dump-config这类只对单次运行生效的选项外上述绝大多数选项都可以写入此配置段。例如将 dpi 设为 72configuration { dpi: 72; }配置系统支持以下类型string字符串、integer有符号/无符号整数、char字符、boolean布尔、lists列表。具体语法参见rofi-theme(5)manpage仓库内 doc/rofi-theme.5.markdown。命令行布尔选项有特殊语法启用选项 X 用-X禁用用-no-X。通用选项General选项说明-help显示全部命令行选项及其当前取值包含动态运行时生成选项-version显示 rofi 版本并退出-dump-config以 rasi 格式把当前生效配置输出到 stdout 后退出-dump-theme以 rasi 格式把当前生效主题输出到 stdout 后退出-rasi-validate filename尝试解析该文件成功返回 0失败返回非 0-list-keybindings列出所有已知键绑定而不解析它们可用于查找重复绑定-threads num指定线程数0自动检测硬件线程数1禁用多线程2..n指定线程池最大线程数。默认自动检测-display display要连接的 X server默认取$DISPLAY-dmenu以 dmenu 模式运行支持交互式脚本。该模式下 rofi 从 STDIN 读入、向 STDOUT 输出-show mode以指定模式打开 rofi可用模式为window、run、drun、ssh、combi特殊参数keys可打开可搜索的键绑定列表见 doc/rofi-keys.5.markdown。若-show是最后一个参数则显示第一个启用的模式-modes mode1,mode2指定有序、逗号分隔的启用模式列表运行时可通过默认键CtrlTab切换。未指定时启用全部已配置模式-case-sensitive以区分大小写模式启动运行时可用-kb-toggle-case-sensitivity键绑定切换-cycle在结果列表中循环默认true-filter filter把输入栏文本设置为 filter从而过滤列表-config filename加载替代配置文件-cache-dir filename存放临时文件如历史记录的目录-scroll-method method滚动方式0按页滚动1连续滚动-normalize-match匹配前先归一化字符串使o能匹配ö、é能匹配e。实现并不完美但可用开启后暂时禁用匹配部分的高亮-no-lazy-grab禁用 lazy grab强制在 GUI 显示前抓取键盘-no-plugins禁用插件加载-plugin-path directory指定 rofi 查找插件的目录-show-icons在drun与window模式下显示应用图标-icon-theme指定使用的图标主题未指定时使用桌面环境默认主题Adwaita与gnome主题作为回退-markup尽可能使用 Pango markup 格式化输出-normal-window让 rofi 像普通应用窗口一样表现适合 Clerk 这类本质是应用的脚本-transient-window让 rofi 表现得像附着于当前焦点窗口的模态对话框适合用键盘快捷键在当前窗口上触发-[no-]steal-focus启动时抢占焦点退出时把焦点还原给启动前持有焦点的窗口-refilter-timeout-limit过滤操作从即时模式切换到延迟模式的时间阈值毫秒。默认300dmenu 模式的简单示例——显示三个预定义选项echo -e Option #1\nOption #2\nOption #3 | rofi -dmenu或从脚本获取选项~/my_script.sh | rofi -dmenu只启用run与ssh两个启动器rofi -modes run,ssh -show run自定义 script 模式自定义模式通过内置的script模式添加每个模式包含两个参数name:script。例如创建一个名为 Workspaces、使用i3_switch_workspaces.sh脚本的模式rofi -modes window,run,ssh,Workspaces:i3_switch_workspaces.sh -show Workspaces该脚本就在仓库 Examples/i3_switch_workspaces.sh 中其工作方式符合 script 模式协议无参数调用时输出候选列表echo empty; gen_workspaces用户选中后把选中项作为参数再次调用脚本执行动作i3-msg workspace ${WORKSPACE}。注意i3 窗口管理器不喜欢 exec 命令中的逗号此时可用#作为分隔符。TIP模式名允许包含空格rofi -modes My File Browser:fb.sh -show My File Browserscript 模式的完整协议见 doc/rofi-script.5.markdown。每个模式的回退图标可为每个模式指定回退图标configuration { run,drun { fallback-icon: application-xaddon; } }匹配选项Matching-matching method指定匹配算法当前支持normal匹配整个字符串regex按正则表达式匹配输入glob按 glob 模式匹配fuzzy模糊匹配prefix前缀匹配默认normal。注意glob 匹配在较大列表中可能较慢。从源码 source/helper.c 可以看到匹配方法字符串表MatchingMethodStr {Normal, Regex, Glob, Fuzzy, Prefix}create_regex() 展示了各种方法的实现路径——glob 会先经glob_to_regex转换为正则regex 在编译失败时会回退为转义后的字面匹配fuzzy 经fuzzy_to_regex转换prefix 经prefix_regex转换。运行时还可通过helper_select_next_matching_mode()source/helper.c在启用的匹配方法间循环切换对应-kb-toggle-matching-method键绑定。其他匹配选项选项说明-tokenize对输入做分词-drun-categories c1,c2只显示位于所列类别中的 desktop 文件-drun-match-fields f1,f2,...drun 模式只按指定 Desktop Entry 字段匹配name名称、generic通用名、exec可执行文件、categories类别、comment注释、all以上全部。默认name,generic,exec,categories,keywords-drun-display-formatdrun 对话框的格式串可用字段name、generic、exec、categories、comment、urllink 型 desktop 文件的 URL。支持 Pango markup。默认{name} [span weightlight sizesmalli({generic})/i/span]。注意只有-drun-match-fields启用的字段能用于格式串-[no-]drun-show-actions显示 desktop 文件中的动作actions。默认false-window-match-fields f1,f2,...window 模式只按指定字段匹配title标题、class类、role角色、name名称、desktop当前桌面、all全部。默认all-matching-negate-char char设置用于否定查询的字符即下一个关键词不匹配。设为\x0可禁用。默认--normalize-match的实现同样在 source/helper.c匹配前调用 GLib 的g_utf8_normalize(os, -1, G_NORMALIZE_ALL)做 Unicode 归一化从而剥离重音符号helper.c 确认归一化匹配时禁用高亮Disable highlighting for normalize match, not supported atm.。过滤菜单排序Filtered menu sort选项说明-[no-]sort启用/禁用过滤菜单的排序运行时可用-kb-toggle-sort切换-sorting-method method排序方法两种levenshtein默认与fzf排序方法的解析见 source/helper.c命中levenshtein设为SORT_NORMAL命中fzf设为SORT_FZF还有内部变体SORT_FZF_V2。布局与主题Layout and Theming重要在新版本 rofi 中所有主题选项都已迁入新的主题格式不再是可以直接传给命令行的普通选项数量太多。小块主题代码可通过命令行传入例如rofi -theme-str window {width: 50%;}它会合并进当前主题也可以追加在 rofi 配置文件末尾来覆盖主题的局部设置。下列选项大多已废弃建议使用新主题格式定制 rofi详见 doc/rofi-theme.5.markdown选项说明-location指定窗口位置数字对应屏幕方位1 2 3 / 8 0 4 / 7 6 5。默认0居中-fixed-num-lines保持固定数量的可见行-sidebar-mode以 sidebar 模式打开所有启用模式以列表形式显示在底部见-modes-hover-select自动选中鼠标悬停的条目最适合与自定义鼠标绑定组合使用-eh number设置行高以字符为单位。默认1-auto-select只剩一个条目时自动选中它-m/-monitor num/name选择显示 rofi 的显示器接受primary、xrandr输出名或整数编号。负数含义不同-1当前焦点显示器-2当前焦点窗口显示在焦点窗口之上-3鼠标位置覆盖 location 设置以得到普通上下文菜单行为-4焦点窗口所在的显示器-5鼠标指针所在显示器。默认-5-theme filename新主题格式文件的路径覆盖旧主题设置-theme-str string在命令行指定主题片段作为覆盖可多次指定例如rofi -theme-str #window { fullscreen: true; }。这是当前通过命令行微调主题的方式-dpi number覆盖默认 DPI0基于 X11 屏幕尺寸自动检测类似 i3 与 GTK1基于 rofi 所在显示器尺寸自动检测类似最新 Qt 5-selected-row row预选某一行。默认0hover-select 与单击接受组合使用rofi -show run -hover-select -me-select-entry -me-accept-entry MousePrimary侧边栏模式rofi -show run -sidebar-modePATTERN 设置选项说明-terminal指定启动的终端。示例rofi -terminal xterm。模式{terminal}。默认x-terminal-emulator-ssh-client client覆盖使用的 ssh 客户端。模式{ssh-client}。默认sshSSH 设置选项说明-ssh-command cmd设置启动 ssh 会话时执行的命令模式{host}会被替换为所选 ssh 条目。默认{terminal} -e {ssh-client} {host}-parse-hosts解析/etc/hosts文件中的条目。默认disabled-[no-]parse-known-hosts解析~/.ssh/known_hosts文件中的条目。默认enabledRun 设置选项说明-run-command cmd运行应用时执行的命令模式{cmd}参见PATTERN。默认{cmd}-run-shell-command cmd在 shell 中运行应用时执行的命令。默认{terminal} -e {cmd}-run-list-command cmd若设置则用外部工具生成可执行命令列表使用run-command示例用 systemd 在专用 cgroup 中运行应用需要 shell 来正确转义与插值单元名bash -c systemd-run --user --unitapp-rofi-\$(systemd-escape {cmd})-\$RANDOM {cmd}Window 切换器设置-window-format format控制窗口显示内容格式为{field[:len]}字段fieldw桌面名、t窗口标题、n名称、r角色、c类长度len字段最大长度0 为自适应。为负则条目保持原样为正则截断或填充到该长度默认{w} {c} {t}选项说明-window-command cmd对所选窗口执行 alt 动作-kb-accept-alt时运行的命令模式见PATTERN。默认wmctrl -i -R {window}-window-thumbnail在窗口切换器中显示窗口缩略图若可用作为图标窗口模式的相关 rasi 配置可让 rofi 关闭一个窗口后不退出便于连续关闭多个窗口configuration { window { close-on-delete: false; } }隐藏当前活动窗口configuration { window { hide-active-window: true; } }或命令行传-window-hide-active-window true。优先使用图标主题而非窗口自带图标configuration { window { prefer-icon-theme: true; } }或命令行传-window-prefer-icon-theme true。Combi 设置-combi-modes mode1,mode2指定 combi 模式要组合的子模式语法同-modes。将window、run、ssh合并为一个视图rofi -show combi -combi-modes window,run,ssh -modes combi注意i3 不喜欢 exec 命令中的逗号此时可用#作分隔符。-combi-display-format设置 combi 对话框条目的格式串可用字段mode模式显示名、text条目文本支持 Pango markup。默认{mode} {text}。注意启用combi-hide-mode-prefix时忽略此设置。历史History选项说明-[no-]disable-history禁用/重新启用历史记录-max-history-size number历史记录最大条目数默认 25。警告设得过高会导致变慢消息对话框-e message弹出显示message的消息对话框内部用于显示错误消息可多行。传-e -会阻塞式从标准输入读取并显示。文件浏览器设置File browser通过 rasi 配置段控制configuration { filebrowser { /** Directory the file browser starts in. */ directory: /some/directory; /** * Sorting method. Can be set to: * - name * - mtime (modification time) * - atime (access time) * - ctime (change time) */ sorting-method: name; /** Group directories before files. */ directories-first: true; /** Show hidden files. */ show-hidden: false; /** return 1 on cancel. */ cancel-returns-1: true; /** command */ command: xdg-open; } }这些选项也可在命令行传入例如rofi -filebrowser-cancel-returns-1 true -show filebrowsershow-hidden还可以通过kb-delete-entry键绑定触发。该模式源码见 source/modes/filebrowser.c模式注册于 filebrowser.c。递归浏览器设置Recursive Browserconfiguration { recursivebrowser { /** Directory the file browser starts in. */ directory: /some/directory; /** return 1 on cancel. */ cancel-returns-1: true; /** filter entries using regex */ filter-regex: (.*cache.*|.*\.o); /** command */ command: xdg-open; } }对应模式注册见 source/modes/recursivebrowser.c。输入历史Entry history输入框保留的既往输入数量可通过 entry 的 max-history 设置configuration { entry { max-history: 30; } }默认情况下历史文件存放在系统缓存目录的rofi-entry-history.txt中。其他选项Other选项说明-drun-use-desktop-cache构建并使用 desktop 文件内容的缓存适合硬盘较慢的系统-drun-reload-desktop-cache若启用drun-use-desktop-cache则重建 desktop 文件缓存-drun-url-launcher command打开 Link 型 Desktop Entry 的命令-pid path创建 pid 文件并在启动时检查。pid 文件可防止多个 rofi 实例同时运行适合从键绑定守护进程启动 rofi 的场景-replace若 rofi 已基于 pid 文件在运行则尝试杀掉旧实例-display-{mode} string设置模式的显示名用作提示符及 combi 浏览器中的名称。推荐改用配置文件configuration { {mode} { display-name: string; } }选项说明-[no-]click-to-exit点击 rofi 窗口外部退出。默认enabled-xserver-i300-workaround针对 Xserver 中 bug 的 workaround见 rofi issue tracker #611 与 #1642。默认disabledPATTERN 替换规则启动命令例如 ssh 启动器时用户可输入使用的命令行以下键会在运行时被替换{host}要连接的主机{terminal}配置的终端见 -terminal{ssh-client}配置的 ssh 客户端见 -ssh-client{cmd}要执行的命令{window}所选窗口的窗口 ID用于window-command处理规则{key}被替换为对应值若{key}未设置则删除若{key}位于[]之间且未设置则删除[]之间的所有文本否则替换 key 并移除[]。例如{ssh-client} [-p {port}] {host}实现层面PATTERN 替换由helper_parse_setup()source/helper.c完成默认预置{terminal}与{ssh-client}的映射随后把传入的 key-value 插入 GHashTable经helper_string_replace_if_exists_v()替换后再用g_shell_parse_argv()解析为 shell 参数。键绑定、超时与输入变更Key Bindings / Timeout / Input change键绑定及其设置方法见rofi-keys(5)manpage仓库内 doc/rofi-keys.5.markdown。键绑定也可用于动作——动作执行时插入对应的击键。超时动作Timeout可配置 rofi 在一定秒数无交互后执行动作通过键绑定在 X 秒后触发configuration { timeout { delay: 15; action: kb-cancel; } }输入变更Input change当输入框文本变化时configuration { inputchange { action: kb-row-first; } }可用模式Available Modeswindow列出所有窗口并允许切换。按下delete-entry绑定shift-delete关闭窗口按下accept-custom绑定control-enter或shift-enter对窗口执行命令见window-command选项。若无匹配项则尝试启动输入内容。windowcd列出当前桌面上的窗口并允许切换。delete-entryshift-delete杀死窗口accept-customcontrol-enter/shift-enter对窗口执行命令。若无匹配项则尝试启动输入。对应模式定义见 source/modes/window.c。run列出$PATH中的可执行文件并可启动可选在终端中运行。delete-entryshift-delete从运行历史中移除该条目accept-customcontrol-enter按输入框内容原样执行命令accept-altshift-enter在终端中执行命令按下mode-complete绑定Control-l可进入 File Browser 模式把文件作为第一个参数启动应用。drun与 run 类似但列表来自已安装的 desktop 文件若 Desktop File 中指定了终端则自动在终端中启动。delete-entryshift-delete从运行历史移除accept-customcontrol-enter按输入框内容执行accept-altshift-enter在终端中执行mode-completeControl-l可进入 File Browser 模式按 desktop 文件指定传入文件参数。DRUN 模式遵循 XDG Desktop Entry Specification可查看丢弃原因。drun 的高级行为选项configuration { drun { /** Scan the current users desktop for desktop files. */ scan-desktop: true; /** Parse user desktop files. */ parse-user: true; /** Parse system desktop files. */ parse-system: false; } }drun 模式实现见 source/modes/drun.c。ssh基于ssh配置文件显示 SSH 目标列表可快速 ssh 登录。keys显示可搜索的键绑定列表。script允许添加自定义脚本模式详见rofi-script(5)manpagedoc/rofi-script.5.markdown。combi将多个模式合并为一个列表用-combi-modes指定包含的模式。该模式注册于 source/modes/combi.c。使用 combi 模式时可用!bang语法按模式过滤结果所有以 bang 为前缀匹配的模式都会被包含。例如指定-combi-modes run,window,windowcd后若查询以!w开头则只显示window与windowcd模式的结果即使其余输入文本能匹配run的结果也不显示。若无匹配输入交给第一个组合模式处理。FAQ 速查窗口切换器文本未对齐尝试使用等宽字体或使用 Tab 加 tab-stops 设置。窗口完全黑屏检查命令行引号可能误用了“智能引号”“而非半角引号。右上角图标含义空格不区分大小写且未排序-启用大小写敏感、未排序不区分大小写且启用排序±排序与大小写敏感同时启用。为什么 run、drun、window 模式图标不同各模式图标解析方法不同——window 先用应用经 X11 Server 暴露的图标未设置则按窗口 Class 名在图标主题中查找drun 使用 desktop 文件中设置的图标run 按可执行文件名查找。实战示例EXAMPLES显示运行对话框rofi -modes run -show run显示运行对话框并允许切换到 Desktop File 运行对话框drunrofi -modes run,drun -show run组合 run 与 drunrofi -modes combi -show combi -combi-modes run,drun组合 run 与 drun并允许切换到窗口切换器rofi -modes combi,window -show combi -combi-modes run,drun弹出文本消息rofi -e This is the end弹出红色加粗文本消息rofi -e span colorredbThis is still the end/b/span -markup显示所有键绑定rofi -show keys与 i3 集成在 i3 中应绑定rofi 在按键释放key release时启动否则无法抓取键盘。部分工具如import、xdotool在 KeyPress 事件时可能无法运行因为键盘/指针仍被抓取。此时可用--release标志让命令在按键释放后执行。仓库 Examples/ 中还提供了 i3 工作区切换脚本i3_switch_workspaces.sh、i3_empty_workspace.sh与 rofi-file-browser.sh 等可直接参考的实战脚本。调试、许可与更多资料调试信息见rofi-debugging(5)manpagedoc/rofi-debugging.5.markdown主题体系见rofi-theme(5)doc/rofi-theme.5.markdowndmenu 模式详见rofi-dmenu(5)doc/rofi-dmenu.5.markdown主题选择器见rofi-theme-selector(1)doc/rofi-theme-selector.1.markdown与 script/rofi-theme-selector。rofi 以 MIT/X11 许可发布完整许可文本见 COPYING。项目提供 rasi 格式的默认主题与配置示例doc/default_theme.rasi、doc/default_configuration.rasi以及 themes/ 下的数十款现成主题如 gruvbox 系列、solarized、sidebar 等可作为自定义主题的起点。安装方式与依赖说明见 INSTALL.md完整配置项索引可查阅 CONFIG.md。赞分享CLI【免费下载链接】rofiRofi: A window switcher, application launcher and dmenu replacement项目地址https://gitcode.com/gh_mirrors/ro/rofi点击查看免费下载相关推荐发布工程师面试重点DevOps Interview Guide中的摩根士丹利经验发布工程师面试重点DevOps Interview Guide中的摩根士丹利经验 在竞争激烈的金融科技领域摩根士丹利的发布工程师岗位面试以其深度和实战性著称CLIRofi 完整使用手册窗口切换、应用启动、SSH 对话框与 dmenu 替代者rofi 1.7.2 实战指南Rofi 完整使用手册窗口切换、应用启动、SSH 对话框与 dmenu 替代者rofi 1.7.2 实战指南 rofi 是一个 X11 下的弹出式窗口切换CLI怎样在10分钟内完成专业级黑苹果配置OpCore-Simplify智能工具完整指南怎样在10分钟内完成专业级黑苹果配置OpCore Simplify智能工具完整指南 还在为复杂的OpenCore配置而烦恼吗面对繁琐的硬件识别、驱动匹配和系CLI上一篇NeoMutt中的S/MIME功能使用指南下一篇Vision Mamba与ViTDet集成打造下一代视觉基础模型的完整生态创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
