Rofi 键位绑定完全指南:Keyboard 与 Mouse Bindings 的自定义与实现原理
Rofi 键位绑定完全指南Keyboard 与 Mouse Bindings 的自定义与实现原理【免费下载链接】rofiRofi: A window switcher, application launcher and dmenu replacement项目地址: https://gitcode.com/gh_mirrors/ro/rofirofi-keys(5) 实战解读本文以 Rofi 官方手册 rofi-keys.51.7.6 版为骨架系统讲解 Rofi 中所有可覆盖的键盘与鼠标绑定从命令行与配置文件两种设置方式、键名/keycode 写法、多键与按键释放触发到 70 项键盘绑定与鼠标绑定的完整默认值对照表并结合 source/keyb.c、include/keyb.h 等源码剖析其底层解析与分发机制。读完你将能够完全掌控 Rofi 的输入行为按自己的习惯定制任何动作的触发键。绑定机制概述Rofi 几乎允许覆盖它任何键盘和鼠标绑定。每个可触发的动作都有一个对应的kb-键盘或ml-/me-鼠标前缀选项例如接受条目kb-accept-entry、取消退出kb-cancel、切换匹配模式kb-mode-next等。从源码结构看这些选项在 source/keyb.c 中被集中定义为一个ActionBindingEntry rofi_bindings[]数组每个条目包含内部动作 IDid、作用域scope、配置名name、默认绑定串binding与说明注释comment。本文列出的所有默认值即来源于该数组手册与源码保持一致是排查“为什么某个按键不生效”的第一现场。如何设置绑定绑定有两种设置途径效果完全等价。命令行方式通过-{bindingname}参数直接传值rofi -show run -kb-accept-entry ControlShiftspace-show run启动运行模式同时把“接受条目”重新绑定为ControlShiftspace。配置文件方式写入 Rofi 的 rasi 配置默认为~/.config/rofi/config.rasiconfiguration { kb-accept-entry: ControlShiftspace; }键名与 keycode 两种写法绑定键既可以用键名见后文各绑定默认值中使用的键名如Return、Escape也可以用方括号包裹的数字 keycodeconfiguration { kb-accept-entry: ControlShift[65]; }这里[65]表示 65 号 keycode。查找某个物理按键的 keycode最方便的工具是xev(1)在 X11 会话中启动 xev 后按下目标键即可看到其 keycode 数值。一个动作绑定多个键同一个动作可以绑定多个按键使用逗号分隔的列表configuration { kb-accept-entry: ControlShiftspace,Return; }解析时对应 parse_keys_abe 中对每个绑定串按,切分的逻辑每个键都会被注册为同一动作的触发键。在“按键释放”时触发默认情况下 Rofi 在按下时响应绑定。若希望改为在所有按键释放时触发在绑定串前加!前缀configuration { kb-accept-entry: !ControlShiftspace,Return; }!只作用于它所在的那个键项。源码中默认的鼠标点击绑定正是利用了这一机制见下文“鼠标绑定的底层实现”。取消unset一个绑定将绑定值设为空字符串即可取消该绑定configuration { kb-clear-line: ; }取消后该动作不再响应任何键。查看当前绑定的完整列表手册与源码都提供了直接查看所有绑定的手段。在 source/rofi.c 中rofi -list-keybindings参数会调用abe_list_all_bindings()实现在 source/keyb.c打印当前注册的全部绑定及其默认值后退出rofi -list-keybindings当配置解析发现某个键被重复绑定到多个动作时Rofi 的错误提示也会主动建议你运行rofi -list-keybindings查看当前绑定列表见 source/keyb.c 的错误文案构造。键盘绑定完整参考默认值对照表以下按功能分组列出全部键盘绑定、动作说明与默认键位。若某组与你无关可直接跳过需要改哪个就查哪项。剪贴板与粘贴绑定名动作说明默认值kb-primary-paste粘贴主选择区primary selectionControlV,ShiftInsertkb-secondary-paste粘贴剪贴板clipboardControlv,Insertkb-secondary-copy复制当前选中项到剪贴板Controlc注意kb-primary-paste默认中的ControlV大写 V与kb-secondary-paste的Controlv小写 v在写法上是区分开的含义分别是主选择与剪贴板两种不同的粘贴源。输入行编辑绑定名动作说明默认值kb-clear-line清空输入行Controlwkb-move-front光标移到行首Controlakb-move-end光标移到行尾Controlekb-move-word-back光标后退一个单词Altb,ControlLeftkb-move-word-forward光标前进一个单词Altf,ControlRightkb-move-char-back光标后退一个字符Left,Controlbkb-move-char-forward光标前进一个字符Right,Controlfkb-remove-word-back删除前一个单词ControlAlth,ControlBackSpacekb-remove-word-forward删除下一个单词ControlAltdkb-remove-char-forward删除下一个字符Delete,Controldkb-remove-char-back删除前一个字符BackSpace,ShiftBackSpace,Controlhkb-remove-to-eol删除到行尾Controlkkb-remove-to-sol删除到行首Controlu接受与确认绑定名动作说明默认值kb-accept-entry接受当前选中的条目Controlj,Controlm,Return,KP_Enterkb-accept-custom把输入的文本作为命令执行ssh/run 模式ControlReturnkb-accept-custom-alt同上另一种自定义接受方式ssh/run 模式ControlShiftReturnkb-accept-alt使用备用接受命令ShiftReturnkb-delete-entry从历史记录中删除条目ShiftDeletekb-accept-alt对应“备用动作”——例如 run 模式中用它直接执行选中项而非插入到输入框具体行为依赖当前模式如 doc/rofi.1.markdown 中提到的-kb-accept-alt关联的 alt-action。模式切换与补全绑定名动作说明默认值kb-mode-next切换到下一个模式ShiftRight,ControlTabkb-mode-previous切换到上一个模式ShiftLeft,ControlISO_Left_Tabkb-mode-complete开始当前模式的补全Controll列表导航绑定名动作说明默认值kb-row-left移动到上一列ControlPage_Upkb-row-right移动到下一列ControlPage_Downkb-row-up选择上一个条目Up,Controlpkb-row-down选择下一个条目Down,Controlnkb-row-tab移到下一行若已到最后一行则接受若无更多行则切到下一模式无默认kb-element-next移到下一行Tabkb-element-prev移到上一行ISO_Left_Tabkb-page-prev上一页Page_Upkb-page-next下一页Page_Downkb-row-first跳到第一个条目Home,KP_Homekb-row-last跳到最后一个条目End,KP_Endkb-row-select把选中的条目设为输入文本Controlspace注意kb-row-tab在默认绑定表中没有默认键绑定串为空这是源码中唯一一个默认值为空的键盘绑定见 source/keyb.c想要启用它需要手动为其指定键。显示与视图控制绑定名动作说明默认值kb-screenshot对 Rofi 窗口截图AltSkb-ellipsize在省略号显示模式间切换Altperiodkb-toggle-case-sensitivity切换大小写敏感匹配grave,dead_gravekb-toggle-sort切换过滤后菜单排序Altgravekb-cancel退出 RofiEscape,Controlg,Controlbracketleftkb-toggle-case-sensitivity与kb-toggle-sort是运行时切换开关例如运行模式下输入过滤默认不区分大小写按下grave即可临时切换排序行为默认开启Altgrave可切换doc/rofi.1.markdown 对此有配套说明。另外从 source/keyb.c 的数组定义看kb-cancel的默认绑定串中还包含MouseSecondary即右键单击同样触发退出。自定义动作kb-custom-1 … 19绑定名默认值绑定名默认值kb-custom-1Alt1kb-custom-11Altexclamkb-custom-2Alt2kb-custom-12Altatkb-custom-3Alt3kb-custom-13Altnumbersignkb-custom-4Alt4kb-custom-14Altdollarkb-custom-5Alt5kb-custom-15Altpercentkb-custom-6Alt6kb-custom-16Altdead_circumflexkb-custom-7Alt7kb-custom-17Altampersandkb-custom-8Alt8kb-custom-18Altasteriskkb-custom-9Alt9kb-custom-19Altparenleftkb-custom-10Alt0kb-custom-1到kb-custom-19对应 19 个可编程动作槽位可在配置文件中配合custom-1到custom-19选项定义每个槽位执行的具体命令dmenu 模式下则输出对应的-dmenu自定义返回编号。从键名可以看到AltShift1这类带符号组合使用的是 X11 键名exclam、at、numbersign、dollar、percent、dead_circumflex、ampersand、asterisk、parenleft。行快速选择kb-select-1 … 10绑定名默认值绑定名默认值kb-select-1Super1kb-select-6Super6kb-select-2Super2kb-select-7Super7kb-select-3Super3kb-select-8Super8kb-select-4Super4kb-select-9Super9kb-select-5Super5kb-select-10Super0输入历史导航绑定名动作说明默认值kb-entry-history-up在输入历史中向上ControlUpkb-entry-history-down在输入历史中向下ControlDown更高版本新增的键盘绑定当前仓库根目录的 doc/rofi-keys.5.markdown对应更新版本在 1.7.6 基础上还登记了以下绑定源码 source/keyb.c 与 source/keyb.c 中同样有定义如果你使用的 Rofi 版本较新可以一并使用绑定名动作说明默认值kb-transpose-chars交换光标前两个字符Controltkb-matcher-up选择上一个匹配器matcherSuperequalkb-matcher-down选择下一个匹配器Superminus鼠标绑定完整参考Rofi 除了键盘绑定还提供两组鼠标绑定ml-前缀列表视图滚动/导航与me-前缀列表条目上的点击动作。绑定名动作说明默认值ml-row-left移动到上一列ScrollLeftml-row-right移动到下一列ScrollRightml-row-up选择上一个条目ScrollUpml-row-down选择下一个条目ScrollDownme-select-entry选中鼠标悬停的行MousePrimaryme-accept-entry接受鼠标悬停的行MouseDPrimaryme-accept-custom以自定义动作接受鼠标悬停的行ControlMouseDPrimary其中ScrollUp/ScrollDown/ScrollLeft/ScrollRight是滚轮事件键名MousePrimary/MouseDPrimary是鼠标按钮键名见下节。默认的单击选中、双击接受行为正来自这些默认值。鼠标按键的命名与标识构造规则以下鼠标按钮可以绑定到上述ml-/me-动作键名含义Primary主按钮左键单击Secondary次按钮右键单击Middle中键单击Forward前进键Back后退键ExtraN第 N 个附加鼠标键取决于鼠标支持鼠标绑定的标识符按如下模板构造MouseDButtonD可选的Double双击标记Button按钮名称。例如MouseDPrimary即主按钮左键双击MousePrimary为左键单击。手册中me-accept-entry默认值为MouseDPrimary双击接受而me-select-entry默认MousePrimary单击选中二者配合形成了“单击选、双击定”的典型交互。底层实现绑定如何注册与分发理解了配置写法后结合源码可以看清一条绑定的完整生命周期。1. 默认值注册进配置系统启动早期source/rofi.c 调用的setup_abe()实现在 source/keyb.cRofi 遍历rofi_bindings[]数组把每个kb-*/ml-*/me-*选项以xrm_String类型注册进配置解析器config_parser_add_option。命令行参数与配置文件对同一选项的覆盖都发生在这套配置系统之上——你改写的任何绑定最终都会替换数组中的默认字符串。2. 绑定串解析与去重校验随后 parse_keys_abe 把每个绑定串按,切分成单个键交给底层nk_bindings_add_binding()来自nkutils-bindings库注册。该函数返回错误时若错误是NK_BINDINGS_ERROR_ALREADY_REGISTERED同一键被重复绑定Rofi 会生成一条带提示的报错消息建议执行rofi -list-keybindings查看冲突其他解析错误键名拼错、组合非法等会显示底层错误消息。所有错误会累积显示rofi_add_error_message不会静默失败——这也是配置绑定后“不生效”时最直接的排查入口。3. 作用域scope与命中判定每个动作都声明了自己的作用域定义在 include/keyb.hSCOPE_GLOBAL全局作用域键盘动作默认在此SCOPE_MOUSE_LISTVIEW/SCOPE_MOUSE_LISTVIEW_ELEMENT/SCOPE_MOUSE_EDITBOX/SCOPE_MOUSE_SCROLLBAR/SCOPE_MOUSE_MODE_SWITCHER鼠标交互作用域分别对应列表视图、列表条目、输入框、滚动条、模式切换器。按键事件触发后rofi_view_check_action 先检查动作是否适用于当前作用域鼠标动作需要先通过widget_find_mouse_target按鼠标坐标命中目标控件命中失败则动作不触发命中后由 rofi_view_trigger_action 执行动作——全局动作直接进入rofi_view_trigger_global_action()鼠标动作则下发给目标 widget 的widget_trigger_action()处理并支持按下后拖拽motion grab的连续分发。这套“作用域 命中检测”机制解释了为什么鼠标绑定只在悬停于对应控件时才生效。4. 默认鼠标点击绑定的!用法除rofi_bindings[]外source/keyb.c 还定义了一组固定默认的鼠标点击动作static const gchar *mouse_default_bindings[] { [MOUSE_CLICK_DOWN] MousePrimary, [MOUSE_CLICK_UP] !MousePrimary, [MOUSE_DCLICK_DOWN] MouseDPrimary, [MOUSE_DCLICK_UP] !MouseDPrimary, };这里清晰地展示了!前缀的语义MousePrimary在按下时触发、!MousePrimary在释放时触发二者共同构成了完整的“按下-释放”点击事件对双击同理。这些默认绑定会应用到输入框、滚动条、模式切换器等所有固定鼠标作用域见 parse_keys_abe 的循环注册逻辑。实用建议与常见问题键名写法组合键使用连接修饰键与主键例如ControlShiftspace特殊键使用 X11 键名Return、Escape、KP_Enter、ISO_Left_Tab、grave、dead_grave、parenleft等不确定时可用xev查键名与 keycode。冲突排查绑定不生效时先确认是否与其他动作重复占用Rofi 会报Binding ... is already bound再用rofi -list-keybindings复核最终绑定集。!只影响其所在键项!ControlShiftspace,Return中只有第一个键改为释放触发Return仍是按下触发。空字符串即取消想彻底禁用某动作如kb-clear-line赋值即可无需指定替代键。启用kb-row-tab该动作默认无键按需自行绑定例如kb-row-tab: ShiftTab;。SuperWin 键绑定注意kb-select-1…10默认占用Super1…0若你的桌面环境/窗口管理器已捕获 Super 组合键需在 WM 侧放行或改用其他组合。延伸阅读doc/rofi.1.markdownrofi(1) 主手册包含-list-keybindings、-kb-*命令行参数及 alt-action 的完整说明doc/rofi-theme.5.markdownrofi-theme(5) 主题手册doc/rofi-script.5.markdownrofi-script(5) 脚本模式手册doc/rofi-sensible-terminal.1.markdownrofi-sensible-terminal(1) 终端选择工具手册不同历史版本的键位手册见 mkdocs/docs/ 目录下各版本如 1.7.6 版 mkdocs/docs/1.7.6/rofi-keys.5.markdown。说明本文全部默认值以 1.7.6 版 mkdocs/docs/1.7.6/rofi-keys.5.markdown 为准更新版本新增的kb-transpose-chars、kb-matcher-up/down已在“更高版本新增”一节补充并可从仓库根目录 doc/rofi-keys.5.markdown 核实。【免费下载链接】rofiRofi: A window switcher, application launcher and dmenu replacement项目地址: https://gitcode.com/gh_mirrors/ro/rofi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考