2018年2月6日、記事内容に重大な事実誤認があったので一部修正及び削除。

関連記事はこちら

 

 

自分宛てメモ。

 

未だにGtk+-2.0を使っている。理由は「枯れているから」なのだが、一つ失敗したことがあったので。

 

出力メッセージの国際化をgettextを用いて行ったのだが、どういうことかメニュー周辺の文字列が置換されなかった。

 

理由はgettextの仕組みと、Gtkの融通の無さにあった。

 

gettextはアプリケーション内でマークされた文字を、事前に用意されたファイルのものと置き換えることで各言語に対応しようとする。
 

例1)

puts( _("it is fine today.") );

_()は"it is fine today."をキーにして対応する翻訳を探しだして返す、という動作をする(はず)。

 

例2)
char *hoge[] = { "hoge", "piyo", "fuga" };
for ( i = 0; i < 2; i++ ) {
    puts( hoge[i] );
}

最初の配列は、単純に _("hoge") とかやると関数呼び出しに置換されてしまいエラーとなるので、N_("hoge")とする。 N_(string) は (string)に置換される。コンパイラから見ると何もしていないのと同じ。xgettextが拾い出す為の印に過ぎない。

次に puts( _(hoge[i]) ); とする。

 

使おうと思う関数の引数に _() を挿入できる場合はこれで良いのだが、そうでない場合、例えば文字列を含むオブジェクトを渡す場合(通常、Cは構造体のポインタを渡す)はお手上げである。
Gtk+-2.0のUI Manager でメニューを構築しようとする時がまさにこの状態。Gtk側に何かフックでもあって処理ルーチンを外挿できるとかになっていれば良いのだが、そんなものは(多分)無い。例え存在したとしても、バグ要因やセキュリティホールになりやすいと思う。

 

なので結局、メニュー用の個別関数を使って組み上げるしか方法がないことになる。UI Managerは全体の見通しが効くし、アイテムの挿抜も容易で便利だったので、こんなことで使えなくなるのは残念。

 

尚、UI Manager や actions関係は Gtk3では軒並み廃止されてしまった。これは国際化対応以前にGtkBuilderと機能的に重複する(ように見える)のが主な理由ではなかろうか。

 

 

メニューは翻訳されていないが、ダイアログ内の文字列は翻訳されている。

 

関東は大雪に見舞われた。毎年、一度か二度、こんなふうなドカ雪になる日がある。北陸や東北と違って連日同じような天候は続かないから、根雪になることはないが。

 

今回も予報では明日は晴れて気温も10度位まで上がるらしい。路面が泥濘んで却って歩きにくいだろう。
で、明後日以降は氷点下になって路面凍結するとか。

 

本日の気圧変化はこんな感じ。気圧の下がり始めと雪の降り始めが一致している。

 

なお、和光市の積雪は15cm位。長靴が欲しいな。

 

 

USAでは与野党対立の余波で政府機能の一部がストップしたらしい。

 

地元に送信所があるので日頃からAFNを聞いているのだけれど、こんな時は真っ先にサービスが停止するようだ。フィラーとしてクラッシックを何曲か同じ順序で繰り返し流しているだけである。

 

サービス停止といいつつ停波しないのは、緊急時には必要不可欠だから、ということなんだろう。

 

自分宛てメモ。

 

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でサムネイルが表示されなくなるかも知れないが、画像ビューアで代用する。

 


Search

Calendar

S M T W T F S
    123
45678910
11121314151617
18192021222324
25262728   
<< February 2018 >>

Archive

Mobile

qrcode

Selected Entry

Link

Profile

Search

Other

Powered

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