HOME xyzzy download 書き込む

xyzzy から aspell を使う


1. はじめに

aspell は ispell の後継のスペルチェッカーとして現在盛んに開発が進められています。 Win32 版もあり、単体でもそれなりに便利に利用できます。しかし、単体ではファイル全体のチェックしか出来ない、 一度 xyzzy から抜け出す必要があるなどの不便があります。そこで xyzzy から aspell を使うための マクロ aspell.l を書いてみました。このマクロを使うと xyzzy から直接 aspell が利用できます。 また選択した範囲だけをスペルチェックすることも出来ます。

なお、aspell.l を書く際に ispell.l を参考にさせていただきました。また、xyzzy はいつも便利に 使わせていただいています。亀井氏に感謝します。

2. 準備

2.1 aspell のインストール

aspell は、aspell.net からダウンロード出来ます。また、インストーラーがついているので 簡単にインストール出来ます。同ページから辞書もダウンロードできますので、それも忘れずに インストールしてください。英語のほかに多くの欧米言語の辞書が用意されています。

インストールが完了するとディスクトップに右図のようなアイコンが現れます。 そこに英語(またはほかの欧米語)で書かれたテキストファイル( *.tex, *.html を含む) をドロップしてみて下さい。下図のようなウインドウが開いてスペルチェック が行われれば aspell のインストールは成功です。

2.2 aspell.l のインストール

次の手順でインストールを行います。
  1. aspell.l を xyzzy/site-lisp に保存し、バイトコンパイルします。
  2. .xyzzy を編集します。
    1. インポートするシンボルに ed::aspell, ed::*aspell-command*, ed::*aspell-language* を加えます。
      (import '(ed::aspell ed::*aspell-command* ed::*aspell-language* imported1 imported1))
    2. aspell が autoload されるようにします。(autoload 'aspell "aspell" t)
    3. キーバインディングを行います。(global-set-key #\M-a 'aspell)
    4. 自分のシステムに合わせて、起動する aspell を指定します。
      (setq *aspell-command* "C:\\aspell\\bin\\aspell.exe -a")
      ここで、引数 "-a" を必ずつけて下さい。
  3. xyzzy のダンプファイルを削除して xyzzy を立ち上げます。(ダンプファイルが再作成される。)
下に .xyzzy の記述例を挙げます。

(import '(ed::aspell ed::*aspell-command* ed::*aspell-language*))
(autoload 'aspell "aspell" t)
(global-set-key #\M-a 'aspell)
(setq *aspell-command* "C:\\aspell\\bin\\aspell.exe -a")
ここでは例として、Alt-a にキーバインドしてみました。 スクリプトのインストールについての詳細は 初めてのxyzzy 赤塚氏のページ を参考にしてください。 インストールがすんだら、何か適当な英文ファイルを読み込んでテストしてみてください。 下図のような画面が現れれば成功です。 範囲を選択しないで実行するとバッファー全体が、範囲を指定すると その範囲のスペルチェックが行われます。 aspell は ispell より若干動作が遅いので、長い文書をスペルチェックするときは お茶でもしながら気長に待ちましょう。

3. aspell.l の使用法

前に述べたように、バッファーの範囲を指定して aspell.l を起動するとその範囲のみが スペルチェックされ、また、範囲を指定しないとバッファー全体がスペルチェックされます。
コマンドはミニバッファーから入力します。 aspell.l には次のコマンドがあります。
Number (N)
N 番目の選択肢を用いて現在の単語以降にある同じスペルの単語全てを置換します。
/Number (N)
"/N" と入力すると、N 番目の選択肢を用いて、現在チェックしている単語のみを置換します。
Ignore
現在チェックしている単語をスキップしてスペルチェックを継続します。
Ignore all
現在チェックしている単語と同じスペルの単語を除外してスペルチェックを継続します。
Replace
現在の単語をミニバッファから入力した単語で置き換えます。
Replace all
現在の単語以降にある全ての同じスペルの単語をミニバッファから入力した単語で置き換えます。
Add
辞書に登録します。
Add lower
その単語と、それを小文字で書いた単語を辞書に登録します。
Exit
現在まで行われたスペルチェックの結果を保持してスペルチェックを終了します。
Abort
スペルチェックを行う前の状態に戻して、スペルチェックを中断します。

なお、Replace と Replace all で、ミニバッファから単語を入力すると、その単語の スペルチェックがおこなわれ、正しければそのまま置換され、間違っていれば
"the word is not in the dictionary, use anyway? (y/n)"
とミニバッファに表示され、"y" を入力するとそのまま使い "n" だと単語を再入力します。 ミニバッファから単語を入力しないと、Replace, Replace all はそれぞれ Ignore, Ignore all と同様の動作をします。

4. 英語以外の言語のスペルチェックの方法

aspell.l を使って英語以外の欧文のスペルチェックを行うこともできます。 手順は以下の通りです。
  1. ファイルを ISO-8859-N 形式で保存します。言語と文字コードの対応は表1を見てください。
    ”ファイル → 名前を付けて保存” で、エンコーディングのリストボックスから選びます。
    xyzzy-lisp を使う場合は ESC を2回押してミニバファから
    (write-file filename nil nil encoding)
    とします。ここで encoding*encoding-iso-8859-N* (N = 1 -- 13) です。例えば、フランス語の場合は *encoding-iso-8859-1* 、 ロシア語の場合は *encoding-iso-8859-5* とします。
  2. ed::*aspell-language* に ISO-639 言語コードをセットします。 例えばフランス語の場合は (ESC を2回押して) ミニバッファから
    (setq ed::*aspell-language* "fr")
    とします。
  3. 後は、英語の場合と同様にスペルチェックをします。

表1:言語名、ISO-639 言語コード、ISO-8859-N 文字コードの対応

言語名ISO-639 言語コードISO-8859-N 文字コード
英語enISO-8859-1
フランス語frISO-8859-1
ドイツ語deISO-8859-1
スペイン語esISO-8859-1
イタリア語itISO-8859-1
オランダ語nlISO-8859-1
スウェーデン語svISO-8859-1
ノルウェー語noISO-8859-1
デンマーク語daISO-8859-1
チェコ語csISO-8859-2
ポーランド語plISO-8859-2
ポルトガル語ptISO-8859-2
ルーマニア語roISO-8859-2
スロバキア語skISO-8859-2
ロシア語ruISO-8859-5
ギリシャ語elISO-8859-7

5. カスタマイズ

下の表にユーザーが値を設定できる変数名とその初期値を示します。これらの変数は 初期値以外の値に変更することが出来ます。たとえば、.xyzzy に以下の式を追加すると、
(setq ed::*aspell-max-choices* 20)
表示される選択肢の最大値を 20 に変更することが出来ます。

表:ユーザーが変更できる変数
変数 初期値 説明
*aspell-command* "C:\\Aspell\\bin\\aspell.exe -a" 起動する aspell を指定します。注1
*aspell-option* "fast" aspell のオプションを指定します。注2
*aspell-file-type-option* '(("html" . "-H")
("tex" . "-t"))
aspell のファイルタイプごとのオプションを指定します。注2
*aspell-language* "en" スペルチェックする文章の言語を ISO 639 形式で指定します。詳細は 英語以外の言語のスペルチェックの方法 を見てください。
*aspell-spelling-error-attributes* '(:foreground 1 :underline t) スペルミスしている単語の表示方法を指定します。
*aspell-max-choices* 30 表示する選択肢の最大値を指定します。
*aspell-assigned-characters* '((#\SPC "Ignore" nil)
(#\i "Ignore all" t )
(#\r "Replace" nil)
(#\R "Replace all" t )
(#\a "Add" t )
(#\u "Add lower" t )
(#\x "EXit" nil)
(#\! "Abort" nil))
キーバインドを指定します。

たとえば、"Ignore" にドット (.) を割り当てるには、
(#\. "Ignore" nil)
とします。キーバインド(サブリストの最初の項)のみ変更可能です。
他を変えるとプログラムが動かなくなります。
また、キーに数字や Enter を割り当てることはできません。


注1:引数には必ず "-a" を付けてください。
注2:aspell のオプションについての詳しい説明は aspell に添付されているマニュアルにあります。

6. 終わりに

Ispell の開発は終了し、辞書の入手が困難になりつつあります。それに対し、aspell は現在 開発が進行中であり、辞書も用意に入手できます。従って、xyzzy から aspell を使うニーズは かなりあると思い、このスクリプトを公開します。このスクリプトが皆様のお役に立てれば幸いです。 不具合、ご要望などは
紫藤までお送りください。