[英]xmonad: set screen and workspace
我无法让这个 function 按我的预期工作。
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"
我这样称呼 function :
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)
]
首先,show i 似乎与 case i 的情况不同。 我一定是误解了一些基本的 Haskell 东西; 如果我使用 show i 似乎 xmonad 找不到任何工作区。
第二个问题是 function 工作,但并不总是转移焦点。 我必须按两次按键序列来设置屏幕、设置工作区并将焦点设置在该工作区上。
对于show i
提出的问题,很容易在提示符下看到为什么它没有按您期望的方式工作:
Prelude XMonad> show (1 :: Integer)
"1"
Prelude XMonad> show (1 :: ScreenId)
"S 1"
你可以使用drop 2. show
if you feel 特别 hacky 之类的东西,或者类似的东西
unS (S i) = i
workspaceId = show (unS i)
如果你不觉得 hacky。
至于为什么viewOnScreen
不聚焦屏幕,嗯......这只是因为它不是设计的。 从文档中:“在屏幕 sc 上切换到工作区 i。如果 i 可见,请使用视图将焦点切换到工作区 i。”。 所以它只在i
已经可见时才改变焦点。 为什么不直接调用两次呢? 这样的事情应该做:
windows (viewOnScreen screenId workspaceId . viewOnScreen screenId workspaceId)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.