簡體   English   中英

xmonad:設置屏幕和工作區

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM