Kaze-Gumi

日記

2008-06-10-01(火)

Evarsの基本

evarsのEってなんだったっけ?
まあ脳内では変数と言ってるんで別にどうでもいい

step.rcの記述は基本的にevarsの羅列がほとんどで
あとは*で始まるリソース表記くらい
こっちは!recycleするまで再反映できないが
evarsの方は、xlabelを使っていれば、!Recycleなしで値を変更できる(!setevar)

記述方法は単純で
evar名 値
のペア記述で、空白、あるいはタブ文字で両者を区切る
このため、値に空白を含む場合、""でクオートしなければいけないことが多い
コマンド(実行ファイル等)や!bangなどの引数の場合は逆に括らない
このへんはもういろいろ試して慣れるしかない

ちゃんとパスもファイル名も合ってるのになんで起動しないんだと思ったら
空白を含むフォルダでクオートしてなくて
空白前までしか値がセットされてなかったとか、ありがちな話である

コアのrcの読み込み順番は先に書いたものを優先する

settingA 1
settingA 2

この場合、1になるということ
include文を用いた場合は、include文を書いた行内に
そのファイルの内容がそのまま入るので

include other.rc
settingA 2

other.rcに「settingA 1」と書いてあれば、最終的に値は「1」となる

特に記述しなくても、最初からWinの環境変数や、画面解像度などの値は
コアの仕様で勝手にevarsとしてセットされている
ResolutionX(画面解像度横幅)、ResolutionY(同縦幅)、
WinDir(windowsのシステムフォルダ)など
このへんの項目はLSのリリースノートに書いてある

mainWidth $ResolutionX$
記述したevarは「$evar名$」で値を展開できる
何度も同じことを書く場合、1つのevarにその値をセットしておき
$〜$で代用すれば、その値を変更する必要がでてきたときに
1箇所だけ書き直すだけで済む

また、単純に値を展開するだけでなく、簡単な計算などもできる
mainWidth $ResolutionX/2$ ; 解像度横÷2
mainWidth $ResolutionX*.5$ ; 解像度横×0.5
いずれも同じ値になるが、このような計算式にしておくと
決め撃ちの値と違って、そのときの起動環境に合わせて、流動的な値となる
うまく使えば、手間を省けることもあるだろう

2007-07-08版あたりのコアから、このへんの関数仕様が強化されつつある

mainvalue $abs(-1)$
abs()は絶対値の関数で、この場合のセット値は「1」となる
説明のために-1なんて固定値を書いてるが、別のevarsの値を放り込んで
負の数値ならマイナスを削除する、というようなケースで使うことになるだろう

flag $startsWith("$username$", "k")$
これは「第1引数」の先頭文字が「第2引数」かどうかの判定して、flagにセットする
ユーザ名がkで始まるならtrue、違うならfalseとなる

まあ、このへんの関数をどう活かすかは自由だし
使う場面が全くないことも多い
テーマ配布をする際の無数にある環境に対して
少しでも少ない修正で使えるようにするのに配慮した強化だと思う

個人的には、こういう計算記述は座標の自動割り出しに使うことが多い
xlabelで、testlabelというラベルを作るとする

*label testlabel
testlabelWidth $ResolutionX*.25$
testlabelHeight 48
testlabelX -$(ResolutionX-testlabelWidth)/2$c
testlabelY -$testlabelHeight$

横幅は解像度の25%(×0.25)、縦幅は固定数値
それにあわせて、表示位置は、X座標が、画面中央(例の式計算でそうなる)
Y座標が画面下から縦幅分上(つまり画面下にぴったり配置)
いちいち、ここはいくつになるんだと自分で割り出さなくても
計算式を使えば、勝手に計算してくれるわけ

ちなみに上の「-$testlabelHeight$」のような最初のマイナスは
厳密にいうと計算式ではない
evarを展開した値の前にマイナスを付け足してるだけである
だから、計算結果が負の数値になったりしたら「--24」なんて
マヌケな値になってしまう(場合によってはエラー扱いになるかもしれない)

これらの書き方でセットしたevarsは
基本的にはLS起動時、あるいは!Recycleされて、はじめて有効になる
このへんがレジストリを使わない弱点でもあるが
そこまで動的にコロコロかえる機会もあまりないし
最近のxmodules(x〜で始まるモジュール群)なんかのように
refresh機能がついてて、!recycleしなくても
そこだけ変更できるようになってるものもある

あまり、凝りすぎると、かえって、後で弄りなおす時にヴァーとなっちゃうこともあるんで程々に

他にもいろいろ記述規則があるわけだが、とりあえず今日はこのへんで

Relay Keyword's Recent Title

Recent Images

img-03img-02img-01img-01img-01img-01img-02img-01img-02img-01

Prev: include文 | Next: hotkey.dll | 2008-06 | 2008 | RSS | 最新の日記