You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 12:10:08