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

KOYAMA Yoshiaki のブログ

プログラミングについての試行錯誤をつらつら書き溜めていきます。

Gimp.app で日本語入力

X11 (X Window System) 環境で日本語入力できることは以前から知っていたのですが、面倒そうだったので試していませんでした。今回挑戦してみました。

なるべく最小限の労力で日本語入力できる環境を作りたかったので、Gimp.app を利用し、kinput2.macim のインストールには Fink を利用しました。kinput2.macim のインストールに Fink を利用した理由は kinput2.macim の最新のソースがどこにあるのか、Google で検索してもよくわからなかったためです。


1. Gimp.app のダウンロード
Gimp.app は http://gimp-app.sourceforge.net/ からダウンロードできます。Gimp.app は英語が苦手な人でも日本語に対応しているので心配する必要もありません。


2. Fink のインストール
Fink についてはhttp://fink.sourceforge.net/index.php からダウンロードしてインストールしてください。ページも日本語で表示されているので、敷居が低いと思います。(一部は英語表示のままです。) XCode Tools / Developer Tools を利用しますが、Fink を使うだけなら難しくはないと思います。


3. kinput2.macim のインストール
GUI の FinkCommander を使う方法もありますが、ターミナル上で

fink install kinput2.macim

と入力、(入力後にはReturn キーを押すのを忘れないでください。) パスワードを尋ねられたら管理者パスワードを入力してください。後の質問には、とりあえず Return キーを押していけばインストールできます。

インストールするのは kinput2 ではなく kinput2.macim ですので間違えないでください。


また、ソースから make してインストールするのではなく、

sudo apt-get install kinput2.macim

のようにバイナリパッケージをインストール方法もあります。


4. Gimp.app の設定を変更
Finder 上で Gimp.app を表示し、Gimp.app をクリックして選択し、右クリック (Contorl + 左クリック) して表示されるメニューから 'パッケージの内容を表示' を選択してください。

表示されたウィンドウの フォルダContents/Resources/bin の中の gimp ファイル (Shell Script ファイル) を mi、CotEditor などのエディタにドラッグ・ドロップして開いてください。

============ Gimp.app/Contents/Resources/bin/gimp ============
22行目
export LANG=`grep '?b'?`defaults read -g AppleLanguages | sed 's/.?(..?).*/?1/'?
?`_ /usr/share/locale/locale.alias | sed -n 's/.*?(.._..?)?..*/?1/p;1q'`
#export LANG=`defaults read -g AppleLanguages | sed 's/.?(..?).*/?1/'`

上のように表示された 22行目 export LANG と次の行の先頭にそれぞれ # を挿入し、その下に

export "LANG=ja_JP.eucJP"
export XMODIFIERS="@im=kinput2.macim"

を挿入してください。すると下のようになります。

============ Gimp.app/Contents/Resources/bin/gimp ============
22行目
#export LANG=`grep '?b'?`defaults read -g AppleLanguages | sed 's/.?(..?).*/?1/'?
#`_ /usr/share/locale/locale.alias | sed -n 's/.*?(.._..?)?..*/?1/p;1q'`
#export LANG=`defaults read -g AppleLanguages | sed 's/.?(..?).*/?1/'`

export "LANG=ja_JP.eucJP"
export XMODIFIERS="@im=kinput2.macim"

mkdir -p "$ETC"

後はエディタで保存してください。

これで設定は終了です。


5. Gimp.app で日本語入力
Gimp.app をダブルクリックして起動し、新規画像を作成、ツールから 'T' を選択し、画像をクリックすると文字入力ウインドウが開くので、コマンド+スペースキーを押してください。ウインドウの左下隅に '[あ]' と表示されるはずです。これで 'ことえり' を使って日本語入力できるようになります。画像を保存するときにも コマンド+スペースキー を押せば、ファイル名に日本語が使えます。

Command-Space 入力
Control-Shift-J 全角かな
Control-Shift-K 全角カタカナ 
Control-Shift-L 全角英字
Control-Shift-; 半角カタカナ

6. 探索
いろいろなサイトを調べると kinput2.macim を起動するような設定をしているはずです。
Fink を利用すると Gimp.app を実行するだけで (正確には X11.app が関係している。) kinput2.macim 起動されています。アクティビティモニタ.app で確認できます。

以前 MkLinux に触れたことがあるので、X Window System は xinitrc ファイルを初期設定に利用することを知っていました。私の環境では ~/.xinitrc ファイルはないので /usr/X11R6/lib/X11/xinit/xinitrc ファイルを覗いてみました。

( Finder 上では フォルダ /usr は表示されません。ターミナル上で

open /usr/X11R6/lib/X11/xinit 

を実行するか、中途半端な機能しかありませんが、拙作 YKExpolorer2 を利用してください。)

============ /usr/X11R6/lib/X11/xinit/xinitrc ============
#! /bin/sh
# $Id: sys-xinitrc-fink.in,v 1.3 2005/03/29 13:41:42 shinra Exp $

# This script works even after the Fink "xinitrc" package is removed.
# Don't worry.

if test -r "/sw/etc/xinitrc-override"; then
    # If system administrator dislike xinitrc.d framework, create this file
    . "/sw/etc/xinitrc-override"
elif test -r "/sw/bin/xinitrc.sh"; then
    . "/sw/bin/xinitrc.sh"
else
    # Xterm and a window manager may be used for trouble shooting.
    # Run these programs carefully.

    userresources=$HOME/.Xresources
    usermodmap=$HOME/.Xmodmap
    sysresources=/usr/X11R6/lib/X11/xinit/.Xresources
    sysmodmap=/usr/X11R6/lib/X11/xinit/.Xmodmap
    x_bindir=/usr/X11R6/bin


シェルスクリプトは以前にも書いた通り、

Shell Scripting Primer
http://developer.apple.com/documentation/OpenSource/Conceptual/ShellScripting/index.html

を読んだおかげで少し理解できるようになりました。

私の環境には /sw/etc/xinitrc-override ファイルがなく、/sw/bin/xinitrc.sh ファイルはあるので 、test -r "/sw/etc/xinitrc-override"; は False 、test -r "/sw/bin/xinitrc.sh"; は True になります。

その後に続く . "/sw/bin/xinitrc.sh" が実行されます。意味は source "/sw/bin/xinitrc.sh" と同じなので xinitrc.sh が読み込まれます。

============ /sw/bin/xinitrc.sh ============

7行目
# Global constants. Everybody may refer them.
fink_prefix="/sw"
fink_bindir="$fink_prefix/bin"
fink_sysconfdir="$fink_prefix/etc"

24行目
: ${xinitrc_xinitrc_d_dir="$fink_sysconfdir/xinitrc.d"}

31行目
# Numbering policy is described in $fink_prefix/share/doc/xinitrc/numbering.txt.
if test -d "$xinitrc_xinitrc_d_dir"; then
    for xinitrc__f in $xinitrc_xinitrc_d_dir/*.sh; do
	if test -r "$xinitrc__f" -a -x "$xinitrc__f"; then
	    . "$xinitrc__f"
	fi
    done
    unset xinitrc__f
fi

if 文、for 文、test は

Shell Scripting Primer
http://developer.apple.com/documentation/OpenSource/Conceptual/ShellScripting/index.html

を参考にしてください。

ここで重要なのは

    for xinitrc__f in $xinitrc_xinitrc_d_dir/*.sh; do

です。

$xinitrc_xinitrc_d_dir/*.sh はフォルダ /sw/etc/xinitrc.d の中に含まれるファイルで拡張子が sh のファイルのパスが xinitrc__f にそれぞれ代入し実行されます。

私の環境だとファイルが

/sw/etc/xinitrc.d/20dispconf.sh
/sw/etc/xinitrc.d/50kinput2.macim.sh
/sw/etc/xinitrc.d/73apps.sh

3つありました。

ファイル 50kinput2.macim.sh をみると

============ 50kinput2.macim.sh ============
# If you don't want to launch kinput2.macim, put xinitrc_kinput2_macim_enable=NO
# in your .xinitrc
: ${xinitrc_kinput2_macim_enable=YES}

case $xinitrc_kinput2_macim_enable in
    [Yy][Ee][Ss])
    if test -x "$fink_prefix/bin/kinput2.macim"; then
        "$fink_prefix/bin/kinput2.macim" -macim -xim &
    fi
    ;;
esac

目的の kinput2.macim を実行している箇所

 "$fink_prefix/bin/kinput2.macim" -macim -xim &

が見つかりました。

ここで注目するところは、kinput2.macim の引数として -macim、-xim を指定しているところだと思います。


また Shell Scripting Primer で説明されていない case 文が現れました。一番簡単な方法は、ターミナル上で man コマンド

man sh

を使用すれば良いのですが、ターミナルのウィンドウ上では見にくいと思います。

そこで

API Reference: Mac OS X Man Pages
http://developer.apple.com/documentation/Darwin/Reference/ManPages/manpages-mpindex.html#//apple_ref/doc/framework/manpages

Safari 上で見ることをお勧めします。

Mac OS X 特有のコマンド以外は

FreeBSD 日本語マニュアル検索
http://www.jp.freebsd.org/man-jp/search.html

も参考になると思います。

Manual Page For sh(1)
http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/sh.1.html

case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac
  
Pattern Matching
[...]  Matches  any  one of the enclosed characters.

この場合の case 文は 変数 $xinitrc_kinput2_macim_enable の値が YES、Yes、yes などの時、それに続くコマンド(今回のケースは if 文)を実行します。


Shell Script を少し読めるようになると思い出すのは X68000 です。あの時には Human68k 上で動作していた Shell Script が何をしているのか全然わかりませんでした。随分昔の話ですが!