読者です 読者をやめる 読者になる 読者になる

レガシーコード生産ガイド

私に教えられることなら

Squeak5.1 / fcitx / Linux Mint で日本語インライン入力

Smalltalk Squeak

over the spot方式ですが、できました。

f:id:phaendal:20161212221915j:plain

Windowsで使う場合は別の記事参照

手順

日本語TTFフォント導入

まずなんらかのフォントを入れておきます。

手順はSqueak5.0で好きなTrueTypeフォントを使い、日本語を表示する - レガシーコード生産ガイドの通りですが、Squeak5.1ではフォントの配置位置が変わっています。squeak.shがあるディレクトリのshared/fonts以下に入れます。

その後、以下のコードをdo itして

TTFileDescription initialize.
TTFileDescription allFontsAndFiles keysDo: [:fname| TTFileDescription installFamilyNamed: fname].

ワールドメニューのappearance→system fontsから読み込んだものに変更してください。

起動

環境変数SQUEAK_COMPOSITIONINPUTを1に、LANGja_JP.UTF-8で起動します。これだけです。

次のようなシェルスクリプトsqueak.shと同じディレクトリに作り、それから起動すると良いでしょう。

SQUEAK_COMPOSITIONINPUT=1 LANG=ja_JP.UTF-8 ./squeak.sh

以降のバージョンのために覚書

VMsqUnixX11.cを参照して解決しました。XCreateICがどう呼ばれるかを追っていきます。

おまけ:Pharo

Squeakの場合、HandMorph >> generateKeyboardEventに次のようなコードがあります

 type = #keystroke
        ifTrue: [keyValue := (self keyboardInterpreter nextCharFrom: Sensor firstEvt: evtBuf) asInteger]
        ifFalse: [keyValue := evtBuf third].

このkeyboardInterpreterで、うまいことUTF-8を読み込んでくれます。

しかし、Pharoで使われているCombinedCharは、UTF-16決め打ちで読み込んでいるようです。LinuxではlocaleにUTF-16を指定できないため、自分でUTF-8を読み込む処理を書く必要があります。(挑戦してみましたが、変換が遅すぎて使い物になりませんでした)

またImmX11Pluginが付属していないので、変換ウインドウの位置を操作することができないかもしれません。

というわけで、Pharoではまだまだ遠そうです……

広告を非表示にする