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에는 이름이 표시되지 않습니다.
답변1
xmobar에 정보를 보내는 두 가지 다른 방법을 혼합하고 있습니다.
여기:
main = xmonad =<< xmobar myConfig
당신은 사용하고 있습니다xmobar
편의 기능. 문서의 소스 링크를 클릭하면 문서가 어떻게 정의되어 있는지 확인할 수 있습니다. 그것은 사용한다statusBar
함수는 기본적으로 xmobar를 시작합니다 xmobarPP
. 이 statusBar
함수는 spawnPipe
상태 표시줄 애플리케이션을 시작하고 PP
파이프에 대한 출력을 수정합니다.
작업 공간 레이블만 인쇄하는 기본 프리티 프린터 및 로거가 포함된 막대입니다. XMonad.Actions.WorkspaceNames
사용 중인 모듈은 이름을 작업 공간 레이블과 연결합니다. 그것은 다음을 제공 workspaceNamesPP
합니다PP
이름을 검색하세요.
그리고 여기:
myLogHook = workspaceNamesPP xmobarPP >>= dynamicLogString >>= xmonadPropLog
workspaceNamesPP
function 을 사용하여 상태를 문자열로 반환하는 함수 xmobarPP
에 결과를 전달한 다음 루트 창에 기록된 함수 속성을 쓰는 함수에 해당 문자열을 전달합니다. 이것은 xmobar에 정보를 전달하는 다른 방법입니다.dynamicLogString
xmonadPropLog
_XMONAD_LOG
이 속성을 읽도록 구성. 이 경우 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
할 합계 를 수정합니다 .layoutHook
manageDocks
avoidStruts
XMonad.Hooks.ManageDocks그들에게 모듈. 바와 창문이 서로 밟히지 않도록 이 모듈을 사용해야 합니다. 이로 manageDocks
인해 XMonad는 도크 또는 데스크탑 유형 창을 무시합니다. 레이아웃 avoidStruts
수정자는 막대 차트에 따라 공간을 유지하면서 레이아웃을 변경합니다._NET_WM_STRUT_PARTIAL재산.
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
모듈을 가져옵니다.