Introduction

ブログ内検索

  • このサイトの記事を検索 by Google

おすすめの一冊!

無料ブログはココログ

« *OBSOLETED* | トップページ | *OBSOLETED* »

2005-11-03

xyzzy を使う(Ispell 導入)

山本 泰三 〔共著〕: 入門 xyzzyひさびさの更新です.
xyzzy カスタマイズ記事の第2弾は「Ispell 導入」.

Ispell は Emacs でよく使われているスペルチェッカです.
まぁ,Microsoft Word のスペルチェックみたいなものです
(精度はたぶん Word より劣ると思われますが).

Seaoak は昔から Ispell のお世話になっています.
たとえば,プログラミングの際,変数名などで使う
英単語をてきとーにチェックしたりしてます.
やっぱりスペルミスは恥ずかしいですからね
# プログラミング能力まで疑われそう…

で,入門書によると xyzzy でも簡単に使える
らしいので,とりあえず導入してみました.

1. xyzzy 用 Ispell 一式を xyzzy 作者様のページからダウンロードしてくる. 2. ダウンロードした ispell-win32.lzh を好きなディレクトリに展開する.   Seaoak は xyzzy/site-lisp/ispell/ を作って置きました.   以下では C:\Tools\xyzzy\ispell\ に展開したと仮定します. 3. 展開した ispell.ini (C:\Tools\xyzzy\ispell\bin\ispell.ini) を修正.  
    [Config]
    LibDir=C:/Tools/xyzzy/ispell/bin
  (円マークじゃなくてスラッシュを使うのがポイント!) 4. siteinit.l に次に1行を追加する.  
    (setq *ispell-command* "C:/Tools/xyzzy/ispell/bin/ispell.exe")
  (こちらも円マークじゃなくてスラッシュを使うこと) 5. 辞書ファイルを xyzzy Wiki からダウンロードしてくる. 6. ダウンロードしてきた Ispell.zip を ispell.exe と同じ場所   (この例だと C:\Tools\xyzzy\ispell\bin)に展開する. 7. siteinit.l を有効にする(再コンパイル + ダンプ再生成).
以上でとりあえず設定は完了. xyzzy で "M-x ispell-buffer" や "M-x ispell-region" とやれば使えます. さて,これで一応 Ispell は使えるようになったわけですが, Seaoak は昔から「M-$ でカーソル下の単語をチェック」を使ってました. まぁ,「英単語を入力したらその場で M-$」という使い方です. なぜかというと,バッファ全体をチェック対象にすると, プログラミング言語のキーワードとか省略語とか専門用語とかが ひっかかってしまって煩わしいからです. Seaoak の UNIX/Mule 環境は昔からデフォルトで「単語チェック」が 使えたのですが,xyzzy 版 Ispell にはこの機能はないようです. というわけで,xyzzy lisp の勉強がてら作ってみました. 以下を siteinit.l に書けば M-$ で単語チェックできます.
;; M-$ でカーソル下の単語をチェックする
(defun ispell-word ()
  (interactive)
  (let (original-point is-end-of-word is-corrected)
    (setq original-point (point))
    (setq is-end-of-word (not (looking-at "[a-zA-Z]")))
    (if (not is-end-of-word) (forward-word))
    (backward-word)
    (set-mark-command)
    (forward-word)
    (let (original-word)
      (setq original-word (buffer-substring (mark) (point)))
      (ispell-region (mark) (point))
      (let (corrected-word)
        (backward-word)
        (set-mark-command)
        (forward-word)
        (setq corrected-word (buffer-substring (mark) (point)))
        (setq is-corrected (not (string= original-word corrected-word)))
        (if is-corrected
            (message "Corrected.")
            (message (concat original-word " is OK.")))))
    (if (and is-corrected is-end-of-word)
        (progn
          (backward-word)
          (forward-word))
        (goto-char original-point))))

(global-set-key #\M-\$ 'ispell-word)
まぁ,妙なところがあるかもしれませんが,お見逃しください. アドバイスいただけたら幸いです. とりあえず,Ispell の話はここまで.

« *OBSOLETED* | トップページ | *OBSOLETED* »