Scintilla cursesでの色指定

Scintillacurses向け実装の色についてのメモ。 何度も調べては忘れるを繰り返すので、いい加減書いておく。

www.scintilla.org

Scintillaテキストエディタ用のライブラリで、gtkwindows向けのライブラリがある。 ncurses用は、以前は別に開発されていたようだが、その後本体に取り込まれた。 が、最新版(4.x)には含まれておらず、LongTerm3ブランチというバージョン3系統で提供されている。 最新版は、C++の新しい機能を使っており、対応できない環境があるためLongTerm3ブランチが用意されたものと、理解している。 機能的には、後追いで追随されている模様。

以上が前置きで、ここからが本題。

テキストエディタの機能として、カラーマップを好みに変えたいが、 残念ながらScintilla cursesは最大16色までしかサポートしていない。 端末がどれだけサポートしてても関係ない。

使える色も決まっていて、次の16色。色の指定は0xBBGGRRの書式。RGBでは無い。 REAMDE.mdだとこのBBGGRRで説明があるのだけれども、ソースだとRGBが使われていて、ややこしい。

  1. black (0x000000) 0
  2. red (0x000080) 1
  3. green (0x008000) 2
  4. yellow (0x008080) 3
  5. blue (0x800000) 4
  6. magenta (0x800080) 5
  7. cyan (0x808000) 6
  8. white (0xC0C0C0) 7
  9. light black (0x404040) 8
  10. light red (0x0000FF) 9
  11. light green (0x00FF00) 10
  12. light yellow (0x00FFFF) 11
  13. light blue (0xFF0000) 12
  14. light magenta (0xFF00FF) 13
  15. light cyan (0xFFFF00) 14
  16. light white (0xFFFFFF) 15

Scintillaの色の設定はRGBでそれぞれ0から255の範囲で行う。 cursesでは、上記16色以外が設定されると、白(0xC0C0C0)になる。

さすがに16色では寂しい。

どうするか?

ターミナルエミュレータで、お気に入りの配色を設定してしまえば、Scintilla cursesでは、色の対応だけ気にしておけばよい。

ただ・・・ターミナルの配色と、エディタの配色は変えたいという気分になるときもあるので、 独立して設定できる方法も欲しい。

  • [案2]デフォルトのカラーマップを変更

色番号0-15番をcursesのinit_colorを使って変更する。 色番号とR,G,Bの値を指定するのだが、RGBの範囲は0から1000の範囲なので、値の変換が必要。約4倍だ。

で、やってみたらinit_colorがエラーになった。 どこに問題があるのか探ってみたら、tmux上では上手くいかないことがあった。 色々設定を変えて、トライしていたら、そのうち動くようになった。

なにかのタイミングで、tmuxが8色しか使えない状態になっていたようだが、よく分からない。

この過程で、tmux -2 で起動すると、強制的に256色モードで起動するという知見を得た。

ということで、16色の範囲であれば、256色ぐらいは使えるようになったかな。