讓 xmonad 在 xmobar 中顯示目前工作區的名稱
xmonad/xmobar/haskell 的新手,試圖獲取目前工作區的名稱以顯示在 xmobar 中。到目前為止,我有這個 xmonad.hs:
module Main where import XMonad import XMonad.Hooks.SetWMName import XMonad.Hooks.DynamicLog import XMonad.Actions.WorkspaceNames import XMonad.Util.EZConfig(additionalKeys) import XMonad.Prompt import XMonad.Util.EZConfig main = xmonad =<< xmobar myConfig myConfig = defaultConfig { startupHook = setWMName "LG3D" , logHook = myLogHook } `additionalKeys` [ ((mod4Mask, xK_r ), renameWorkspace defaultXPConfig) ] myLogHook = workspaceNamesPP xmobarPP >>= dynamicLogString >>= xmonadPropLog
這似乎允許我更改工作區的名稱(至少會出現一個帶有“工作區名稱:”的提示,並接受我的輸入)。
但是,xmobar 不顯示名稱。
您正在混合兩種不同的方式將資訊發送到 xmobar。
這裡 :
main = xmonad =<< xmobar myConfig
您正在使用
xmobar
便利功能。您可以點擊文件上的源連結以查看它是如何定義的。它使用該statusBar
功能以預設啟動 xmobarxmobarPP
。該statusBar
函式用於spawnPipe
啟動狀態欄應用程序,並修改PP
輸出到該管道。這是您看到的欄,帶有僅列印工作區標籤的預設漂亮列印機和記錄器。您正在使用的
XMonad.Actions.WorkspaceNames
模組將名稱與工作區標籤相關聯。它提供workspaceNamesPP
了與 a 組合PP
來檢索名稱的功能。和這裡 :
myLogHook = workspaceNamesPP xmobarPP >>= dynamicLogString >>= xmonadPropLog
您正在使用
workspaceNamesPP
帶有 的函式xmobarPP
,將結果傳遞dynamicLogString
給以字元串形式返回狀態的函式,然後將該字元串傳遞給xmonadPropLog
將其作為_XMONAD_LOG
屬性寫入根視窗的函式。這是將資訊傳遞給 xmobar 的另一種方式,可以將其配置為讀取該屬性。在這種情況下,您不必從 xmonad 啟動 xmobar。因此,您應該決定要使用哪種方式。
例如,您可以使用 XMonad 繼續啟動 xmobar
spawnPipe
,並將myLogHook
狀態寫入您傳遞給它的管道:import XMonad.Util.Run -- spawnPipe and associated functions main = xmonad . myConfig =<< spawnPipe "xmobar" myConfig pipe = defaultConfig { startupHook = setWMName "LG3D" , logHook = myLogHook pipe} `additionalKeys` [((mod4Mask, xK_r), renameWorkspace defaultXPConfig)] myLogHook pipe = workspaceNamesPP xmobarPP {ppOutput = hPutStrLn pipe} >>= dynamicLogWithPP
該
statusBar
函式還修改manageHook
andlayoutHook
以將manageDocks
andavoidStruts
來自XMonad.Hooks.ManageDocks模組添加到它們。你應該使用這個模組,這樣欄和視窗就不會互相踩到。這manageDocks
使得 XMonad 忽略類型為停靠或桌面的視窗。佈局修改器根據它們的_NET_WM_STRUT_PARTIAL屬性avoidStruts
更改佈局以保留條形空間。
manageHook
layoutHook
和handleEventHook
是的一部分XConfig
,所以要添加XMonad.Hooks.ManageDocks
模組提供的功能:myConfig pipe = defaultConfig { startupHook = setWMName "LG3D" , logHook = myLogHook pipe, manageHook = manageDocks <+> manageHook defaultConfig, layoutHook = avoidStruts $ layoutHook defaultConfig, handleEventHook = docksEventHook <+> handleEventHook defaultConfig } `additionalKeys` [((mod4Mask, xK_r), renameWorkspace defaultXPConfig) ]
您使用的
xmobar
功能還綁定了 mod + B 鍵快捷鍵sendMessage ToggleStruts
以切換條形間隙,因此如果您想要該鍵綁定,您也應該添加它。還 :
import XMonad.Util.EZConfig(additionalKeys) import XMonad.Util.EZConfig
您正在
additionalKeys
從XMonad.Util.EZConfig
模組導入,然後您正在導入所有XMonad.Util.EZConfig
模組。