先日、某vimmerが集うslackのチャンネルで、 :highlight
コマンド中のcterm→#RGBの変換が欲しいとぼやいたら、「まぁ欲しいよね」「rgbからctermも欲しいよね」 「vital化してほしいよね」1みたいな話になりまして…いや、流石にvitalのプロジェクトにプルリクとかおこがましいレベルのスクリプトキディなのですが、作ってみたかったので作りました。
他の人の手でvital化されつつあるんですけど。
astrorobot110/technicolor
https://github.com/astrorobot110/technicolor
ウラ話
gitリポジトリの方で軽く触れたテンプレートの話
ネットは広大なのでctermパレットに対応するRGB値とか、なんならその計算方法とかぽこじゃか出てくるのでそれには困らないんです。ただ、それをどう現在のバッファに書き込むか…となると何を想定すべきか皆目見当がつかなかったんです。
例えば…
- コマンド名は
hi
かhighlight
か? - 引数間の空白は
<space>
か<Tab>
か? - じゃあそもそも
&tabstop
はいくつか? - 引数の順番は?
- そもそも全グループの記述に同じ順番使ってるの?
…を想定して、ある程度うまく行く用にしなければなりません。
なんとかしました。
そのまんまソースに書いてある話の書き直しなのですが、まず現在行のカーソル位置から上に検索して直近の空行の下にあるハイライトコマンドの構造を確認します…めっちゃ分かりづらい。
要はvimで言うところのカーソルがあるパラグラフの一番最初にある highlight
コマンドの行をテンプレートとして採用します。もしくは、これがテンプレートとして機能しない場合…要はバックグラウンドの記述がないので空白にせざるを得ないような場合の為に、テンプレートとして採用するコメント行を書いておけるようにしてあります。
これがない場合は、Normalグループの記述を採用します。
それもない場合は、テンプレートの様式を定義できるバッファローカルな辞書型変数を参照しに行きます。
それもなければ、technicolorのスクリプト内で定義しているテンプレートを採用します。
…という手順でテンプレートを解析しておき、現在行の引数をすべて変数に収めてから変更箇所を置換して、テンプレートに合わせて現在行を再生成してから置き換えています。
バグの話
ぶっちゃけ、カラースキームを作りたくて作ったわけではないので、実際に使っていません。というわけでバグ取りが進んでいないので…すいません手伝ってもらえると幸いです。
すいません文面そのまんまじゃないんですけど勝手に引用してます。というか文面そのまんまだと誰が誰だか… ↩