Meadow

3. 基本設定

3.1 環境変数の設定

Windows 95/98/ME の場合

C:/autoexec.bat を使って環境変数を設定します。 (C:は起動ディスクに読み代えてください)。 "#"以降はコメントなので入力は不要です。

set HOME=c:\home                             #ホームディレクトリの指定
                                             #ドライブレターが必要
set SHELL=bash                               #シェルの指定
set PATH=c:\usr\local\meadow\1.15\bin;%PATH% #パスの追加
set TZ=JST-9                                 #タイムゾーンの設定
set TMP=c:\tmp                               #テンポラリディレクトリの指定
                                             #ディレクトリがなければ別途作成

set EMACS=meadow95                           #ライブラリの導入を容易にするため

Windows NT/2000/XP の場合

Windows 2000 の場合は、 "コントロールパネル→システム→詳細→環境変数"で出てくるダイアログで、 上記の環境変数を設定して下さい。 ダイアログの出し方は OS によって多少異なりますので注意してください。 HOME, SHELL のように、ユーザによって設定が異なるものは、ユーザー環境変数で、 それ以外のものは、システム環境変数で設定すると良いでしょう。 また、上記の変数 EMACS の値は meadowNT と置換えて下さい。

3.2 最小限の設定

Meadow のカスタマイズは、 初期設定ファイル ~/.emacs で行います。~ はホームディレクトリを意味し、 環境変数 HOME で指定します。 上記 autoexec.bat の設定では、c:\home という値に設定してますが、 実際には、 C:\home\miyoshi のように、ユーザごとに専用のディレクトリを作成して、 ホームディレクトリとしたほうがよいと思います。 .emacs では、様々な設定を Emacs Lisp という言語で記述します。

この .emacs の設定が最も大切なのですが、 私の .emacs は人様に公開できるものではありませんので、 先人の方々の設定を参考にしてください。

とはいっても、何も書かないのはあんまりなので、 日本語のテキストファイルを取り扱うのに必要最小限の設定を下記に紹介します。 ";"から行末まではコメントを意味します。設定後、Meadow を立ち上げると、 通常の Windows アプリケーションと同様に Alt-漢字(または M-\) で日本語入力モードになります。


;;;
;;; 日本語環境の設定
;;;
(set-language-environment "Japanese")
;;;
;;; IMEの設定
;;;
(mw32-ime-initialize)
(setq default-input-method "MW32-IME")

注意事項

(1) coding-systemの設定

coding-sysytem は、特に必要がない限り、 Meadow のデフォルトの設定から変更しないようにしましょう。 coding-sysytem のことをよく理解しないで、変な設定をしてしまうと、 トラブルの原因となります。

なお、Meadow 1.15 の場合、上記のように設定するだけで、 次の設定が自動的になされます。


(set-clipboard-coding-system 'japanese-shift-jis-dos)
(set-w32-system-coding-system 'japanese-shift-jis-dos)
(setq default-file-name-coding-system 'japanese-shift-jis)
(set-default-coding-systems 'japanese-shift-jis-dos)

;; 以下は set-default-coding-systems で設定される
(setq-default buffer-file-coding-system 'japanese-shift-jis-dos)
(setq default-file-name-coding-system 'japanese-shift-jis-dos)
(setq default-terminal-coding-system 'japanese-shift-jis-dos)
(setq default-keyboard-coding-system 'japanese-shift-jis-dos)
(setq default-process-coding-system
      '(japanese-shift-jis-dos. japanese-shift-jis-dos))

(2) "."で始まるファイル名の設定
Windows のエクスプローラでは、 "."で始まるファイル名を設定できません。 このため、例えば、配布パッケージに含まれる設定ファイルのサンプル dot.emacs.ja をホームディレクトリにコピーしたあとで、 .emacs と名前を変更することができません。 このようなファイル名の変更が必要な場合には、コマンドプロンプトや、 Meadow の dired (ディレクトリ・エディタ)を利用しましょう。 コマンドプロンプトの場合の操作例は次のとおりです。 ただし、Windows 9x 系の場合に、この操作ができるかどうかは、 確認していません。

> ren dot.emacs.ja .emacs

dired の場合は、`M-x d' で dired を起動したあと、名前を変更したいファイ ル名を選択してから、`R' で変更したい名前を入力します。

3.3 フォントの設定

(a) 概要

Meadow のフォント設定は少々複雑です。 複数のオブジェクト(*)が関係するためです。 これらのオブジェクトの構造をクラス図として図1に示します。 図の表記には、 UML(Unified Modeling Language)を使いました。 図から分かるように、フォント設定には、フレーム(frame)、 フォントセット(fontset)、フォント(font)、論理フォント (logical font, logfont と略)が関連します。以下、これらを順に説明します。

*) オブジェクト指向のソフトウェア開発におけるオブジェクトの意味。lisp で実装されているのでオブジェクトの要件を満たさないかもしれませんが、 設計上の話と考えて下さい。

フォント設定関係のクラス図
図1 フォント設定関係のクラス図
フレーム
Meadow のフォントは、 フレーム毎に設定することができます。つまり、 フレーム毎に利用するフォントを変えることができます。 フレームで使用するフォントは、次に述べるフォントセットで指定します。
フォントセット
フォントセットは、 複数のフォントを一つにまとめるものです。 Meadow が扱う文字集合(character set, charsetと略)ごとに、 表示に用いるフォントを指定します。 Meadow は複数のフォントセットを持つことができますが、 実際に利用されるのは、フレーム毎に設定したフォントセットのみとなります。 フレームで利用するフォントセットは、default-frame-alist で指定するか、 または、 SHIFT + マウス右ボタンで出てくるポップアップメニュから選択します。 なお、デフォルトで default-fontset というフォントセットが自動的に作成されます。 どのような文字集合を Meadow が扱えるか知りたい方は、 lisp/international/mw32misc.el で定義されている w32-charset-encoding-alist を参照してください。 設定で必要なコーディング方式(encoding-type)についても記述してあります。
フォント
フォントは、フォントの表示形態(プロパティ)ごとに、 実際にフォント表示に用いる論理フォントを保持します。表示形態としては、 ノーマル、ボールド、イタリック、ボールド・イタリックがあります。
論理フォント
論理フォントは、 実装に依存したフォントデータに対応します。 Meadow では、"MS 明朝" などの Windows が元々備える Windows フォント ( TrueType, ビットマップなど)と、X Window System で使われる BDF(Bitmap Distributed Format)フォントを利用することができます。 Windows フォントは、Windows にインストールされているものであれば、 直ちに利用することができます。一方、BDF フォントは、 フォントファイルを別途入手して、インストールする必要があります。

(b) 設定手順

フォントの設定手順にはいくつか方法がありますが、 ここでは、ローレベル API を利用したものを紹介します。 設定を容易にするためのハイレベル API もいくつか準備されていますので、 興味がある方は、README.Meadow[.ja] と lisp/international/mw32misc.el を読んでください。

手順は次のようになります。

  1. w32-add-font でフォントを作成する。
  2. 作成したフォントに対して、w32-change-font-logfont で論理フォント を指定する。論理フォントを指定方法は次のとおり。詳しくは、 README.Meadow[.ja] を参照してください。
    • Windows フォント:(w32-query-get-logfont) を評価する と出てくるダイアログボックスの結果のリスト。
    • BDF フォント:'(bdf "font ファイルをフルパスで指定") というリスト。
  3. 利用したいフォントに応じて、1, 2を繰り返す。
  4. new-fontset でフォントセットを作成する。
  5. default-frame-alist に利用するフォントセットを指定する。

次に、具体的な設定例を示します。ここでは、ascii 文字集合を表示するために、 Windows フォント(Courier New)を使用して、 フォントとフォントセットを作成しています。


;; w32-ascii という名のフォントの作成
(w32-add-font "w32-ascii"
              '((encoding-type  . 0)   ; コーディング方式
                (overhang       . 0)   ; オーバーハング(傾き)
                (base           . 12)  ; ベース
                (height         . 16)  ; 高さ
                (width          . 8))) ; 幅

;; 論理フォントの指定(ノーマル)
(w32-change-font-logfont
 "w32-ascii" 0 '(w32-logfont "Courier New" 0 -13 400 0 nil nil nil 0 1 3 49))
;; 論理フォントの指定(ボールド)
(w32-change-font-logfont
 "w32-ascii" 1 '(w32-logfont "Courier New" 0 -13 700 0 nil nil nil 0 1 3 49))
;; 論理フォントの指定(イタリック)
(w32-change-font-logfont
 "w32-ascii" 2 '(w32-logfont "Courier New" 0 -13 400 0   t nil nil 0 1 3 49))
;; 論理フォントの指定(ボールド・イタリック)
(w32-change-font-logfont
 "w32-ascii" 3 '(w32-logfont "Courier New" 0 -13 700 0   t nil nil 0 1 3 49))

;; フォントセットの作成
;; ascii 文字集合を w32-ascii というフォントで表示する
(new-fontset "private-fontset" '((ascii . "w32-ascii")))

;; 利用するフォントセットの指定
(setq default-frame-alist
      (cons '(font . "private-fontset") ; フォントセットの指定
            default-frame-alist))

(c) 設定例

次に、私の設定例を紹介します。 Windows フォントを使って表示間隔が16ドットの standard-fontset と、 14 ドットの small-fontset、さらに、 フォント自体の大きさが16ドットの BDF フォントを使って bdf-fontset を定義しています。これらの中からデフォルトのフォントセット として16ドットの Windows フォントを選択しています。 いずれのフォントセットの場合も、 個人的な趣味で X-Face のインライン表示などに利用する bitmap フォント(BDF フォントの一種、bitmap-mule に付属する) も使うように設定しています。BDF フォントは例えば、GNU の ftp サーバ などから入手してください。ここでは、C:/usr/local/meadow にインストールされているものとして設定しています。 なお、BDF フォントが存在しない場合は、設定をスキップするようにしています。

設定を簡単にするために自前で関数を定義して使っているのですが、 かえって複雑になっているかもしれません。参考程度にとどめておいてください。

この設定を使用するにあたっては、赤字 のファイル名・ディレクトリ名の部分を、 お使いの環境に合わせて変更してください。絶対パス、 または"~"(ホームディレクトリ)を使って指定できます また、青字の部分も、 環境に合わせて変更してください。"std-fontset", "small-fontset", "bdf-fontset" の中から好きなフォントセットを指定できます。


;; フォント設定用の補助関数
(defun my-define-font (prefix font-param logfont-charset-list)
  (let (charset-font-list logfont-list charset-alist)
    (while logfont-charset-list
      (setq logfont-list (nth 0 (car logfont-charset-list)))
      (setq charset-alist (nth 1 (car logfont-charset-list)))
      (while charset-alist
        (let* ((charset (caar charset-alist))
               (encoding (cdar charset-alist))
               (font-name (concat prefix (symbol-name charset))))
          (create-font-from-logfont-list font-name
                                         logfont-list encoding font-param)
          (setq charset-font-list
                (cons (cons charset font-name) charset-font-list)))
        (setq charset-alist (cdr charset-alist)))
      (setq logfont-charset-list (cdr logfont-charset-list)))
    charset-font-list))

(let ((bdf-dir "c:/usr/local/Meadow/intlfonts-1.1/")
      charset-font-list logfont-charset-list font-param)
  ;; 標準フォントの設定
  ;; フォント表示用のパラメタ
  (setq font-param
        '((overhang     . 0)
          (base         . 12)
          (height       . 16)
          (width        . 8)))
  ;; 論理フォントと、対応する文字集合のリスト
  (setq logfont-charset-list
        '(
          ;; 英字フォント
          (
           ;; 論理フォントのリスト(normal, bold, italic, bold + italic の順)
           ((w32-logfont "Courier New" 0 -14 400 0 nil nil nil 0 1 3 49)
            (w32-logfont "Courier New" 0 -14 700 0 nil nil nil 0 1 3 49)
            (w32-logfont "Courier New" 0 -14 400 0   t nil nil 0 1 3 49)
            (w32-logfont "Courier New" 0 -14 700 0   t nil nil 0 1 3 49))
           ;; 文字集合と、フォントのコーディング方法の連想リスト
           ((ascii              . 0)
            (latin-iso8859-1    . 1)))
          ;; 日本語フォント
          (((w32-logfont "MS ゴシック" 0 -14 400 0 nil nil nil 128 1 3 49)
            (w32-logfont "MS ゴシック" 0 -14 700 0 nil nil nil 128 1 3 49)
            (w32-logfont "MS ゴシック" 0 -14 400 0   t nil nil 128 1 3 49)
            (w32-logfont "MS ゴシック" 0 -14 700 0   t nil nil 128 1 3 49))
           ((latin-jisx0201     . 0)
            (katakana-jisx0201  . 4)
            (japanese-jisx0208  . 4)))))
  ;; フォントの作成(結果は文字集合と、作成したフォントの連想リスト)
  (setq charset-font-list
        (my-define-font "w16-" font-param logfont-charset-list))

  ;; ビットマップフォントの作成(x-face, Gnus 用)
  (let ((font-file (expand-file-name "Misc/etl8x16-bitmap.bdf" bdf-dir)))
    (when (and (locate-library "bitmap") (file-exists-p font-file))
      (require 'bitmap)
      (setq logfont-charset-list
            `((((bdf-font ,font-file))
               ((bitmap . 0)))))
      (setq charset-font-list
            (append (my-define-font "bdf16-" font-param logfont-charset-list)
                    charset-font-list))))
  
  ;; フォントセットの作成
  (new-fontset "std-fontset" charset-font-list)

  ;; 小さめのフォントの設定
  ;; このサイズだと、l と 1 の区別ができないのが難点
  ;; また、bitmap も正しく表示されないが仕方がない
  (setq font-param
        '((overhang     . 0)
          (base         . 10)
          (height       . 14)
          (width        . 7)))
  (setq logfont-charset-list
        '((((w32-logfont "Courier New" 0 -12 400 0 nil nil nil 0 1 3 49)
            (w32-logfont "Courier New" 0 -12 700 0 nil nil nil 0 1 3 49)
            (w32-logfont "Courier New" 0 -12 400 0   t nil nil 0 1 3 49)
            (w32-logfont "Courier New" 0 -12 700 0   t nil nil 0 1 3 49))
           ((ascii                      . 0)
            (latin-iso8859-1            . 1)))
          (((w32-logfont "MS ゴシック" 0 -12 400 0 nil nil nil 128 1 3 49)
            (w32-logfont "MS ゴシック" 0 -12 700 0 nil nil nil 128 1 3 49)
            (w32-logfont "MS ゴシック" 0 -12 400 0   t nil nil 128 1 3 49)
            (w32-logfont "MS ゴシック" 0 -12 700 0   t nil nil 128 1 3 49))
           ((latin-jisx0201             . 0)
            (katakana-jisx0201  . 4)
            (japanese-jisx0208  . 4)))))
  (setq charset-font-list
        (my-define-font "w14-" font-param logfont-charset-list))

  ;; 既定義のビットマップフォントを再利用する
  (let ((font "bdf16-bitmap"))
    (if (member font (w32-font-list))
        (setq charset-font-list
              (cons (cons 'bitmap font) charset-font-list))))

  ;; fontset の作成
  (new-fontset "small-fontset" charset-font-list)

  ;; BDF フォントの設定
  (setq bdf-dir (expand-file-name bdf-dir)) ; ファイル名の展開
  (when (file-exists-p bdf-dir)         ; ディレクトリの有無をチェック
    (setq font-param
          '((overhang   . 0)
            (base       . 14)
            (height     . 16)
            (width      . 8)))
    (setq logfont-charset-list
          `((((bdf-font ,(concat bdf-dir "European/etl16-latin1.bdf"))
              (bdf-font ,(concat bdf-dir "European/etl16b-latin1.bdf"))
              (bdf-font ,(concat bdf-dir "European/etl16i-latin1.bdf"))
              (bdf-font ,(concat bdf-dir "European/etl16bi-latin1.bdf")))
             ((ascii                    . 0)
              (latin-iso8859-1  . 1)))
            (((bdf-font ,(concat bdf-dir "Japanese-X/8x16rk.bdf")))
             ((latin-jisx0201           . 0)
              (katakana-jisx0201        . 1)))
            (((bdf-font ,(concat bdf-dir "Japanese-X/jiskan16.bdf")))
             ((japanese-jisx0208        . 0)))))
    (setq charset-font-list
          (my-define-font "bdf16-" font-param logfont-charset-list))
    (let ((font "bdf16-bitmap"))
      (if (member font (w32-font-list))
          (setq charset-font-list
                (cons (cons 'bitmap font) charset-font-list))))

    ;; fontset の作成
    (new-fontset "bdf-fontset" charset-font-list)))

;; フレームの設定
;; 色を指定するときは rgb.txt で定義されている色名を使う
;; このファイルは、Meadow 1.15 の場合 C:/usr/local/Meadow/1.15/etc/ にある

(setq default-frame-alist
      (append 
       '((foreground-color      . "black") ; 前景色
         (background-color      . "white") ; 背景色
         (border-color          . "black") ; ボーダー色(Meadow では無効?)
         (mouse-color           . "black") ; マウス色(???)
         (cursor-color          . "black") ; カーソル色
         (width                 . 80)   ; フレーム幅(文字数)
         (height                . 43)   ; フレーム高(文字数)
         (top                   . 20)   ; フレームの Y 位置(ピクセル数)
         (left                  . 40)   ; フレームの X 位置(ピクセル数)
         (ime-font              . "w16-japanese-jisx0208") ; IME 用のフォント
         (font                  . "std-fontset"))
                                        ; デフォルトのフォントセット
       default-frame-alist))