AwesomeWM配置疑问:拆分rc.lua按键绑定及两类按键区别
AwesomeWM配置常见问题解答
1. 拆分按键绑定至独立文件避免覆盖问题
你的问题根源在于每个按键文件都直接对globalkeys全局变量赋值,后引入的文件会覆盖之前的赋值结果。正确做法是让每个独立文件返回自身的按键集合,再在主配置rc.lua中统一合并所有按键片段。
修改后的按键文件示例
keys1.lua
local awful = require("awful") local my_table = awful.util.table or gears.table local config = require("config") return { -- modkey + Enter = 启动终端 awful.key({modkey}, "Return", function() awful.spawn(terminal) end, { description = "launch terminal", group = "awesome" }) }
keys2.lua
local awful = require("awful") local my_table = awful.util.table or gears.table local config = require("config") return { -- modkey + B = 启动浏览器 awful.key({modkey}, "b", function() awful.spawn(browser) end, { description = "launch browser", group = "awesome" }) }
rc.lua中合并按键
local awful = require("awful") local my_table = awful.util.table or gears.table -- 引入拆分后的按键文件 local keys1 = require("Keybindings.keys1") local keys2 = require("Keybindings.keys2") -- 合并所有按键集合 globalkeys = my_table.join( unpack(keys1), unpack(keys2) ) -- 应用全局按键绑定 root.keys(globalkeys)
也可以让每个按键文件直接返回my_table.join后的单集合,再在主配置中合并:比如keys1.lua最后返回my_table.join(...),rc.lua中写globalkeys = my_table.join(keys1, keys2),效果一致。
2. clientkeys与globalkeys的区别
- globalkeys:全局按键绑定,无论是否有窗口处于激活状态,按下对应组合键都会触发。比如启动终端、打开应用启动器、切换工作区这类系统级操作,都属于全局按键范畴。
- clientkeys:客户端窗口专属按键绑定,仅当某个窗口(客户端)获得焦点处于激活状态时,按下对应组合键才会生效。比如调整当前窗口大小、移动窗口、最小化/关闭当前窗口、切换窗口布局这类针对单个窗口的操作,都使用clientkeys。
内容的提问来源于stack exchange,提问作者JohnnyHall
相关产品推荐
相关产品推荐

