Columns UI

foobar2000 skript(w

つ〜ことで、まずfoobar2000側の変数から・・・よりも、foobar2000 skript(wについて。
注意:まだ、自分もfbsを学び中なので、以下には虚偽とかが書かれてるかもしれません。なので、自分で書いてみて確かめるように。
まずいろいろな変数を$set_global()や$putsで定義していく。変数名はfbs側のローカル変数/予約語に合わないような名前であればどんな名前でも良い。

$puts(color_normaltext, #000000)
$puts(color_selecttext, #FFFFFF)

この場合、#000000の値を持つ変数color_normaltextと、#FFFFFFの値を持つ変数color_selecttextを定義していることになる。
ここでふたつ注意点!色の値はRGB24(0xRRGGBB=24bit)ではなく、BGR24(0xBBGGRR)なので注意。
後、もうひとつは、ここで定義した変数はあくまでも新規に定義した変数なので、その変数の値を変えても、その変数を使ってるローカル変数が無ければ何も変わらないので注意。

それを後で、

$set_style(text,$get_global(color_normaltext),$get_global(color_selecttext))

でtextに登録していく。
つまり、$set_styleに対して引数を渡しているのではなく、textに渡していることになる。
アヤシイ・・・よくよくソース見ると二つしか登録していない。

$set_style(back,
  $ifequal(
    $mod(%_playlist_number%, 2),
    0,
    $get_global(cBgStd),
    $get_global(cBgAlt)),
$get_global(cBgSel)
)

$modは%_playlist_number%で展開した値と、2でmodulo(剰余)している。%_palylist_number%は多分、プレイリストの上から下までの合計値だろう。
$ifequalについて説明する前に、$ifの説明から。
$ifはfbsの取説によると、

If X contains at least one present field, executes/displays Y, otherwise executes/displays Z.

ということだ。つまり、XとYを比較し、XがYと合っていれば(true)Yが表示/展開され、合っていなければ(false)Zが表示/展開される。
以下を実行してみると分かりやすい。

$if(%artist%, %artist%, Unknown artist)

%artist%はタグ情報のARTISTを展開するマクロだ。
もし以下の場合、

$if(hoge, %artist%, Unknown artist)

ARTISTタグがhogeで無い場合、Unknown aritstが表示される。
そして、$ifには$ifequalのようなoperatorを付けれる。(equalの部分がoperator)
fbs取説には$equal()の説明は無いが、equalということだから、何かと比較する関数か、展開された場合、変数に対して何かしらの値を代入する関数だろう。

・・・orz
そういえば日本語ヘルプがあるんだった・・・Title Formatting Help - foobar2000 Wiki
まぁ、いろいろと分からないことがあればここを参照すると良い。(偉そうw
f2kwikiによると、$ifequal()は

$ifequal(a,b,c,d): もし数字aが数字bと等しい場合、cを実行/表示します。それ以外の場合dを実行/表示します。

ということだ。
つまり、

$set_style(back,
  $ifequal(
    $mod(%_playlist_number%, 2),
    0,
    $get_global(cBgStd),
    $get_global(cBgAlt)),
$get_global(cBgSel)
)

これは$mod()の返値と0とを比較し、trueであれば$get_global()で展開されたcBgStdの値を、falseであれば、$get_global()で展開されたcBgAltの値をbackに登録してるってことになる。