Skip to content

hadsn/WIME

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

------
 wime 
------
 LinuxのWine上にインストールされたIMEをかんなに見せかけるプログラムです。 


-   [必要なもの]
-   [debianで必要なパッケージ]
-   [Makefileで使っている変数]
-   [Wineへのパッチ]
-   [利用までの手順]
-   [使い方]
-   [コマンドラインの書式]
-   [UTF-16モード]
-   [かな入力]
-   [環境変数]
-   [設定ファイル]
    -   [~/.wime/hinshi,$(PREFIX)/share/wime/hinshi]
-   [サポートプログラム]
    -   [GTK+用immodule]
        -   [再変換]
    -   [XIMサーバー]
        -   [コマンドラインオプション]
        -   [リソース]
        -   [入力スタイル]
        -   [変換ウィンドウのフォント]
    -   [wimectrl]
        -   [コマンドラインオプション]
    -   [Qt用immodule]
    -   [im-config用定義ファイル]
-   [作業用ファイル]
-   [いろいろ]
-   [作成環境]
-   [ソフトウェアの使用について]
-   [連絡先]



必要なもの
==========

-   Wine
-   libcannaのヘッダファイル(RK.h)
-   GTK+ (immoduleを使用するとき)



debianで必要なパッケージ
========================

  ----------  ---------------------------------------------------------------
  wime        make gcc libwine-dev libx11-dev libcanna1g-dev pkg-config
  gtk im      libgtk2.0-dev libgtk-3-dev libgtk-4-dev (いずれか、あるいは全部
              )
  qt4 im      libqt4-dev g++
  im-config   im-config
  ----------  ---------------------------------------------------------------

など。



Makefileで使っている変数
========================

  -----------  --------------------------------------------------------------
  PREFIX       インストール先ディレクトリ(/usr/local)
  CFLAGS       コンパイル時のフラグ(-g -Wall)
  CXXFLAGS     C++でコンパイルする時のフラグ(-g -Wall)
  LDFLAGS      リンク時のフラグ(-g)
  WINEDIR      Wineがインストールされているディレクトリ(/usr/local)
  WINEINCDIR   Wineのincludeディレクトリ($(WINEDIR)/include/wine)
  INSTALL      installコマンド (install)
  MKDIRP       ディレクトリ作成コマンド(install -d)
  CONFDIR      個人用設定ファイルをいれるディレクトリ(.wime)
  USE_CLANG    GCCではなくclangを使用するとき1 (0)
  PROG         利用するサポートプログラム(xim gtk2 gtk3 gtk4 qt4 qt5 qt6 im-
               config)
  WOW64        64ビット環境で32ビットWineを使用するとき1 (0)
  CC32_ENV     32bit環境へのコマンド
  -----------  --------------------------------------------------------------

これらの変数は conf.mk にあります。 makeの引数で指定することもできます。

DESTDIR を定義したときは、インストール先ディレクトリパス(PREFIX)の前に
DESTDIR が付け足されます。

最近のWineはWOW64がうまく動作するため、WOW64を有効にしたWineであれば変数WOW64を1にする必要はありません。
環境変数WINEARCHをwin32にしたWine環境の場合等で1にしてください。

chrootやlxcなどによる32bit開発環境があるとき、CC32_ENVをschrootやlxc-executeなどにしておくとコンパイルコマンドをそれへの引数として実行します。gcc-multilibでそのまま32bitアプリケーションが作れる場合は特に設定する必要はありません。



Wineへのパッチ
==============

-   Wine1.7.3以降でimmに変更が加えられ、ATOKが動作しなくなりました。
    Wineのソースにパッチimm-magic-1.7.3をあてると動作するようになります。
    Wine7.13以降ではimm-magicは必要なくなりました。代わりにパッチimmgwlを適用してください。
     Wine8.5以降ではパッチimmgwlは必要ありません。

-   Wine3.8以降で64ビット版ATOKのインストールが成功するようになりましたが、64ビット版を動作させるためにはパッチtransmsgの適用が必要です。
     Wine8.6以降では必要ありません。

-   wimegtkやwimeximでかな入力をする場合はパッチkanainputを適用してください。

-   Wine5.10以降でATOKの拡張辞書を使っている場合、辞書による検索結果が表示されません。詳しくはReadme.atokを参照してください。



利用までの手順
==============

1.  wimeのコンパイル&インストール。
2.  IMEをWineにインストール。
3.  レジストリの確認(Readme.atokを参照してください)。
4.  ximやgtk-imを使う場合、Xのリソース(imeToggleKeyなど)、環境変数(XMODIFIERS,
    GTK_IM_MODULEなど)を設定。
5.  gtk-imを使う場合、gtkのimmodules.cacheを更新する。
6.  wimeを実行。

共有ライブラリを使うので、wimeインストール後にldconfigを実行してください。



使い方
======

    wime

で起動します。以後cannaserverと同じように振る舞います(その予定です)。

かんなと同時に使うことは出来ません。先にかんなを停止させてください(後述のコマンドラインオプションか環境変数を使うことで同時に起動させることもできます)。

終了は

    wimectrl -k

あるいは

    cannakill

です。

インストール前に

    LD_LIBRARY_PATH=./io:./so:$LD_LIBRARY_PATH ./exe/wime

として動作確認できます。



コマンドラインの書式
====================

    wime [options] [logfile]

  -------------------------  ------------------------------------------------
  -h                         オプションの一覧を表示します。
  -p<数値>                   ソケットのファイル名に':数値'を追加します。
  -e<ime>                    IMEに特定の処理を行います。今のところ'atok'が指
                             定できます。
  -v[数値]                   動作の詳細表示。
  --channel <name,...>       ログの種類を選択します。
  --version                  バージョンを表示。
  logfile                    -vで詳細表示させたときの出力先ファイルを指定しま
                             す。省略したときと'-'を指定したときは標準出力に
                             なります。
  -------------------------  ------------------------------------------------

-pオプションを使うことでcannaと同時に使用する、あるいはwimeを複数起動させることができます。
例えばwimeを"-p1"で起動させ、wimeを直接使用するプログラム(wimectrl,wimexim)にも"-p1"を付けます。immoduleは後述の環境変数WIME_SOCKETを使って、この場合`WIME_SOCKET=1 gedit`などとします。こうするとcannaserverは通常のソケット"/tmp/.iroha_unix/IROHA"で、wimeは"/tmp/.iroha_unix/IROHA:1"で使用できます。ただしcannaプロトコルを直接扱うプログラムはどうにかしてソケットのファイル名を編集するしかありません。

-vオプションの数値には0から3、もしくは"-"を指定します。数値が大きいほど詳細情報になります。0と"-"は表示なし、3はデバッグ出力です。
-vを複数書いたときはその個数が情報レベルになります。

--channel オプションは -v を指定したときに何を出力するかを選択します。

  ------------- ------- ------------------------------
  global        1       一般情報
  composition   2       WM_IME_COMPOSITIONメッセージ
  notify        4       WM_IME_NOTIFYメッセージ
  request       8       WM_IME_REQUESTメッセージ
  imemsg        0x10    上記以外のimeメッセージ
  canna         0x20    cannaの関数
  xim           0x40    XIM
  gtk           0x80    Gtk-im
  qt            0x100   Qt-im
  winmsg        0x400   windows message全部
  time          0x800   経過時間
  all                   上記全部
  ------------- ------- ------------------------------

上記の名前か数値を","で列挙します。数値は足し算した値でもかまいません。また前に"-"をつけるとその項目は表示しません。例えば

    global,notify,0x30
    all,-time (左から順に評価するので、逆にすると効果無し)

などとします。



UTF-16モード
============

cannaプロトコルの"initialize"を使うときにユーザ名の後ろに"@utf16le"(もしくは"@utf16")か"@utf16be"を付けると、その接続で使う文字コードはかんなで使用している2バイトのEUC-JPではなく指定した文字コード(UTF-16)であるとします。もちろんこれだけでUTF-16が使えるわけではなく、wimeを使用するアプリケーション側もこれに応じた処理が必要になります。

これが使えれば、UTF-16にはあってもEUC-JPに無かったために文字化けしていた文字が扱えるようになります。



かな入力
========

wimegtkやwimeximでかな入力する場合は、パッチkanainputをWineのソースコードに当ててWineをコンパイルしてください。対象はwinex11.drv.soです。

次にsetxkbmapコマンドでキーボードのレイアウトを変更します。

    setxkbmap -model jp106 -layout 'jp,jp(kana)'

-layoutオプションに'jp(kana)'を追加します。他のオプションは適当にしてください。
-printオプションで現在の設定を表示させて、

    setxkbmap -print|grep symbols
         xkb_symbols   { include "pc+jp+jp(kana):2+inet(evdev)+terminate(ctrl_alt_bksp)" };

xkb_symbolsに'jp(kana):2'があることを確認してください。



環境変数
========

WIME_SOCKET=数値

:   1以上の数値を指定すると、ソケットのファイル名に数値を付け足します。
    -pオプションと同じものです。

WIME_DEBUG=数値,name,...

:   0から3までの数値(-vオプションと同じ)とその後ろに--channelオプションと同じ
    形式で指定します。

これらが設定されていても、コマンドラインでの指定が優先されます。
gtk im,qt im
モジュールにはコマンドラインで指定することができないので、環境変数で設定します。



設定ファイル
============


~/.wime/hinshi,$(PREFIX)/share/wime/hinshi
--------------------------------------------

Windows IMEの品詞コードとかんなの品詞コードの対応表です。

フォーマットは

    <Windowsのコード>   <品詞名>   <かんなのコード ...>

です。先頭が"#"の行と空行は無視されます。品詞名は使いません(参考用です)。

<かんなのコード> には正規表現が使えます。
かんな品詞コードはかんなマニュアル(cannadoc.pdf)などを参照してください。

このファイルがない場合、単語登録はできません。

品詞の対応が見つからなかった場合、先頭の品詞コードが使われます。

添付しているのはATOK2008を使っている時のものです。

> wimectrl -w

で新しく生成することができますが、かんなの品詞コードは書かれていません。

hinshiファイルは$(PREFIX)/share/wimeにインストールされます。 先に
~/$(CONFDIR)/hinshi を探し、ファイルがなかった場合
$(PREFIX)/share/wime/hinshi を読み込みます。



サポートプログラム
==================

  ------------------------  -------------------------------------------------
  im-wime.so                GTK+用immodule
  wimexim                   XIMサーバー
  wimectrl                  IMEの設定ダイアログの表示、wimeの終了などを行いま
                            す。
  libwimeqim.so             Qt用immodule
  im-config用定義ファイル   
  ------------------------  -------------------------------------------------


GTK+用immodule
--------------

キー入力をWineに丸投げするため、変換操作時のキーバインドはIMEのものになります。

GTKアプリ上の右クリックで出るポップアップメニューで入力メソッドを"Wime"にするか、環境変数GTK_IM_MODULEに"wime"を指定します。

IMEのトグルキーはXのリソース"imeToggleKey"(アプリケーション名"wimegim")かIMEのプロパティのキー定義で設定します。XIMサーバーの項を参照してください。

wimeに-pオプションを使っている場合、環境変数WIME_SOCKETに同じ数値を設定してください。

`make install`でモジュールファイルがコピーされますが、GTK+の設定は行いません。
素のGTK+ではgtk-query-immodules-3.0の出力でimmodules.cacheを更新しますが、
このへんはディストリビューションによって多少違うようです。自分の環境に合わせて設定してください。


### 再変換

再変換したい文字列のところにカーソルを移動させてから再変換を行います。
選択部分を再変換することは現在できません。


XIMサーバー
-----------

これも同様にキー入力をWineに丸投げします。

環境変数 XMODIFIERS に "@im=wime" を指定してください。


### コマンドラインオプション

    wimexim [-s] [-h -p<num> -v[num] --ch <name,...> --version]

オプションはwimeと同じです。

-sを指定したときはXサーバーへのリクエストを同期的に行います。

-pオプションか環境変数WIME_SOCKETがある場合、サーバー名にも数値が付け足されます。例えば

> wimexim -p4

あるいは

> WIME_SOCKET=4 wimexim

として起動させたときは XMODIFIERS は "@im=wime4" になります。


### リソース

imeToggleKey: [Stkeys-]Key[ ...]

:   IMEのトグルキーを指定します。 Stkeys は
    S(shift),C(ctrl),AかM(alt),W(super),1~5(mod1~mod5)を1つ以上指定します
    (必要ない場合、[Stkeys-]の部分は省略できます)。

    Keyはキーボード上の1文字、あるいはキー名(keysymdef.hにあるもの)です。
    "\n"、"\t"、スペースで区切って複数のキーの指定ができます。

        例:
             A-`          Altと"`"キー
             SC-space     ShiftとCtrlとスペースキー
             F12          F12キー

imeOnKey: [Stkeys-]Key[ ...]

imeOffKey: [Stkeys-]Key[ ...]

:   IMEのオン/オフキーを指定します。

defaultCompositionFont: PixelSize,Foundry Family

:   変換ウィンドウのフォントセットが指定されなかったときに使うフォントを指定
    します。
    Foundry,Family,PixelSizeはXLFDの要素です。下の"変換ウィンドウのフォント"も
    参照してください。

アプリケーション名はwimeximでは"wimexim"、im-wime.so(GTK IM)では"wimegim"になります。クラス名は"Wime"です。

    wimexim.imeToggleKey:A-space
    wimegim.imeToggleKey:F1

などとしてXIMとGTK+でトグルキーを別にすることもできますが普通は同じキーでしょうから、その場合クラス名Wimeを使って

    Wime.imeToggleKey:A-space

として1つの記述にできます。

imeToggleKey、imeOnKey、imeOffKeyのいずれも設定されていない場合、IMEがオフであってもすべてのキー入力をIMEに送ります。IMEのプロパティによるキー設定で日本語入力on/offの設定をしてください(逆に言えば、IME側で日本語入力on/offの設定ができればリソースの設定は必要ありません)。


### 入力スタイル

プリエディットは

-   XIMPreeditPosition (over the spot)
-   XIMPreeditCallback (on the spot)
-   XIMPreeditArea (off the spot)
-   XIMPreeditNothing (root window)

の4種類です。

ステータスは XIMStatusNothing,XIMStatusNone,XIMStatusArea
が指定できますが、どれにしてもIMEのステータスバーを表示します。


### 変換ウィンドウのフォント

over the spotで使われるフォントはフォントセットとしてXIMライブラリ(クライアントアプリケーション)から送られてきます。XのフォントはWine1.5.3以降では扱えなくなってしまいました。それへの対処としてWineのフォント置換を利用します。

レジストリ HKCU/Software/Wine/Fonts/Replacements に

    "foundry family"="windows font"

というデータを作ります。

例えば kterm で変換ウィンドウのフォントセットに

    -misc-fixed-medium-r-normal--14-110-100-100-c-70-iso8859-1,
    -misc-fixed-medium-r-normal--14-130-75-75-c-140-jisx0208.1983-0,
    -misc-fixed-medium-r-normal--14-130-75-75-c-70-jisx0201.1976-0 

が使われる場合、

    "misc fixed"="MS PGothic"

とします。

実際にどのフォントセットが使われるかは、各アプリケーションの設定を見るか、あるいはwimeximの出力の"fontSet"の行を探してください(wimeximのログはwime本体から出力されます)。


wimectrl
--------

wimeの終了などを行います。

今のところ rオプション(単語登録)はうまく動きません。


### コマンドラインオプション

  ------------  -------------------------------------------------------------
  -c 文字列     文字列(文字コードは環境変数LANGのもの)を再変換しウィンドウに
                表示します。文字列が'-'のときは標準入力から読み込みます。リソ
                ースdefaultCompositionFontがあればウィンドウ表示に使います。
  -d            辞書設定ダイアログを表示します。
  -e            設定ファイル(~/.wime/hinshi)を再読み込みします。また、コンテ
                キストを作り直します。IMEの設定ダイアログでの変更が反映されな
                い場合このオプションを使ってください。
  -k            wimeを終了させます。
  -kx           wimeximを終了させます。
  -p 数値       使用するソケット名に':数値'を付け足します。動作をするオプショ
                ンより前に指定してください。
  -r            単語登録ダイアログを表示します。
  -s            IMEの設定ダイアログを表示します。
  -t[数値]      wimeが使用可能になるまで停止します。停止時間をミリ秒で指定で
                きます。省略したときは無期限になります。wimeに接続できないま
                ま待ち時間が過ぎたときはステータス1で終了します。
  -w            hinshiファイルをつくるための品詞一覧を出力します。
  --version     バージョンを表示します。
  -h, --help    コマンドラインオプションの一覧を表示します。
  ------------  -------------------------------------------------------------

オプション -s がデフォルトです。


Qt用immodule
------------

(開発中)


im-config用定義ファイル
-----------------------

/usr/share/im-config/data に 50_wime.conf と 50_wime.rc
(im-configのバージョンが0.4以下の時は 50_wime.dsc 、 50_wime.im )
がインストールされます。

~/.wime(conf.mkのCONFDIRで指定したディレクトリ)にあるconfigファイルを読み込みます。
このファイルには環境変数を書いておきます。WIME_SOCKET と WIME_DEBUG
以外に、次のものを使います。

  ------------  -------------------------------------------------------------
  WIME_ARG      wimeへの引数
  WIME_ENV      wimeへの環境変数
  WIMEXIM_ARG   wimeximへの引数
  ------------  -------------------------------------------------------------

WIME_SOCKETを-pオプションに、WIME_DEBUGを-vと--chオプションに変換し、それらとWIME_ARGを引数にしてwimeを実行します。

例えばconfigファイルを次のようにすると

    export WIME_SOCKET=2
    export WIME_DEBUG=3,all
    WIME_ARG='-e atok /tmp/wimelog'
    WIME_ENV=WINELOADER=/usr/local/bin/wine64

次のコマンドラインが実行されます。

    WINELOADER=/usr/local/bin/wine64 wime -p2 -v3 --ch all -e atok /tmp/wimelog

この例ではwine64で実行させるためにWIME_ENVを設定しています。
"WIME_SOCKET=2" は "-p2" に、"WIME_DEBUG=3,all" は" -v3 --ch
all" になり、それらとWIME_ARGの "-e atok /tmp/wimelog"
をwimeへの引数にします。

WIME_SOCKETがエクスポートされるので、wimegtkも正しいソケット(この場合/tmp/.iroha_unix/IROHA:2)を利用します。

~/.wimeに実行可能なwimeかwimeximがあればPREFIXにインストールしたwimeではなくそちらを実行します。



作業用ファイル
==============

  -----------------------  --------------------------------------------------
  /tmp/.iroha_unix/IROHA   cannaクライアントと通信するためのソケット
  /dev/shm/wimepid         wimeと通信しているプロセスのpidが記録される
  /dev/shm/sem.wimerun     共有メモリのロックに使うファイル
  -----------------------  --------------------------------------------------



いろいろ
========

-   ATOK使用時は-eオプションを付けてください。

-   wimeを強制終了させた場合ソケットが残っているので、そのままでは wime
    も cannaserver も再起動できません。 rm /tmp/.iroha_unix/IROHA
    としてソケットを削除してください。

-   wimeximでon-the-spotが使われた場合、候補ウィンドウは適当な場所(wime2.1.0では
    左上隅)に表示されます。XIMのon-the-spotではカーソル位置が取得できず、
    候補ウィンドウの位置制御をしていないためです。
    修正する予定はありません。

-   動作チェックは野良ビルドの emacs と debパッケージの kinput2を
    使っています。 scim や uim などは使ったことがないので、
    うまく動作するかはわかりません。
    →wime1.8.4以降はuimで動作するようです。

-   wimexim、gtk-imで"( )<"の文字が入力できないときは

    xmodmap -e 'keycode 187=' -e 'keycode 188=' -e 'keycode 94='

    を行ってみてください。



作成環境
========

  -------------  ------------------------------------------------------------
  OS             Debian GNU/Linux trixie/sid
  Wine           9.1
  IME            ATOK 2021
  gcc            13.2.0
  クライアント   emacs-30.0.50(+yc.el), mousepad-0.6.2
  -------------  ------------------------------------------------------------



ソフトウェアの使用について
==========================

wime --- Copyright (C) 2008-2024 ,thomas

このソフトウェアの使用によって発生するいかなる損害についても作者は責任を負いません。
自己責任の下で使用してください。

ライセンスは、Wineにならって LGPL とします。



連絡先
======

バグ、提案、動作報告などありましたら <〓〓〓〓〓〓@yf7.so-net.ne.jp>
までお願いします。

About

Copy of thomas's WIME. Using Windows IME as Linux IM.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors