在awesome-wm中能否将单独按下modkey的操作绑定到指定动作
解决方案
awesome默认的按键绑定逻辑仅支持「修饰键+普通按键」的组合触发,单独按下修饰键时,系统会等待后续输入的组合按键,因此你之前尝试的空按键位、同时加两次modkey作为修饰的写法都无法触发对应动作。
正确实现方式
核心逻辑是通过状态标记区分「单独按下并释放modkey」和「modkey作为修饰键搭配其他按键使用」两种场景,具体配置代码如下:
-- 若全局已导入对应依赖可跳过该部分 local gears = require("gears") local awful = require("awful") -- 定义modkey单独按下的状态标记 local modkey_pressed_alone = false -- 绑定modkey的按下与释放事件 root.keys(gears.table.join(root.keys(), awful.key({ }, "#133", -- 按下modkey时标记为待触发状态 function () modkey_pressed_alone = true end, -- 释放modkey时判断是否为单独按下,是则唤起prompt function () if modkey_pressed_alone then awful.screen.focused().mypromptbox:run() end modkey_pressed_alone = false end ) )) -- 全局监听按键事件:如果按下其他键时modkey处于激活状态,说明是组合键,取消单独触发标记 root.connect_signal("key::press", function(_, _, _, mods, _) if gears.table.hasitem(mods, modkey) then modkey_pressed_alone = false end end)
注意事项
- 可通过终端运行
xev命令,按下你使用的modkey查看输出的keycode,替换代码中的#133即可,通常左Super键码为133,右Super键码为134 - 请先移除你之前尝试的无效绑定代码,避免逻辑冲突
- 修改配置后重启awesome即可生效
内容的提问来源于stack exchange,提问作者Baltasar del Sol de Haro
相关产品推荐
相关产品推荐

