如何实现XMonad的currentLayoutName以获取当前布局名称?
实现当前布局名称的获取方法
要获取当前聚焦工作区的布局名称,你可以借助XMonad的内置函数和Renamed布局的特性来实现,具体步骤如下:
1. 导入必要模块
确保你的配置文件中导入了这些模块:
import XMonad import XMonad.StackSet (current, layout)
2. 编写获取布局名称的函数
定义一个X String类型的函数,从XMonad的状态中提取当前工作区的布局描述(也就是你用Renamed设置的名称):
currentLayoutName :: X String currentLayoutName = do -- 获取当前聚焦的工作区 currentWorkspace <- gets $ current . windowset -- 返回该工作区布局的描述名称 return $ description $ layout currentWorkspace
3. 在快捷键绑定中使用
你可以在快捷键绑定里调用这个函数,根据返回的名称执行不同动作,示例如下:
myKeys :: XConfig l -> [(String, X ())] myKeys conf = [ ("M-y", do name <- currentLayoutName if name == "foo" then fooAction -- 自定义的foo动作,比如sendMessage Shrink else barAction) -- 自定义的bar动作,比如sendMessage Expand ] ++ defaultKeys conf
原理说明
当你用Renamed (Replace "foo") someLayout给布局命名时,Renamed布局修饰器会覆写原布局的description方法,返回你设置的"foo"。上面的函数正是通过调用description方法,拿到这个自定义的布局名称。
内容的提问来源于stack exchange,提问作者Oh Fiveight
相关产品推荐
相关产品推荐

