Emacsの事など(NTEmacs導入記)

Counter

私の事情など

そりゃ、「素直にLinuxとかを使えばいい」っていうことはわかっている。普段使っているコマンドセットなんか最初から入っているわけだし、コマンドシェ ルもちゃんとしたものを使える。MSがわけもわからずに作った、名前だけのtelnetとかftpとかを置き換えんでもすむ。そりゃー、そうだ。

しかし「仕事の事情」というものがあるわけだ。クロス環境でコンパイルができなきゃ困るし、デバッグもリモートでできなきゃ困る。するとLinuxを開発環境にするのは、ちょっと問題がある。

というわけで、NT4.0を使っている。

Emacsから離れられない体になっているので、「Mule for Win32」を長きにわたり愛用してきた。最初の間は「なんでもEmacsでやるぞ!」とか気負って いたのだが、「W3の動作、しょぼしょぼー」とか「Mewは遅い」とか思っているうちに、「Mule = ただのエディタ」という位置付けになってきてしまった。 WebはLynxとかNetscapeで見るし、MailはWindows用の妙に良くできたBecky!と かを使ってしまっている。「Emacs者としてそれでいいのか?」という問い詰められそうだが、「だってEmacs-19ベースで現在も開発が続行されているパッ ケージなんか存在しないもの」と言い逃れることにしている。もちろん、これは嘘なんだが、「Semi-Gnusはつい最近までEmacs-19での動作を考えられていなかった」とか「edbがちゃんと動くのはEmacs-20以降」とか言われ続けた人間の気分はわかってもらえると思う(Mewなんかは未だにEmacs-19でちゃんと動 く。すごいことだと思う)

しかしまあ、何て言うかそろそろEmacs-20で行こうかなー、と思い始めた。人それぞれ必要性が違うのだろうけど、僕の場合「auto-fill」に頼り切りの生活をしていたので、Emacs-20.3の変な「auto-fill」には許し難いものがあっ たのだ。初めて使ったときに「こんなのMuleじゃねー <だからMuleじゃないんだって」という叫びがあがったのもわかる人にはわかってもらえるはずだ。 一時期の僕はと言えば、「右側に変な\マークが出るのは心理的に耐え難い」 と思い込み、づらづらと続けて書くことを頑なに拒絶していたのだ。せめてあの文字を変えられないかなー、とチャレンジしてみたことも有ったけど、どうやってもうまく行かない(これはいまでも不思議)。しかしある日、誰でも一度はやるであろう改造、と言うよりもカスタマイズをして、カーソルキーが一行ずつ上下に移動するようにしたら、人間慣れれば慣れてしまうもんで右側に変な\マークが出ていても段々と気にならなくなってきてしまった。

そうなると、もうどうでもいいやという気分になってくる。 incremental-searchが日本語でできないとかの問題はあるのだけれど、 auto-fill関連の不満の方が多かったので大体の問題はオッケーになってしまっ た。それよりもEmacs-20ベースで得られる利点の方が大きい気になってきた。

「じゃあ」と言って昔使っていた「Meadow」を使おうかなー、とも思ったのだがこちらはどうも嫌な思い出が多い。いや、非常にいい移植だと思うし、拡張も素晴らしい。人に薦められるバージョンなのだが、どうも僕的には嫌な思い出が多いのだ。まずEmacs-20自体に触ったのがこのバージョンが始めてだったので、色々と戸惑うことが多かった。しかも当時の非力なマシンではフォン トセットの切り替えだけで耐え難いくらいのスピードダウンをしてしまったのだ。これは別にMeadowのせいではない。それはわかっているのだけれど、「遅いんだったら前の方がいいや」という気になってしまい、結局長いこと「Mule for Win32」を使っている。

小関さんという方の開いて いるいつも有り難く拝見しているページがある。このページは何というか、 Emacsと楽しく遊んでいらっしゃるページで非常に面白いし役に立つ。ここに よると「NTEmacs 」というポーティング・プロジェクトがあるのだそうだ。NTでEmacs-20を動かそう、という話で一見したところでは英語Baseではあるもののきっちりした移植をしているような気がする。Emacs-19とEmacs-20の大きな違いはMule機能の内包であるので、英語Baseであることはさして問題ではない。何よりも今まで使ったことが無いバージョンだというのが心ひかれる。というわけで、 Emacs-20復帰への第一歩はこれを使うことにした。

ここまでの文章はEmacs-19 BaseのMule for Win32を使って書いた。これから先はNTEmacsを使って書いてみよう。

そういうわけで、小関さんのページをみながらinstallに挑戦してみた。これは今、まさにNTEmacsで書いている。Install自体は非常に簡単で、packageを ダウンロードしてきて、展開するのみ。後はreadme.win32に従って操作するだ けだ。これだけだとあんまりにも不親切なので、具体的な内容を記録しておこ う。

ダウンするのは?

とりあえず、どこでもいいんだろうけど、最新版があるのはやはりホームページ。ここから辿っていった先にFTP siteがあるのでここから

の3点を落とす。lispの方はいらないような気がするが、後から取りに行くく らいだったら最初から取得しておいた方が無難。leimの説明は後でする。

具体的install

次の手順を踏む。

;;========================================================================
;; 日本語だよ
(set-language-environment "Japanese")
(set-terminal-coding-system 'sjis)
(set-clipboard-coding-system 'sjis-dos)

; フォントだよ
(create-fontset-from-fontset-spec
"-*-Courier New-normal-r-*-*-12-*-*-*-c-*-fontset-null,
 japanese-jisx0208:-*-\202l\202r \203S\203V\203b\203N-normal-r-*-*-13-97-96-96-c-*-jisx0208-sjis,
  japanese-jisx0212:-*-\202l\202r \203S\203V\203b\203N-normal-r-*-*-13-97-96-96-c-*-jisx0208-sjis,
  katakana-jisx0201:-*-\202l\202r \203S\203V\203b\203N-normal-r-*-*-13-97-96-96-c-*-jisx0208-sjis,
  latin-jisx0201:-*-Courier New-normal-r-*-*-12-*-*-*-c-*-fontset-null,
  japanese-jisx0208-1978:-*-\202l\202r \203S\203V\203b\203N-normal-r-*-*-13-97-96-96-c-*-jisx0208-sjis"
t)

;; これはあくまでも僕の好み
(setq initial-frame-alist
      '((width . 80) (height .
40)
(top . 0) (left . 200)
(vertical-scroll-bars . nil)
(font . "fontset-null")
))

;; 変な行が挿入されるのはいやーん
(setq next-line-add-newlines nil)

;; mode lineに時刻を表示
(setq display-time-24hr-format t)
(display-time)

;; mode lineに行番号を表示
(line-number-mode 1)

;;========================================================================

とりあえずの日本語

日本人たるもの日本語の入力くらいはできなければ、コンピュータなんざ使う理由が無いのである。英語で書くことなどめったに無いし、文章と言えば日本語。レポートもコメントも日誌も全部日本語だ。というわけで、何よりも前に日本語が使える環境が入力できる環境を構築しなければならない(一部偏見入ってます)。

上でやった設定があれば、日本語の表示はばっちりになっているので、何らかの方法で入力可能な状態に持ち込む必要がある。ただ起動した状態で「Alt + 漢字」などを押し、入力してみても結果は空しくなるだけ。この辺りが外国直輸入の悲しいところで、やっぱり日本は東洋の田舎だと実感する瞬間だ。しか し、敵も考えているらしく「leim」というものがある。由来とか何の略なのかはよく知らない。あらかじめ取得してあるだろうleimを展開し、c:\emacsの直下に置いてしまおう。.emacsの後に次のものを追加する。

;;========================================================================
(setq load-path (cons "c:/emacs/leim/" load-path))
;; (load "leim-list.el")
;;========================================================================

とりあえずはこれで再起動。動き出したら「M-x quail-update-leim-list-file」とする。もっと具体的に言えば、「メタキー を押しながらxを押してquail-update-leim-list-fileと入力してリターン」。 「メタキーと言われてもなー」という人には「Altキー」と言ってもいい。 「そんなのないやい!」と言う人には「ESCキーを押してからxを押すんだよ」 と言ってもいい。すると何やらEmacsが怪しい動作を始めるが放っといて、終 わったようなら.emacsを書き直す。上の例なら3行目のコメントを外す。つま り、「;;」を消す。

これで再起動をすると、「Control + \」で日本語の入力ができるようなっている、はずだ。

とりあえずじゃない日本語

leimのコア部分は(日本語は)SKKを使っているらしい。SKKはそれだけでWeb1ペー ジ書けてしまうくらい素晴らしい日本語入力環境で、僕はかなり前から愛用している。最近はt-codeにシフトしつつあるのだが、まだまだ未熟なので通常の日本語打ちにはこちらを使うことが多いのだ。ざっとSKKの特徴を書いておこ う。

NTEmacsはMS-IMEの制御はできないので、システムに依存しないSKKは非常に都合がいい。leimのコアはSKKであるとはいえ、あくまでも「もどき」にすぎず、 SKKの美味しいところをバッサリ切り落しているような気がする。それよりは本家SKKをインストールすることに決定。

まずは本家サイトに行って情報を入手しよう。今のバージョンは9.6とある。実を言うと開発サイトにはもっと新しいバージョンがある。さっそく行く。現時点ではskk10.49 が最新だそうだ。そういうわけでこれを入手。ところでこのバージョンには辞書ファイルが無い。僕は前のバージョンを「Mule for Win32」で使っていたの でそこからコピーしたが、そうでない人はskk-9.6 を入手する必要があるだろう。

例によって展開してドキュメントを読みこんで行くと、最近のskkはAPEL("A Portable Emacs Library.")が必要なのだそうだ。これは他のパッケージで使用されていることも多いのでさっそく入手しよ う。今のバージョンは9.18が最新だそうだ。

必要なもののまとめ

ではインストールを始めよう。それぞれ必要な物を展開しておいて、まずは apelのディレクトリに移る。ここでmakeをしなければならないのだが、僕の場合は手元にVisualC++のnmake.exeしか無かったのでこちらを使うことにした。

nmake EMACS=c:\emacs\bin\emacs.exe

とすれば、とりあえずコンパイル済のファイルが出来上がるはずだ。これをイ ンストールするのだが、困った事にapelのmakefileはUNIX前提なのでPREFIXとかの指定がどうもよろしくないことになる。色々調べたり、試したりするのが嫌だったので、

nmake install EMACS=c:\emacs\bin\emacs.exe PREFIX=~/

として、~/share/emacs/site-lispに一旦インストールして、後は手動でコピーすることにした。makeが終わると、~/share/emacs/site-lispにemuとapelとい うディレクトリができるので、これをc:\emacs\lispにコピー。本当なら site-lispに入れるのが筋、というものだろうが、とにかく面倒なのでこうし た。これだけで満足してはいけない。c:\emacs\lisp\sbudirs.elを書 換えなければならないのだ。とりあえず下のようにすればいいだろう。

;; In load-path, after this directory should come
;; certain of its subdirectories.  Here we specify them.
(normal-top-level-add-to-load-path '("textmodes" "progmodes" "play"
"mail" "language" "international" "gnus" "emulation" "emacs-lisp"
"calendar" "emu" "apel"))

さて、これでapelの準備が整った。今度はSKK本体である。skkを展開したディ レクトリに降りてみよう。さらにlispまで降りる。ここにmake.batと いうファイルがあるはずだ。これの最初の方を次のように書換える。

set EMACS=c:\emacs\bin\emacs.exe
set PREFIX=NONE
set LISPDIR=o:\oda\share\emacs\site-lisp
set PACKAGEDIR=NONE
set V_S_LISPDIR=NONE

o:\odaとあるのは僕のホームディレクトリでさっき、apelの仮インストールに 使ったところ。ここは各自書換えが必要だろう。make.batを実行する と、~/share/emacs/site-lispにskkというディレクトリができるので、 これをさっきの要領でc:\emacs\lisp以下にコピーする。また c:\emacs\lisp\sbudirs.elを書換える。

;; In load-path, after this directory should come
;; certain of its subdirectories.  Here we specify them.
(normal-top-level-add-to-load-path '("textmodes" "progmodes" "play"
"mail" "language" "international" "gnus" "emulation" "emacs-lisp"
"calendar" "emu" "apel" "skk"))

これって本当は邪道なんだろうけど、NTとかWin95/98というのは完全に個人環境なので許されると思う。ついでに、skkのディレクトリ以下にあるidocディ レクトリから

c:\emacs\infoにコピーし、c:\emacs\info\dir

* skk: (skk.info). SKK

などと追加しておくと吉。さて大体これでオッケーなのだが、.emacs に修正を施しておかなければならない。何故か知らないけど、どうも .emacsというのはやたらと肥大化する傾向にあるような気がする。というわけで、今回は個別のパッケージ設定は別ファイルに切り出して、必要な機能の分だけをloadするようにした。.emacs本体には

(load "~/.use-skk")

だけを追加し、実際の中身(.use-skk)は次のようにした。

;;========================================================================
(global-set-key "\C-x\C-j" 'skk-mode)
(global-set-key "\C-xj" 'skk-auto-fill-mode)
(global-set-key "\C-xt" 'skk-tutorial)
(autoload 'skk-mode "skk" nil t)
(autoload 'skk-auto-fill-mode "skk" nil t)
(autoload 'skk-tutorial "skk-tut" nil t)

;;(add-hook 'isearch-mode-hook
;;   (function (lambda ()
;;       (and (boundp 'skk-mode) skk-mode
;;    (skk-isearch-mode-setup) ))))
;;(add-hook 'isearch-mode-end-hook
;;   (function (lambda ()
;;       (and (boundp 'skk-mode) skk-mode
;;    (skk-isearch-mode-cleanup)
;;    (skk-set-cursor-color-properly) ))))
(setq skk-large-jisyo "c:/emacs/SKK-JISYO.L")
;;
変換、無変換キーを使ってシフトキーの代わりをするためのキー定義
;;
こうすると、手に変な捻りが入らないのでよろしいっす
;;(defun upper-self-insert (ch)
;;  (interactive "c")
;;  (setq last-command-char (upcase ch))
;;  (skk-set-henkan-point))
;;
;;(add-hook 'skk-mode-hook
;;   (lambda()
;;     (local-set-key [convert] 'upper-self-insert)
;;     (local-set-key [noconvert] 'upper-self-insert)))
;;========================================================================

下の方でコメントアウトされている部分は親指シフトライクに変換・無変換キー を使うための改造だがNTEmacsでは動かない。他の部分はskk.infoに書いてある通りなので特には説明がいらないだろう。辞書パスは c:\emacs\SKK-JISYO.Lとしたが、もちろん他のところでも良い。ここにskk9.6とかから辞書をコピーしておくことをお忘れ無く。

これで大体一通りの設定が終りなのだが、実は僕のところではインクリメンタ ルサーチがうまく動いていない。skk-isearch-mode-setupが中身無いよ、など と言って普通のインクリメンタルサーチになってしまうのだ。まだ解決してな いが、入力はできるのでとりあえずは、よしとする。

Mail/Newsを読むっす

ここからがなんて言うか、NTEmacsのうまみの部分だろう。Semi-gnusとかW3と かEmacs-19ベースでは夢みることしかできなかったアプリケーションを動かす ことができるのだから。とりあえずはMailを読めるようにしよう。

今まで様々なMailerを使って来た。Emacs上ではrmail、c-mail、Mew、 Semi-Gnusなどを、Windows NativeではAL-Mail、電信八号、Becky!等を使って みた。どれも一長一短あり、いちがいにどれがいいとは言えないのだが、やは りEmacs上で動くものをchoiceしたい。一日の時間のほとんどをEmacsで過ごす ので、それが一番効率がいいのだ。

と言うわけで以前、Meadowを使っていたときに一番具合の良かった 「Semi-Gnus」を最新版をインストールして使うことにする。

 

Webを読むっす

W3というemacs-lispで書かれたパッケージがある。Emacsが他のエディタの追 随を許さない理由に、このパッケージの存在があげられると思う。それ程、こ れは凄いものなのだ。簡単に言ってしまえば、Emacsをテキストブラウザ化す るためのマクロパッケージなのだが、マクロでそんなことのけるエディタなん て他にあるだろうか? 秀丸とかWZとかでそのようなものを作ったなどという 話はついぞ聞いたことが無い(あったらごめん)

ただ残念なことにこれは(今や)Emacs-20専用であり、長きにわたり指をくわえ て見るしかなかったのだが、いよいよ僕も使うことができるようになったとい うことだ。

ここに最新版があ るので取ってこよう。僕の場合は、w3-4.0pre39.tar.gzが最新だったが、もし かしてもっと新しいのがあるのかもしれない。展開するとbuild.batと いうファイルがあるのでありがたく使わせてもらおう。実行すると勝手にコン パイルしてくれるので、lispディレクトリー以下をw3などと名前を変 えてコピーしておく。コピーする場所は例によって、c:\emacs\lispc:\emacs\lisp\subdirs.el"w3"を追加する。

このまま起動するとなんかおこられるので、w3を展開したディレクトリに入っ ているetc/default.cssc:\emacs\lisp\w3にコピーしておこ う。これで出来上がり。

設定に関しては、infoを見ておくといいと思うよ。texiディレクトリに入って いる

を、c:\emacs\infoにコピーして、c:\emacs\info\dir

* W3: (w3.info). W3

の一行を付け加えれば何時でも参照できる。

これで、Mail/News/Webの三種セットはエディタの中から全て参照できるよう になったわけだ。


(作成)1999/05/18 (更新)2001/01/19 (著者)小田英生

戻りましょう