我无法按照我的预期让这个功能正常工作.
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"
Run Code Online (Sandbox Code Playgroud)
我正在调用这样的函数:
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)
]
Run Code Online (Sandbox Code Playgroud)
首先,显示我似乎与我的情况不一样.我一定是误解了一些基本的Haskell事情; 如果我使用show我似乎xmonad找不到任何工作区.
第二个问题是该功能有效,但并不总是转移焦点.我必须按两次键序列才能设置屏幕,设置工作区,并将焦点设置在该工作区上.
对于这个show i问题,很容易在提示中看出为什么它没有按您期望的方式工作:
Prelude XMonad> show (1 :: Integer)
"1"
Prelude XMonad> show (1 :: ScreenId)
"S 1"
Run Code Online (Sandbox Code Playgroud)
drop 2 . show如果你觉得特别老套,你可以使用类似的东西,或者类似的东西
unS (S i) = i
workspaceId = show (unS i)
Run Code Online (Sandbox Code Playgroud)
如果你不觉得老套的话。
至于为什么viewOnScreen屏幕不聚焦,嗯……只是因为它不是这样设计的。从文档中:“切换到屏幕 sc 上的工作区 i。如果 i 可见,请使用视图将焦点切换到工作区 i。”。所以它只会在i已经可见时改变焦点。为什么不直接调用两次呢?像这样的事情应该做:
windows (viewOnScreen screenId workspaceId . viewOnScreen screenId workspaceId)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1450 次 |
| 最近记录: |