comment -*- mode: text -*-
comment $Id$

WIN32 native GUI 対応に関するメモ

* テスト環境
  Windows 7 + MinGW 5.1.4 or MSYS 1.0.10(MSYS-DTK 1.0.1) or Cygwin 1.7.26
            + libssh2 1.4.3(win32 native)
            + GTK+ 2.12.9(win32 native)
            + Fribidi 0.19.2(win32 native)

* ビルド
  (CC="i686-pc-mingw32-gcc") ./configure (--enable-ssh2) (--with-gui=win32) (--config-cache) \
			(--with-libintl-prefix=[GTK+(win32) installed directory]) \
			(--with-libiconv-prefix=[GTK+(win32) installed directory])
  make

* configure オプション
  --with-gui=(xlib|win32)
  GUI ライブラリとして xlib の API を使用するか win32 の API を使用
  するかを指定します。
  このオプションが指定されない場合、MSYS 環境では win32 と判断し、
  CYGWIN 環境では X がインストールされていれば xlib と、X がインス
  トールされていなければ win32 と判断します。

* インストール
  インストールしたいディレクトリに、
  kiklib/src/.libs/*.dll
  mkf/lib/.libs/*.dll
  mkf/libtbl/.libs/*.dll
  mlterm/.libs/*.dll
  mlterm/libctl/.libs/*.dll
  main/.libs/mlterm.exe
  scrollbar/sample/.libs/*.dll
  inputmethod/kbd/.libs/*.dll
  libind/.libs/*.dll
  tool/mlimgloader/.libs/mlimgloader.exe
  をコピーしてください。

  o MinGW or Cygwin(-mno-cygwin) で --enable-ssh2 なしでビルドした場合は、
    win32/plink/plink.exe もコピーしてください。libssh2 を使用しない場合、リモー
    トホストへの接続には plink.exe を使用しています。
  o MSYS-DTK or Cygwin でビルドした場合は、ソースツリーの
    contrib/tool/mlcc/mlcc.exe, tool/mlclient/mlclient.exe もコピーしてください。
  o mlconfig,mlterm-menu をビルドできた場合(あらかじめ GTK+ >= 2.0 をインストー
    ルしておく必要があります)は、ソースツリーの
    tool/mlconfig/.libs/mlconfig.exe
    contrib/tool/mlterm-menu/.libs/mlterm-menu.exe
    もコピーしてください。
  o MSYS-DTK or Cygwin でビルドした場合は、make install でインストールしても
    構いませんが、libmkf の relink に失敗することがあるため、make install の
    前に libmkf.la の relink_command 行を削除してから make install してください。

* 環境設定
  (MSYS-DTK or Cygwin でビルドした場合)
  SYSCONFDIR/mlterm 及び各ユーザごとの $HOME/.mlterm/ 以下に設定ファイル
  (ソースツリーの etc/ 以下のファイル)を配置することにより環境設定を行うことが
  できます。

  (MinGW or Cygwin(-mno-cygwin) でビルドした場合)
  [mlterm がインストールされたディレクトリ]\mlterm\ 及び各ユーザごとの
  %HOMEPATH%\mlterm\ (%HOMEPATH% が存在しないディレクトリの場合は %HOME%\.mlterm\)
  以下の設定ファイル(ソースツリーの etc/ 以下のファイル) を配置することにより
  環境設定を行うことができます。

  (フォント指定)
  font,vfont,tfont は、次のフォーマットとなります。
  [font family]( Bold Italic [font size]:[percentage])
  ※ [font family]の文字列に'-'が含まれる場合、aafontの形式と異なり、'\'でエスケ
    ープする必要はありません。
  ※ aafont,vaafont,taafont は使用しません。

  (エンコーディング)
  -E/--km/encoding オプションで AUTO を指定又は同オプションを指定しなかっ
  た場合におけるエンコーディングは、MSYS-DTK or Cygwin でビルドした場合は
  UTF-8、MinGW or Cygwin(-mno-cygwin) でビルドした場合には Windows の
  CodePageに対応したエンコーディングとなります。

* 起動方法
  コマンドプロンプト等から次のとおり起動
  (又は win32/mlterm-{win32|msys_cygwin}.bat のようなバッチファイルを用意)
  
  (MSYS-DTK or Cygwin でビルドした場合)
  set HOME=c:\msys\...\home\...
  set CYGWIN=tty
  mlterm.exe (options...) -e /bin/sh --login -i

  (MinGW or Cygwin(-mno-cygwin) でビルドした場合)
  set HOMEPATH=...
  mlterm.exe (options...) (-e plink.exe [-telnet/-ssh/-rlogin/-raw] [host])
  ※ -e オプションを指定しない場合、起動時に、接続するサーバ、プロトコル、
     ユーザ名、パスワード、エンコーディングを入力するダイアログが表示され
     ます。なお、このとき、パスワードを入力しなければ、Authentication Agent に
     よる認証を試みます。
     また、main 設定ファイルにおいて、あらかじめ次のオプションを指定することも
     できます(括弧書きは mlterm の起動時の引数として指定する場合
     のオプション名)。
     o default_server(--serv) = (<protocol>://)(<user>@)<server>(:<port>)(:<encoding>)
       ダイアログの既定値として表示するユーザ名、プロトコル及びサーバを
       指定します(ユーザ名又はプロトコルを省略した場合は、ユーザ名は環境変数
       USERNAME の値、プロトコルは SSH となります。)。
       このオプションが指定されていない場合、起動時のダイアログに入力した
       内容が、その後 pty を開く場合のダイアログの既定値となります。
     o server_list(--servlist) =
       (<protocol>://)(<user>@)<server>(:<port>)(:<encoding>),(<protocol>://)(<user>@)<server>(:<port>)(:<encoding>),...
       ダイアログの "List" 欄に、接続するサーバの候補を表示します。
       default_server で指定したサーバが server_list にない場合、自動的に
       default_server が server_list に追加されます。
     o always_show_dialog(--dialog) = true/false
       既に確立された SSH セッションがあり、そのセッション上に新しいチャンネルを
       開くことができる場合でも、必ず接続先のサーバを指定するためのダイアログを
       表示します。

* WIN32 GUI 版の制限
  o -I/--icon, --iconpath, -Y/--decsp, -&/--borderless, -d/--display 及び
    -t/--transbgオプションは使用できません。
  o mlterm server 機能で genuine モードは使用できません(対応予定もありません。)。
    MinGW 版では、mlterm server 機能自体が使用できません(対応予定もありません。)。
    代わりに、"\x1b]5379;mlclient <prefix opitions> <options>\x07" sequence
    (see doc/en/PROTOCOL) が使用できます(mlclient 又は mlclientx コマンドも、
    同 sequence に対応しています。)。
  o -X/--alpha オプションで透過率を指定した場合、win32 のレイヤードウィンドウの
    機能を使ってウィンドウを半透明にします。
  o Bold な文字は、設定ファイルで使用するフォントを指定しない限り、基本的には、
    重ね打ちによる擬似的な bold 表示を行います(Bold と Normal でフォント幅が異
    なる場合があるため)
  o スクロールバーは、"simple" 又は "sample" のみ使用できます。
  o MinGW では、~/.mlterm/key の OPERATION の "exesel:..." では、mlclient 以外を
    実行することはできません。

* ソースコード
  o USE_WIN32APIマクロ: MinGW 又は CYGWIN(-mno-cygwin) でビルドする際に define されます。
  o USE_WIN32GUIマクロ: --with-gui=win32 の場合 define されます。
  o ファイル名 *_win32.c: --with-gui=win32 の場合に compile されます。

* 留意事項
  o MSYS-DTK 1.0.1 に含まれる winuser.h / libuser32.a は古いため、
    背景透過に使用する SetLayeredWindowAttributes() が使用できません。
    背景透過を使用できるようにするためには、mlterm のビルドの前に
    MSYS-DTK 1.0.1 の winuser.h / libuser32.a を 最新の MinGW の
    ものに置きかえておく必要があります。

  o MinGW / Gtk+(win32 native) でビルドした mlconfig.exe 及び
    mlterm-menu.exe は、MSYS や Cygwin でビルドした mlterm と
    一緒に使用することができます。

  o mlterm-menu は、MinGW でビルドする場合には win32 native の GTK+ と、
    Cygwin でビルドする場合には Cygwin 用の GTK+ とリンクしないと、設定ファイ
    ル(menu)の読み込みができず正常に動作しません。

  o MSYS でビルドした mlterm は、CYGWIN=tty 環境変数をセットした上で、
    実行してください。そうしないと、mlterm 上で Windows native のコン
    ソールアプリケーション(MinGW の gcc 等)を実行した場合に、console
    が継承されず、新しい console window が表示されてしまう問題が生じ
    ることがあります。

  o DEC SPECIAL 文字を表示するには、Tera Term (http://teraterm.sourceforge.jp)
    に含まれている "Tera Special" フォント (TSPECIAL1.TTF) をインストールする
    必要があります。

* 実行可能バイナリの入手
  http://mlterm.sf.net/bin.html から cygwin/msys 用の実行可能バイナリを入手する
  ことができます(不定期更新)。
