Meadow

7. Q&A

私がこれまで Meadow を使ってきて悩んだことを Q&A 形式にまとめてみました。

Meadow 本体関連

インストール

[Q] 入手した Meadow のアーカイブが、gunzip や WinZip で展開できません。
[A] 入手したアーカイブ名が元々の名前と変わってませんか? ファイル名に"."が複数含まれる場合に、 最後の一つ以外を"_"に変更する ftp クライアントがあるので注意します。 例えば Netscape Navigator は、XXX.tar.gz をXXX_tar.gz と変えてしまうので、 そのままでは、アーカイブの展開ができません。 元々の名前に戻してから、アーカイブを展開します

[Q] WinZip で Meadow のアーカイブを展開すると、インストールに失敗します。
[A] 次の3点を確認してください。

実行・設定

[Q] Windows98 で Meadow を使うと、Windows98 の調子がおかしくなります。
[A] 以下のような事例が報告されています が、原因は解明されてません。

[Q] Meadow を -geometry オプションを指定で起動できないのですが。
[A] Meadow 1.00 のバグのようです。あきらめま しょう。なお、Meadow 1.10 ではこのバグは修正されています。

[Q] shell-mode で、行末に ^M がでてうっとうしいのですが。
[A] .emacs に次の設定を追加します。
(add-hook 'comint-output-filter-functions 'shell-strip-ctrl-m nil t)

[Q] M-x grep で異常終 了するのですが。
[A] Virtually un*x と cygnus を混在させ てませんか。または、複数のバージョンを混在させてませんか?もし、そうなら ば、混在を止めてみましょう。

[Q] 日本語入力モードのとき、モードライ ンのインジケータ“[あ]”が文字化けします。
[A] .emacs では、coding system を iso-2022-jp にしなければいけません。 C-x RET f と入力後 iso-2022-jpを選択して、セーブしてください。

または、.emacs の行頭に、";;; -*- coding: iso-2022-jp -*-" と記述することでも、対応できます。

[Q] Meadow 1.01 にバージョンを上げたら、タイムゾーンがずれるようになりました。
[A] DOS プロンプト上で、次のように環境変数 TZ を空にしてからダンプし直します(Win95/98 の場合)。

> set TZ=
> dump95

[Q] y/n に答えるときには、IME を自動的にオフにしたいのですが。
[A] 関数 wrap-function-to-control-ime を使って、問合わせの際に呼出される関数をラップ(wrap)してください。 y-or-n-p (y/n の問合せ)と yes-or-no-p (yes/no の問合せ) をラップする場合には、.emacs に次の設定を加えます。

(wrap-function-to-control-ime 'y-or-n-p nil nil)
(wrap-function-to-control-ime 'yes-or-no-p nil nil)
非インタラクティブ関数をラップする場合は、 wrap-function-to-control-ime の2, 3番目の引数を nil にします。 インタラクティブ関数をラップする場合は、 2番目の引数を t に、3番目の引数をラップされる関数が interactive を呼出すときと同じ引数を与えます (ラップされる関数の定義を調べる必要があります)。

なお、ラップされる関数は、既に定義されている必要があります。 autoload などで、 実行時にライブラリをロードするように設定してあるときは注意が必要です。 この場合は、hogehoge-load-hook などライブラリをロード時のフックで設定すれば良いでしょう。 YaTeX の設定を参考にしてください。

[Q] Meadow 1.10 にバージョンを上げたら、select-input-method でエラーが発生するようになりました。
[A] Meadow 1.10 には、 select-input-method という関数は存在しません。 その代わりに、下記に示すように、変数 default-input-method を使って、 使用したいIME を設定してください。

(setq default-input-method "MW32-IME")

Meadow 関連情報

[Q] Meadow のメーリングリストへの入り方がわかりません。
[A] Meadow に付属の、 README.Meadow または README.Meadow.ja に書いてあります。 よく読んでください。

[Q] こんな Q&A ではなくて、まともな Meadow の FAQ はないのですか?
[A] あります、あります。 Meadow Frequently Asked Questions and Answers list を参照してください。

Emacs Lisp ライブラリ

インストール

[Q] ./configure が途中で終了してしまいます。
[A] /bin/sh.exe は存在しますか? なければ、cygwin の bash.exe を sh.exe という名称でコピーしておきます。 cygwin の sh.exe は問題が多いので、ここでは使いません。

[Q] make すると、この プログラムは DOS では実行できないとエラーになるのですが。
[A] 環境変数 MAKE_MODE を UNIX に設定してますか?cygwin 20.x では、デフォルトで DOS のシェルを用いてサブプロセスを起動するように なっています。環境変数を設定するには、autoexec.bat に次の設定を追加しま す(Windows95/98 の場合)。
set MAKE_MODE=UNIX

[Q] MAKE_MODE=UNIX と設定したのに、make がうまくいかないのですが。
[A] UNIX の後にタブやスペースがありませんか? もし、そうなら取り除いてください。

[Q] それでも、make がうまくいかないのですが。
[A] cygwin ではうまくいかないことあります。特に、引用符 ('', "", ``)やスラッシュ(/)が大量に出てくるとだめですね。 Web で cygwin 用のパッチを探すか、makefile を解析して自力で何とかしましょう。

[Q] バイトコンパイルの方法の仕方がわかりません。
[A] いろいろ方法があります。

[Q] info ファイルのサーチパスを追加するにはどうしたらいいの?
[A] 例えば、 c:/usr/local/info を追加したい場合には、 次の設定を .emacs に追加します。

(setq Info-directory-list
      (list "c:/usr/local/info"
            (expand-file-name (getenv "INFOPATH"))))

[Q] 環境変数 INFOPATH はいったい誰が設定しているの?
[A] INFOPATH は、$EMACS_DIR/1.10/info と設定されます。未確認ですが、おそらく Meadow が設定していると思います。

基本事項

[Q] lisp の式を評価する方法は?
[A] いろいろ方法があります。例えば、 (w32-query-get-logfont) という式の評価方法として次のものがあります。
  1. *scratch* バッファで、(w32-query-get-logfont) と入力後、"C-j" (eval-print-last-sexp) で直前の式を評価する。評価結果は*scratch* バッファに表示される。
  2. "M-:" (eval-expression) と入力後、(w32-query-get-logfont) と入力する。 評価結果は、ミニバッファに表示される。
もし、インタラクティブ関数を評価する場合は、 当然ながら "M-x 関数名"でも評価できます。 また、変数を評価する場合には、"f1-v" (describe-variable) も使えます。

[Q] バイトコンパイルとは何ですか?
[A] テキスト形式の lisp のソースコード (.el) を、Emacs が扱いやすい中間コード(.elc)へと変換することです。 バイトコンパイルすることで、lisp ファイル読込みが速くなったり、 メモリの消費量が少なくなったりします。 バイトコンパイルの仕方 も参考にしてください。

[Q] フック(hook)とは何ですか?
[A] ライブラリを読込んだ時、 初期化する時など、特定のタイミングで呼び出したい関数を保持する変数です。 これにより、 C のプログラムで良く使われるコールバック関数と同じような働きを実現できます。

例えば、YaTeX モードになるときに特定の処理を実行したい場合は、 yatex-mode-hook を使って、次のように設定します。


(add-hook 'yatex-mode-hook
          '(lambda ()
             処理・・・
             ))

[Q] インタラクティブ関数とは何ですか?
[A] Emacs から、"M-x 関数名" で起動できる関数のことです。 インタラクティブ関数を定義する場合は、 定義の冒頭に(interactive 引数) と記述します。

[Q] ロードパス(load-path)とは何ですか?
[A] Emacs から、require, load-library 等でライブラリをロードするときに、 どのパス(ディレクトリ)から探すか指定するためのものです。 新しいライブラリをインストールした場合には、 インストール場所をロードパスに加える必要があります。

ロードパスの指定には、変数 load-path を使います。load-path は、 探すべきパスのリストです。

[Q] ロードパス(load-path)の設定方法が分かりません。
[A] 下記に示すように、いろいろな設定方法 があります。私のお勧めは 1 です。
  1. Meadow 1.10 の subdirs.el による自動登録機構を使う。 Meadow 1.10 の場合は、subdirs.el が存在するディレクトリ(例えば、 $EMACS_DIR/site_lisp)に作成したサブディレクトリは、 自動的にロードパスに登録されます。 従って、このサブディレクトリにライブラリをインストールした場合には、 ロードパスの設定は不要となります。
  2. Meadow 1.00 の subdirs.el に手動で登録する。Meadow 1.00 の場合は、 subdirs.el が存在するディレクトリに作成したサブディレクトリを、 subdirs.el に追加することで、ロードパスに登録できます。
  3. APEL の提供する add-path 関数を使う。 `~/.emacs' に
    
    (autoload 'add-path "path-util" nil t)
    と設定した後で、
    
    (add-path "登録したいパス")
    と記述する。
  4. Emacs Lisp の標準機能を使う。一つのパスを登録する場合には、 下記の設定を `~/.emacs' に追加します。
    
    (setq load-path
          (cons "登録したいパス" load-path))
    複数のパスをまとめて登録する場合は、下記の設定を `~/.emacs' に追加します。
    
    (setq load-path
          (append '("登録したいパス1"
                    "登録したいパス2"
                    "登録したいパス3")
                  load-path))

Font Lock mode

[Q] fast-lock-mode のキャッシュファイルが作成されないようです。
[A] Meadow 1.00 では、 不正なファイル名でファイルを作成しようとして失敗しているようです。 fast-lock.el を修正 する必要があります。 なお、Meadow 1.10 では、この問題は解決されています。

YaTeX

[Q] ファイル名が日本語の場合に、タイプセットでエラーになります。
[A] タイプセットコマンドに日本語ファイル名を渡せないのが原因です。 Meadow の ML (meadow-users-jp)によると、Meadow 1.00 では、 この問題は回避できないようです。消極的な解決策ですが、 日本語のファイル名を使わないようにしましょう。

[Q] yatex1.67 にバージョンを上げたら yahtml の起動にやたら時間がかかるようになりました。
[A] デフォルトの漢字コード取得のために .htaccess を探す際に、 問題が生じています。 具体的に言うと、ルートディレクトリの属性取得のための関数 (file-attributes "/") の評価に時間を要しています。

この問題が生じる場合には、 とりあえずの対策として.emacs に次の設定を追加して、 .htaccess を探索しないようにします。
(setq yahtml-server-type nil)

Semi-gnus

[Q] group バッファで既読グループを常に表示するにはどうするの?
[A] 二通りの方法があります。

一つ目は、グループごとに設定する方法です。Semi-gnus の Group バッファで、 設定したいグループ上にカーソルを移動してから、G p (gnus-group-edit-group-parameters)と入力します。 そして、編集画面で、次のように連想リスト(alist)を入力します。 入力が完了したら C-c C-c で編集画面を閉じます。


((visible . t))
二つ目は、常に表示するグループを正規表現でまとめて指定する方法です。 例えば、グループ名が、`nnml:' で始まるグループを常に表示するには、 次の設定を `~/.gnus' に加えます。

(setq gnus-permanently-visible-groups "^nnml:")

[Q] article バッファで既読メール・記事を常に表示するにはどうするの?
[A] Semi-gnus の Group バッファで、 設定したいグループ上にカーソルを移動してから、G p (gnus-group-edit-group-parameters)と入力します。そして、編集画面で、 次のように連想リスト(alist)を入力します。 入力が完了したら C-c C-c で編集画面を閉じます。

((display . all))

[Q] 新規グループを作成するには?
[A] グループバッファで、 G m (gnus-group-make-group)と入力して、新規グループを作成します。

[Q] 特定の メール・記事を mark する方法は?
[A] メール・記事の上にカーソルを置き # を入力します。

[Q] Meadow 1.00 に付属の Semi-gnus で MIME がちゃんとデコードできないのですが。
[A] Semi-gnus のバージョンを上げましょう。

[Q] Semi-gnus のバージョンアップで、message unexist とエラーが発生します。
[A] BBDB を使っている場合には、 BBDB にパッチを当てる必要があります。 鈴木さんのページを参考にしてください。

[Q] 大きなファイルを添付したメールを、分割しないで送信する方法はありますか?
[A] .emacs に次の設定を追加します。

setq mime-edit-split-message nil)