首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xmonad:设置屏幕和工作区

xmonad:设置屏幕和工作区
EN

Stack Overflow用户
提问于 2011-06-04 05:19:42
回答 1查看 1.6K关注 0票数 5

我很难让这个函数像我期望的那样工作。

代码语言:javascript
复制
setScreenAndWorkspace i =
  windows (viewOnScreen screenId workspaceId)
  where
    screenId = ((i-1) `mod` numberOfScreens)
    -- workspaceId = show i -- doesn't work for some reason
    workspaceId =
      case i of
        1 -> "1"
        2 -> "2"
        3 -> "3"
        4 -> "4"
        5 -> "5"
        6 -> "6"
        7 -> "7"
        8 -> "8"
        9 -> "9"

我像这样调用函数:

代码语言:javascript
复制
myKeys =
  [
    ("M-1"   , setScreenAndWorkspace 1),
    ("M-2"   , setScreenAndWorkspace 2),
    ("M-3"   , setScreenAndWorkspace 3),
    ("M-4"   , setScreenAndWorkspace 4),
    ("M-5"   , setScreenAndWorkspace 5),
    ("M-6"   , setScreenAndWorkspace 6),
    ("M-7"   , setScreenAndWorkspace 7),
    ("M-8"   , setScreenAndWorkspace 8),
    ("M-9"   , setScreenAndWorkspace 9)
  ]

首先,证明我似乎不是在做同样的事情。我一定是误解了一些基本的Haskell的东西;如果我使用show i,似乎xmonad找不到任何工作空间。

第二个问题是函数可以工作,但并不总是转移焦点。我必须按两次键序列来设置屏幕,设置工作空间,并将焦点设置在该工作空间上。

EN

回答 1

Stack Overflow用户

发布于 2011-06-10 09:50:55

对于show i问题,很容易在提示符中看出为什么它没有按照您预期的方式工作:

代码语言:javascript
复制
Prelude XMonad> show (1 :: Integer)
"1"
Prelude XMonad> show (1 :: ScreenId)
"S 1"

如果你觉得特别烦人,你可以使用像drop 2 . show这样的东西,或者像这样

代码语言:javascript
复制
unS (S i) = i
workspaceId = show (unS i)

如果你不觉得烦人的话。

至于为什么viewOnScreen不聚焦屏幕,嗯.这只是因为它不是被设计成。从文档中:“切换到屏幕sc上的工作区i。如果i可见,使用view将焦点切换到工作区i.”。因此,只有当i已经可见时,它才会更改焦点。为什么不直接调用两次呢?类似这样的代码应该可以:

代码语言:javascript
复制
windows (viewOnScreen screenId workspaceId . viewOnScreen screenId workspaceId)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6232804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档