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に情報を送信する2つの異なる方法を混ぜています。
ここで:
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
モジュールをインポートします。