Meadow2 Memorandum

最終更新日 2005/07/04

お知らせ

更新履歴

開発状況

重要なニュース

Meadow2 の主な変更履歴

知られている重要な不具合

今後の開発予定

はじめに

Emacs 21.1 をベースにした次世代の Meadow、つまり Meadow2 が、 長い長いテスト期間を経て、ようやく正式にリリースされました。 このページでは、Meadow2 を入手してから使うまでの手順を簡単に示します。

興味がある方は、ぜひ使ってみてください。 そして、不具合や不満な点が見つかった場合には、積極的にフィードバックをお願いします。

フィードバック先は、meadow-develop または meadow-users-jp が望ましいです。 Meadow 掲示板や 2ch では、開発者の目に触れないまま、闇に葬られる可能性があります。

なお、Meadow2 の最新情報につきましては公式サイトの Meadow Official Site も参照してください。

スクリーンショット


起動画面

フォントと画像

Info(英語)

Info(日本語)

T-gnus

Lookup

customize-face

Emacs-w3m

navi2ch

EmacsChess

Wanderlust + LSDB

Elpoint

MHC + Wanderlust

BHL

特徴

参考までに、Windows で稼動する他の Emacsen との比較を表1に示します。 なお、XEmacs のことは良く分からないので比較対象から外しました。

表1 emacsen の比較
Meadow2 Meadow1.15 NTEmacs21.3 NTEmacs21.3 + IME patch NTEmacs開発版
ステータス 正式リリース(2.00) 正式リリース 正式リリース 非公式 patch 開発版
ベースとなる Emacs Emacs-21.1 Emacs-20.7 Emacs-21.3 Emacs-21.3 Emacs-21.3.50
多言語拡張
日本語(マルチバイト文字)のファイル名 [2] [2]
画像インライン表示 XPM XBM TIFF TGA PNG JPEG PICT PBM 等 ×[3] ×[3] ×[3] PNG, JPEG, GIF, TIFF, XPM, XBM, PBM
IMEインライン入力 × ×
toolbar/tooltip × × ×
スケーラブルフォント ×
プロポーショナルフォント ×
portable dumper × × × ×
NetInstall × × ×
ビルド環境 MSVC, Cygwin[4] MSVC MSVC, Cygwin[4] MSVC, Cygwin[4] MSVC, Cygwin[4]
外部プログラムの起動サポート[5]
日本語の ML や掲示板 × ×
安定性 [6]

Footnotes:

[1]  platform に依存しない(可搬性のある portable) dumper のこと。 これにより、他の Windows 環境に Meadow を持っていったときに、再 dump が不要になります(従来は、同じ種類の Windows でも dump 無しでは動く保証はありませんでした)。また、ウィルスチェッカーなどのせいで動作が不安定になることもありません。

[2]  特定の文字をファイル名に含むファイルを正常に扱えません。

[3]  bitmap だけは可能です。

[4]  正確には Cygwin 環境で、 Mingw のヘッダファイルとライブラリを使ってビルドします。

[5]  外部プロセス呼出し時の引数変換(argument-editing)、スクリプトの実行等のことです。

[6]  すでに Meadow-1.15 よりも安定してます。

インストール

概要

Meadow2 のインストール方法には、次に示すものがあります。

安定版を利用する場合

開発版を追っかける場合

ここでは、Netinstall を使う方法Subversion レポジトリを利用する方法について述べます。

Netinstall によるインストール

Netinstall を使う方法のフロー

Netinstall を利用することで、 ネットワーク経由で Meadow2 を簡単にインストールできます。 Meadow2 本体だけでなく、ImageMagick 等の前提となるソフトや、 便利な elisp パッケージも、同時ににインストールできます。 また、インストール後に再度 Netinstall を実行することで、 最新のパッケージに更新することができます。

Netinstall の起動には setup.exe または setup-ja.exe を利用します。 前者は英語版、後者は日本語版です。 Meadow の開発系列ごとに setup.exe の実体が異なります。 それぞれ、下記から入手できます。

ここでは、詳しいインストール手順は省略しますが、 ダイアログの指示に従うだけで導入できると思います。

Subversion レポジトリを利用して開発版を追っかける方法

開発版を追っかける方法のフロー

前提ソフトウェアの導入

開発版を追っかけるには、事前に、 以下のソフトウェアをインストールして使えるようにしておく必要があります。

(a) Subversion

Meadow のレポジトリから最新のソース一式を入手するために バージョン管理システムの Subversion を導入します。 Subversion の詳しい使い方は、 Subversion: 公式ガイド(日本語訳) を参照してください。

Windows の場合は、 TortoiseSVN を利用しても良いでしょう。 これは Windows のエクスプローラに寄生する Subversion クライアントです。 GUI で簡単に操作できます。 詳しくは、 TortoiseSVNユーザガイドを参照してください。

(b) ImageMagick-6.0.1

ImageMagick は、さまざまなフォーマットの画像を扱うためのライブラリです。

必ず ImageMagick-6.0.1 をインストールしてください。 ImageMagick では ABI(Application Binary Interface) の互換性が保たれていないので、ほかのバージョンを使うことはできません。

これらのパッケージは下記から入手できます。

なお、ImageMagick がインストールされていなくても、一応 Meadow2 を起動することは可能です。ただし、扱える画像フォーマットは極端に少なくなります(BMP ぐらい)し、toolbar も表示されなくなります。

(c) Cygwin の新しいもの

Cygwin でビルドする場合には、Cygwin 環境一式をインストールしておきます。 Cygwin は、Cygwin Project のサイト から入手可能です。

MSVC でビルドする場合でも、patch や gzip 等のツールは必要です。

(d) Microsoft Visual C++ 6.0 以降

MSVC でビルドする場合は、 当然ながら、MSVC をインストールしておいてください。 さらに、cmd.exe(または、command.com)上で、コンパイルできるように、 環境変数を設定しておく必要があります。 なお、バージョン 6.0 以降で、ビルドできることが確認されています。

レポジトリからチェックアウト

最新のソース一式を Meadow のレポジトリ から Subversion を使って入手します。

2.1系列を入手する場合には、次のように実行します。 この系列は Emacs-21.3 がベースとなっています。 早期のリリースを目指し、feature freeze となっていいますので、 比較的安定していると思います。

> svn co http://svn.meadowy.org/Meadow/branches/2.1 Meadow2.1

2.2系列を入手する場合には、次のように実行します。 2.1系列と同じく Emacs-21.3 がベースです。 新機能を積極的に取り込んでいくため、不安定な場合があります。

> svn co http://svn.meadowy.org/Meadow/branches/2.2 Meadow2.2

ブートストラップの実行

ビルドの前準備としてブートストラップを実行します。

MSVC を利用する場合と、Cygwin を利用する場合で、手順が若干異なりますので、 以下、順に説明します。

なお、Meadow2 のインストール場所は、c:/usr/local/Meadow2 であるとします。

(a) MSVC を利用する場合

cmd.exe (または command.com)から以下の手順で実行します。 sh, bash からでも大丈夫だと思いますが、未確認です。

> cd nt
> configure.meadow --with-msvc --prefix=c:\usr\local\Meadow2
> nmake bootstrap
--with-msvc は省略可能です。デフォルトで MSVC が選択されます。 --prefix でインストール場所を指定します。

省略時には、c:\Meadow2 にインストールされます。

(b) Cygwin を利用する場合

Cygwin の shell (sh や bash)から次のように実行します。 なお、cmd.exe (または command.com)からでも可能だと思いますが、 未確認です。

$ cd nt
$ ./configure.meadow.bat --with-gcc --no-cygwin --prefix=c:/usr/local/Meadow2
$ make bootstrap
--prefix でインストール場所を指定します。

省略時には、c:/Meadow2 にインストールされます。

ビルドとインストール

MSVC を利用する場合と、Cygwin を利用する場合で、手順が若干異なります。 以下、順に説明します。

(a) MSVC を利用する場合

cmd.exe (または command.com)から以下の手順でビルドします。

> nmake install

最後に、c:/usr/local/Meadow2/2.XX/install.exe を実行して、 インストールは完了です。

install.exe は、ビルドの度に実行する必要はありません。 しかし、初めてビルドしたとき、 または、Meadow2 のインストール場所が変わったときには、 忘れずに実行してください。

なお、上記のビルド手順では、コンパイラの最適化が一切有効になりません。 最適化を有効にするには以下の手順でビルドします。 実行速度を重視する方は、こちらをお試しください。 ただし、最適化によって、新たな不具合が生じるかもしれませんし、 バグの原因究明が困難になるかもしれません。 これらのことをご承知おきください。

> nmake install BUILD_TYPE=spd
(b) Cygwin を利用する場合

Cygwin の shell (sh や bash)から次のように実行します。

$ make install

最後に、c:/usr/local/Meadow2/2.XX/install.exe を実行して、 インストールは完了です。

install.exe は、ビルドの度に実行する必要はありません。 しかし、初めてビルドしたとき、 または、Meadow2 のインストール場所が変わったときには、 忘れずに実行してください。

作業コピーの更新

Meadow2 を使い始めた後に新たに変更されたソースを取り込むには、 以下を実行します。 この後に、ビルドとインストールを実行すれば、 最新の Meadow2 を使うことができます。

> cd somewhere/Meadow2.X # ワーキングコピーへ移動
> svn update

なお、上記の更新で、elisp が更新された場合には、 ビルドとインストールに戻る前に、 下記を実行してください。そんなに頻度は高くないはずです。

(a) MSVC を利用する場合

> cd ..\lisp && nmake recompile

(b) Cygwin を利用する場合

$ cd ../lisp && make recompile

基本設定

環境変数の設定も ~/.emacs の設定も、基本的に Meadow 1.15 の場合と同じです。 ただし、フォントの設定だけは大きく異なります。

このフォントの設定について詳しく説明します。

ローレベル API を用いたフォントの設定

低水準のフォント設定関数を利用したフォントの設定例を示します。

Windows フォントを使う場合

"Courier New" と "MS ゴシック" を使う場合の設定例を紹介します。 normal, bold, italic, bold + italic がすべて等幅であり、 "Courier New" と "MS ゴシック" の幅が1:2となります。

この設定では、読み込むべきフォントを逐一指定します。 ただし、指定しているのは12ポイントの大きさのフォントだけです。 これ以外のサイズについては、 Meadow 内蔵のデフォルトのフォントローダを使って読み込みます。

(w32-add-font
 "tt-font"
 '((spec
    ((:char-spec ascii :height 120)
     strict
     (w32-logfont "Courier New" 0 -13 400 0 nil nil nil 0 1 3 49))
    ((:char-spec ascii :height 120 :weight bold)
     strict
     (w32-logfont "Courier New" 0 -13 700 0 nil nil nil 0 1 3 49))
    ((:char-spec ascii :height 120 :slant italic)
     strict
     (w32-logfont "Courier New" 0 -13 400 0   t nil nil 0 1 3 49))
    ((:char-spec ascii :height 120 :weight bold :slant italic)
     strict
     (w32-logfont "Courier New" 0 -13 700 0   t nil nil 0 1 3 49))
    ((:char-spec japanese-jisx0208 :height 120)
     strict
     (w32-logfont "MS ゴシック" 0 -16 400 0 nil nil nil 128 1 3 49))
    ((:char-spec japanese-jisx0208 :height 120 :weight bold)
     strict
     (w32-logfont "MS ゴシック" 0 -16 700 0 nil nil nil 128 1 3 49)
     ((spacing . -1)))
    ((:char-spec japanese-jisx0208 :height 120 :slant italic)
     strict
     (w32-logfont "MS ゴシック" 0 -16 400 0   t nil nil 128 1 3 49))
    ((:char-spec japanese-jisx0208 :height 120 :weight bold :slant italic)
     strict
     (w32-logfont "MS ゴシック" 0 -16 700 0   t nil nil 128 1 3 49)
     ((spacing . -1))))))

(set-face-attribute 'variable-pitch nil :family "*")

;; フレームフォントの設定
(setq default-frame-alist
      (cons '(font . "tt-font")
            default-frame-alist))

BDF フォントを使う場合

BDF フォントの設定例です。ファイルのパスは適宜変更して下さい。

(w32-add-font
 "bdf-font"
 '((spec
    ((:char-spec ascii :height 120)
     strict
     (bdf-font "c:/usr/local/share/emacs/fonts/bdf/lt1-16-etl.bdf"))
    ((:char-spec ascii :height 120 :weight bold)
     strict
     (bdf-font "c:/usr/local/share/emacs/fonts/bdf/lt1-16b-etl.bdf"))
    ((:char-spec ascii :height 120 :slant italic)
     strict
     (bdf-font "c:/usr/local/share/emacs/fonts/bdf/lt1-16i-etl.bdf"))
    ((:char-spec ascii :height 120 :weight  bold :slant italic)
     strict
     (bdf-font "c:/usr/local/share/emacs/fonts/bdf/lt1-16bi-etl.bdf"))
    ((:char-spec japanese-jisx0208 :height 120 :weight any :slant any)
     strict
     (bdf-font "c:/usr/local/share/emacs/fonts/bdf/jiskan16.bdf")))))

;; フレームフォントの設定
(setq default-frame-alist
      (cons '(font . "bdf-font")
            default-frame-alist))

ハイレベル API を用いたフォントの設定

高水準のフォント設定 API を利用したフォントの設定例を示します。

この API を使うときは、以下の点に注意してください。

この API ではフォントの細かな調整ができません。私は、 ローレベル API を使うことをお勧めします。

(create-fontset-from-request "tt-font"
			     '((width . 8)
			       (height . 16)
			       (fixed . t)
			       (weight . 400)
			       (italic . nil))
			     '((family . "Courier New")
			       (family . "MS ゴシック")))

(change-fontset-from-request "tt-font"
			     '((width . 8)
			       (height . 16)
			       (fixed . t)
			       (weight . 700)
			       (italic . nil))
			     '((family . "Courier New")
			       (family . "MS ゴシック"))
			     1)

(change-fontset-from-request "tt-font"
			     '((width . 8)
			       (height . 16)
			       (fixed . t)
			       (weight . 400)
			       (italic . t))
			     '((family . "Courier New")
			       (family . "MS ゴシック"))
			     2)

(change-fontset-from-request "tt-font"
			     '((width . 8)
			       (height . 16)
			       (weight . 700)
			       (italic . t))
			     '((family . "Courier New")
			       (family . "MS ゴシック"))
			     3)

(set-face-attribute 'variable-pitch nil :family "*")

;; フレームフォントの設定
(setq default-frame-alist
      (cons '(font . "tt-font")
            default-frame-alist))

IME フォントの設定

IME フォントは、論理フォントで指定します。 ただし、Windows フォントしか利用できないので注意が必要です。 BDF フォントは利用できません。

フォントの高さ("MS ゴシック" の次の次の数字)を0にすることで、IME フォントの大きさがface に応じて拡大縮小するようになります。

(setq default-frame-alist
      (cons '(ime-font . (w32-logfont "MS ゴシック"
                                      0 0 400 0 nil nil nil 128 1 3 17))
	    default-frame-alist))

Meadow 1.xx の設定との共存方法

Meadow-1.xx と Meadow2 の設定が異なる場合は、 次のように、設定を振り分けるといいでしょう。

(cond
 ((and (featurep 'meadow)
       (eq emacs-major-version '20)) ; これは Meadow-1.xx

  ;; Meadow 1.xx の設定
  ...

  )
 ((and (featurep 'meadow)
       (eq emacs-major-version '21)) ; これは Meadow2

  ;; Meadow 2 の設定
  ...

  ))

高度な設定

文字間隔の設定

水平方向の文字間隔(character spacing)は、 フォントの設定 で示したように、`spacing' というフォントオプションで指定します。 正の数値を指定すると文字間隔が広がり、 負の数値を指定すると文字間隔が詰まります。 デフォルト値は0であり、 Windows の論理単位で値を指定します(現状では、ピクセル値と同じです)。

垂直方向の行間隔(line spacing)は、`line-spacing'という frame-parameter で指定します。行間隔を1ピクセルにするには次のように設定します。

(setq default-frame-alist
      (cons '(line-spacing . 1)
            default-frame-alist))

フォントの垂直方向の配置

Meadow2 では、垂直方向のフォント配置方法を、

の2つから選択できます。

デフォルトでは、ベースラインで揃えます。一方、センタリングしたい場合には、 vertical-centering-font-regexp で、対象となるフォントを正規表現を使って指定します。例えば、前述した "tt-font" というフォントだけをセンタリングしたい場合には、 次のように設定します。

(setq vertical-centering-font-regexp "tt-font")

toolbar の設定

toolbar のアイコン表示を tool-bar-button-relief と tool-bar-button-margin でカスタマイズできます。 それぞれ、立体感を出すための枠の幅ととアイコン周辺のマージン幅です。単位 はピクセルです。

設定例は次のようになります。

;; toolbar の調整
(setq tool-bar-button-relief 1)
(setq tool-bar-button-margin 1)

tooltip の設定

tooltip とは、toolbar のボタンやメニューを簡単に説明するヘルプウインドウです。 tooltip-frame-parameters を使って、 普通の frame-parameters と同じような方法でカスタマイズできます。

tooltip で意味があるのは font, internal-border-width, foreground-color, background-color でしょう。 なお、tooltip がうっとうしい場合には、tooltip-use-echo-area を non-nil にすることで消すことができます。 これで、独立したウインドウでなく、 ミニバッファにヘルプ文字列を表示させることができます。

また、表示のタイミングと時間については、 tooltip-delay, tooltip-short-delay, tooltip-recent-seconds, tooltip-hide-delay で、表示位置については、 tooltip-x-offset, tooltip-y-offset で調整できます。詳しくは doc strings を参照してください。

設定例は次のようになります。

(w32-add-font
 "tipfont"
 '((spec
    ((:char-spec ascii :height any)
     strict  
     (w32-logfont "MS UI Gothic" 0 12 400 0 nil nil nil 128 1 3 49))
    ((:char-spec japanese-jisx0208 :height any)
     strict  
     (w32-logfont "MS UI Gothic" 0 12 400 0 nil nil nil 128 1 3 49)))))

(setq tooltip-frame-parameters
      (append 
       '((internal-border-width . 1)
	 (font . "tipfont"))
       tooltip-frame-parameters))

ミニバッファの設定

Meadow2 では、ミニバッファが一時的に拡大してしまうことが多々あります。 理由の一つとして、baseline でフォントを揃える設定で "Courier New" と "MS ゴシック" を同時にミニバッファに表示すると、 行の高さが拡張されてしまうことがあります (すべての原因は把握できていません)。

強制的にミニバッファの拡大を抑止するには次のように設定します。

(setq resize-mini-windows nil)

フレームサイズのトグルの設定

Meadow2 では、フレームを最大化する関数(w32-maximize-frame)と、 最大化したフレームを復帰する関数(w32-restore-frame)が実装されています。

ここでは、これらの関数を使って、 フレームの大きさをトグルさせる設定を紹介します。 `C-x t'を入力すると、 カレントのフレームが最大化と元の大きさの間でトグルします。 複数のフレームを利用している場合でも問題なく利用できます。

(defvar my-frame-state-alist nil)

(defun my-toggle-frame-size ()
  (interactive)
  (let ((state (assq (selected-frame) my-frame-state-alist)))
    (if state
	(if (cdr state)
	    (w32-restore-frame)
	  (w32-maximize-frame))
      (setq state (cons (selected-frame) nil))
      (setq my-frame-state-alist
	    (cons state my-frame-state-alist))
      (w32-maximize-frame))
    (setcdr state (null (cdr state)))))

(global-set-key "\C-xt" 'my-toggle-frame-size)))

一行ごとにスクロールするための設定

Emacs ユーザの中にも、一行ごとのスクロールがお好みの方がいるようです。 ここでは、そのような方向けの設定を紹介します。

前提条件

Meadow2 で一行ごとにスクロールするには、 行の高さとデフォルトフォントの高さが等しい必要があります。

英字フォントと日本語フォントが混在する場合に、 この前提条件が満たされない場合があるので注意が必要です。

例えば、 高さ16ドット(12ポイント)の "Courier New" がデフォルトフォントの場合を考えます。 このフォントと、16ドットの "MS ゴシック" が混在する行では、 デフォルトではベースラインでフォントが揃えられるため、 行の高さが18ドットとなります。 したがって、デフォルトフォントの高さの16ドットと一致しないため、 一行ごとにスクロールすることはできません。

このような場合には、次のような設定を加えて、 垂直方向にフォントをセンタリングします。 これにより、両フォントが混在しても、高さが16ドットとなり、 一行ごとにスクロールするための条件を満たします。

(setq vertical-centering-font-regexp ".*")

なお、同じ高さの BDF フォントを利用する場合には、 特に前提条件はありません。

設定

上記の前提条件を満たす場合には、 次の設定で一行ごとにスクロールするようになります。

;; この設定でうまくいかない場合は数値を大きくすると良い
(setq scroll-conservatively 10)

Meadow2 関連情報

設計メモ

Meadow2 の内部情報を知りたい方はどうぞ。 完成度も信憑性も低いです。