3

私はいくつかの xmobarrc 設定を持っています

Config { lowerOnStart = False,
         font    = "xft:Terminus-12"
       , bgColor = "#000000"
       , fgColor = "#8080A1"
       , position = Top
       , commands = [ Run Network "eth0" ["-L","0","-H","32","--normal","#429942","--high","#A36666"] 10
                    , Run Cpu ["-L","3","-H","50","--normal","green","--high","red"] 10
                    , Run Memory ["-t","Mem: <usedratio>%"] 10
                    , Run Date "/%a/ %_d.%m.%Y / %H:%M" "date" 10
                    , Run Com "sh" ["~/bin/weather.sh"] "weather" 60
                    , Run StdinReader
                    ]
       , sepChar = "%"
       , alignSep = "}{"
       , template = " %StdinReader% }{  W:<fc=#fce94f>%weather%</fc> | %cpu% | %memory% | %eth0% | %date%"
       }

2 つの質問があります。

  • たとえば、色分け|セパレータが必要な場合は、すべて|on <fc=#ffffff>|</fc>に変更する必要があります。では、どのように変数を使用できますseparator = <fc=#ffffff>|</fc>template?
  • Networkそれと戻ってくるテキストはCpu 常に長さが異なるため、すべてのストロークのサイズは常に異なります。Networkのテキストを固定サイズに設定するにはどうすればよい ですか?
4

2 に答える 2

4

最初の質問:

トーマスの答えはうまくいくように思えますが、うまくいきません。xmobarrc ファイルの構文は Haskell のように見えますが、実際にはフォーマット方法が非常に制限されており、既にファイルに含まれているものを除き、Haskell 構文はサポートされていません。

とはいえ、明らかな答えは、それぞれを個別に色付けすることです。その結果、本来あるべきよりも少し長く、見栄えの悪いテンプレート行が作成され、後で変更するのは面倒ですが、正直なところ、文字は 4|文字しかないので、それほど悪くはありません。

見栄えの良い解決策は、 set を設定してから、各コマンドのオプション リストにfgColor = "#ffffff"追加し、wrapおよびin にすることです。基本的に、デフォルトの色を色に設定し、それ以外はすべて明示的に色付けします。このようにして、その色は暗黙的であるため、これらすべてのタグを記述することを回避できます。ただし、ファイルの明瞭度が多少低下するため、この方法はお勧めしません。"--low","#8080A1"%StdinReader%%date%<fc=#8080A1></fc>|fc

さて、実際にはこれを行うためのはるかに優れた方法があり、この問題と関連するすべての問題を完全に修正します: 実際の Haskell で記述します。あなたがすることは、最終的に適切な xmobarrc を構築してフォーマットし、それをファイルに出力する Haskell プログラムを作成することです。個人的には、面倒な設定ファイルにはこれが良いオプションだと思いますが、構文が Haskell のものに非常に近いため、xmobarrc は特に良い候補です。より具体的には、 xmobarrc が使用する構文は、完全に Haskell がリテラル データを記述するために使用する構文Configですshow。いくつかの小さな違い。実は、ここで、これをあなたのために非常に簡単に書きます...ここに. ここで、それをインポートして、メイン ファイルを次のように定義するとします。

module Main (main) where

import XMobarHs

main = export $ config
  { lowerOnStart = False
  , font     = "xft:Terminus-12"
  , bgColor  = "#000000"
  , fgColor  = "#8080A1"
  , position = Top
  , commands = [ Run $ Network "eth0" ["-L","0","-H","32","--normal","#429942","--high","#A36666"] 10
               , Run $ Cpu ["-L","3","-H","50","--normal","green","--high","red"] 10
               , Run $ Memory ["-t","Mem: <usedratio>%"] 10
               , Run $ Date "/%a/ %_d.%m.%Y / %H:%M" "date" 10
               , Run $ Com "sh" ["~/bin/weather.sh"] "weather" 60
               , Run $ StdinReader
               ]
  , sepChar  = "%"
  , alignSep = "}{"
  , template = " %StdinReader% }{  W:<fc=#fce94f>%weather%</fc> | %cpu% | %memory% | %eth0% | %date%"
  }

ほぼ同じです。しかし、そうである必要はありません。現在は文字通り Haskell であるため、Thomas のアイデアを実際に使用したり、それをはるかに超えて、最適と思われる範囲で使用したりできます。唯一の欠点は、ファイルを編集するたびに、コンパイルして再度実行し、更新された xmobarrc を取得する必要があることです。

2 番目の質問:

コマンドのオプション リストで、 を追加します"-w","3"。3 は、コマンドのフィールドを固定するサイズ (文字数) に置き換えます。これにより、フィールドがそのサイズを超えた場合は切り捨てられ、それ以下になった場合はフィールドがスペースで埋められます。スペースの代わりに 0 (またはその他の文字) をパディングする場合は、同様に追加"-c","0"します (または"-c","n"、 n をパディングする文字に置き換えます)。

于 2013-01-13T07:49:06.307 に答える
0

最初の質問:separatorテンプレートでの使用方法。

テンプレートは文字列のリストに変換できます。その後、intersperse separatorand を使用するだけconcatです。

let temp = [" %StdinReader% }{  W:<fc=#fce94f>%weather%</fc> ", " %cpu% "," %memory% ", " %eth0% ", " %date%"]
    separator = "<fc=#ffffff>|</fc>"
in concat $ Data.List.intersperse separator temp

この式は次のようになります。

" %StdinReader% }{  W:<fc=#fce94f>%weather%</fc> <fc=#ffffff>|</fc> %cpu% <fc=#ffffff>|</fc> %memory% <fc=#ffffff>|</fc> %eth0% <fc=#ffffff>|</fc> %date%"

Haskell に慣れていない場合は、このlet ... in ...afterの式全体を配置するだけtemplate =で問題なく動作します。または、最上位に配置することもできます。

myTemplate = let temp = ... 区切り文字 = ... in ...

テンプレート コードを次のように設定します。

...
, template = myTemplate
}
于 2011-04-10T21:47:59.357 に答える