自分宛てメモ。

 

GtkSourceStyleSchemeを用いたGtkSouceView(GtkSouceBuffer)の色付けは自動で行われる。
しかし、手動でGtkSourceStyleSchemeの情報をもらって、何かに流用したいこともある。

 

そんな時の方法

 

既にBufferにはGtkSourceStyleSchemeの設定が完了しているものとする。

 

// buffer から scheme を得て、そこで定義されている情報を元にtagを設定する。
    GtkSourceStyleScheme *ss;
    GtkSourceStyle *style;
    gchar *color;

    ss = gtk_source_buffer_get_style_scheme(GTK_SOURCE_BUFFER(buffer));
    style = gtk_source_style_scheme_get_style(ss, "search-match" );

    if (style != NULL ){
        g_object_get(style,"background", &color, NULL);
    }

    gtk_text_buffer_create_tag(buffer, "searched",
        "background", color,
        //~ "foreground", "black",
        NULL);
    gtk_text_buffer_create_tag(buffer, "replaced",
        "background", color,
        //~ "background", "cyan",
        //~ "foreground", "black",
        NULL);
    g_free(color);
    


GtkTextTagの色設定をGtkSourceStyleSchemeからもらうことで見た目の統一感をだそう、というもの。
g_object_getで得たプロパティはコピーなので、用が済んだら適切に開放すること。

 

その一方、GtkSourceStyleSchemeやGtkSourceStyleはunrefしてはいけない。ややこしい。

 

 

 

leafpadを改造してluaの実行環境を作る話の続き。

 

いろいろ調べながらとはいえ、ちょっと時間かけ過ぎではなかろうか、というのが反省点ですね。

 

ログを見てみたら12月15日が一番古かったので、実にたっぷり1ヶ月以上費やしたことになります。途中、年末年始を挟んで4,5日弄っていなかった日もありますが。

 

機能説明

 

エディタ
GtkSourceViewを使った、1画面・1ファイルしか開けないメモ帳エディタ。保存していなくても、バッファ上のluaスクリプトを実行できます。それだけ。

 

デバッガ
ブレークポイント、コンティニュー、ステップオーバー インが可能。ローカル変数は自動ダンプ(単なる手抜き)。任意の変数やテーブルの参照設定は未だ実装せず。

 

グラフィックス
cairoライブラリを使った描点、描線、塗りつぶし、pangoによるテキスト表示。GtkWindowに直書きする方法を諦め、中間ファイル(png)経由で表示しています。故に、描画の様子を眺めようとすると時間がかかって実用的ではありません。ゲームとか、アニメーションとか、絶対無理。
一応、オブジェクトスタイルで書けるようにはしてありますがuserdataなのでlua側での継承は無理。キャンバスは複数持てるので、リソースの許す限り何枚でも描けます。
しかしGtkWindowの破壊をlua任せにするという思い切った仕様のため、たくさん開いておくと、放置してあったウィンドウがガベージコレクタに回収され唐突に消える、という暴挙が見られます。

 

 

作った本人しか使わないツールだし、凝りだすとキリがないので、まあ、こんなもんでしょう。デバッガは勿論、エディタも早々に2窓化しそうな気がしますけど。バグ出しのほうが先か。

 

luaからCを呼ぶ方法を理解したのが一番の収穫でした。既存のライブラリで何か書くならPythonが有利と思いますが、ライブラリをイチから自前で作らなくてはならない、とかだったらLuaのほうが簡単なような気がします。

 

 

色を変えながら100個ばかり点を打つ、というデモ。こんなもんでも、画面更新しながらだと4秒ほどかかってしまう。動いているところが見えて良い、という考え方もできるけど。勿論、更新しなければ一瞬です。

 

自分宛てメモ

自分宛てメモ

 

症状
例えばデスクトップ上で、不要なアイテムをゴミ箱に移動するだけでdbusサービスなtumblerdが仕事を始める。移動したアイテムについてのみ処理してくれれば良さそうなのだが、どうもHDD全域を見て回っているようで、ファイル数が増えてくると時間がかかって仕方がない。

 

対策
1)tumblerdをkillする。
HDDのアクセスがひどくなったら、都度killして止める

 

2)アンインストールする
 Synaptic等でパッケージ tumbler をアンインストールする。libtumbler-1-0は残しておいても良さそう。
 

その

Thunarでサムネイルが表示されなくなるかも知れないが、画像ビューアで代用する。

 

忘れやすいが for のカウンタ変数はローカルです。しかも for を抜けると揮発します。

 

 

自分宛てメモ

 

  • ローカルテーブルとして新規オブジェクトを作成し、それのメタテーブルを書き換えて継承する。{__index=親}
  • 多重継承できない。必要であれば後からメンバを流し込む。
  • selfは暗黙の変数として予約されている。
  • 自動で動く関数はない。初期化の際は親クラスの初期化関数を呼ばなくてはならない。
  • その代わりオブジェクトの破壊は(多分)ガベコレまかせにできる。


書きにくくて仕方ない。慣れというものはあるのかも知れないが。いちいち local 書かなくてはならないし。

 

LinuxMint17でVirtualBox5.1の更新通知が届いた。meltdownの件もあったのでアップデートしたのだが、一部仮想環境が動かなくなった。

 

debian(stable,32bit)
症状 GuestAdditionsを変更したらディスプレイマネージャまで辿り着かなくなった。
対策 実機インストールとの比較実験用であり、実機のほうがそれなりに動いているのでもはや不要と判断して削除。

 

Slitaz(カーネルを自前で4.4系に入れ替え)
症状 GuestAdditionsを更新しようとしたらできなかった。ビルドはするがインストールできないという、いつもの状況。
対策 後述

 

Slitaz(カーネルを自前で4.9系に入れ替え)
症状 特に異常なし。これはGUIを切ってサーバーとして動作させている。H8/300Hのコンパイラを動かすために共有フォルダーを使っており、動かなくなると悲惨なことになるのでこのまま。

 

LinuxMint Debian Edition (LMDE,32bit)
症状 変化なし。LinuxMintはvbox用のドライバを同梱していたはずで、おかげで仮想環境でも普通に動く。壊したくないのでこのまま。

 

 

5.1を使い続けていたのは下手にバージョンアップするとGuestAdditionsの導入で失敗するから。が、遂に失敗してしまったので、5.1を削除して5.2に更新した。
それでもdebianはダメだったので削除。Slitazはうっかり4.4系のソースを消してしまっていたので、公式カーネル(3.2.98)に戻してGuestAdditionsを導入したところうまくいった。但し、起動するたびに画面解像度がSVGA(800x600)になってしまい、都度Slitaz側で変更しなくてはならないのは煩わしい。見ていると、一瞬全画面表示(1280x1024)になってからSVGA(800x600)に引き戻される。
ブートメッセージを眺めていると、ユーザーvboxaddが無い、とか言っていたので手動で追加したら、DE(xfce4)起動後、盛大にエラー通知が出るようになった。これはGuestAdditionsを再インストールしたところ出なくなった。

 

(手抜きで)自動でローカル変数をダンプするようにしておいたままだけど、意外と便利かも。

 

上の図の例では、関数hogeは計算結果ではなく無名関数を返している。そして関数の実行時には引数だけでなく、無名関数の外側で定義された関数hogeの引数Cも使っている。(hogeの最初の2つの引数は未使用です。)

 

初学者には分かり難いかも知れないけれど、うまく使うとコードをコンパクトにまとめることができる。

 

まあ、別にLuaでなくても書けるけど。処理系のフットプリントを考えると、Luaはもっと利用されて良い言語だと思います。


Search

Calendar

S M T W T F S
 123456
78910111213
14151617181920
21222324252627
28293031   
<< January 2018 >>

Archive

Mobile

qrcode

Selected Entry

Link

Profile

Search

Other

Powered

無料ブログ作成サービス JUGEM