comment -*- mode: text; tab-width:2; indent-tabs-mode:nil; coding:euc-jp -*-

Windows GDI 対応に関するメモ

* テスト環境
  MS Windows 11 + MSYS2 3.5.7 or Cygwin 3.5.7

* ビルド
  (PKG_CONFIG=i686-w64-mingw32-pkg-config CC=i686-pc-mingw32-gcc) ./configure \
      --with-gui=win32 --prefix= (--prefix=/mingw64) (--disable-ssh2) \
      (--with-mosh=[mosh source directory]) \
      (--with-libintl-prefix=[GTK+(win32) installed directory]) \
      (--with-libiconv-prefix=[GTK+(win32) installed directory])
  make
  (DESTDIR=/foo/bar) make install

  (See .github/workflows/ci.yml)

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

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

  (MinGW でビルドした場合)
  [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 を指定又は同オプションを指定しなかっ
  た場合におけるエンコーディングは、UTF-8 となります。

  (ConPTY)
  MinGW 版では、ssh 又は mosh を利用しない場合、ConPTY で cmd.exe を起動します。
  ConPTY を使用せず、単に pipe で子プロセスと通信したい場合は、main 設定ファイル
  において、use_conpty=false と設定してください。

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

  (MinGW でビルドした場合)
  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 となります。)。
     o MinGW でビルドした場合は --serv オプションを指定せずに起動することで、
       Cygwin 又は MSYS でビルドした場合は --serv=? オプションを指定することで、
       接続先サーバの一覧の管理画面 (tool/servman) が開きます。
     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 utmp は常に無効となります。

* ソースコード
  o USE_WIN32APIマクロ: MinGW でビルドする際に define されます。
  o USE_WIN32GUIマクロ: --with-gui=win32 の場合 define されます。

* 留意事項
  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 (https://ja.osdn.net/projects/ttssh2/)
    に含まれている "Tera Special" フォント (TSPECIAL1.TTF) をインストールする
    必要があります。

  o Cygwin/X 1.17 以降では、デフォルトでは、X サーバが 127.0.0.1:6000 での接続を
    待ち受けなくなりました。MinGW でビルドした mlterm が X サーバに接続し x11
    forwarding を行えるようにするためには、X サーバを次のとおり起動する必要があ
    ります。
    $ startxwin -- :0 -listen tcp &
