Japanese only. Character encoding is ISO-2022-JP (JIS). Lynx is recomended.
Last modified: Wed Nov 25 15:01:39 JST 1998

emacs事始め

このページはmule-2.3(emacs-19.28)からemacs-20.3(mule-4.0)へ移行するときの注意点をまとめています。といってもemacs-19.34からemacs lispが大幅に変更されているため、個人の細かい設定は追求できません。分からないことはともかくdescribe-*やinfoで確認してください。また、研究室にはemacs lispの日本語infoがインストールされていますので、そちらも参考にしてください。

あなたはなぜemacs-20を使うのでしょうか? emacs-20はまだ完全にmuleではありません。terminalでは画面が乱れることもあります。しかし、emacs-20は起動が速いです。表示がきれいです。そして何よりも最新のemacs lispが利用できます。これらにメリットを感じない人は引き続きmule-2.3かmule-2.3(emacs-19.34ベース)を使うのが良いと思います。


emacs-19.*とemacs-20.*はどうやって区別すれば良いのでしょうか?

例えば
(defconst Emacs19 (eq emacs-major-version 19))
(defconst Emacs20 (eq emacs-major-version 20))
と定義しますと、
(if Emacs19 (emacs19の場合) (それ以外の場合))
とか
(cond (Emacs19 emacs19の場合)
      (Emacs20 emacs20の場合))
といったことが出来ます。


load-library等でエラーが出てしまいます。

まず、load-pathを確認してください。emacs-20とemacs-19は基本的に*.elcに互換性があるのですが、hilit等を使っているものに関しては問題が発生します。そのため、研究室ではmule-2.3とemacs-20でsite-lispを分離して管理しています。
mule-2.3  /usr/local/gnu/lib/mule/site-lisp
emacs-20  /usr/local/gnu/share/emacs/site-lisp
また、mule-2.3と違い、emacs-20は自動的にsite-lisp以下のディレクトリもload-pathへ加えてくれます。したがって、基本的にload-pathはいじる必要がないし、mule側のsite-lispをデフォルトのload-pathよりも前に加えると上記の問題が発生する場合があります。個人のディレクトリをパスに加えている場合は、byte-compileをしないでおくか、バージョン別にディレクトリを区別して*.elcを置いておくしかないでしょう。


*-coding-sytemで*euc-japan*が指定できません。

'euc-japanに変更されています。何が指定できるかは
M-x list-coding-systems
で確認してください。詳しくはinfoの(emacs)Coding Systemsをみてください。


set-display-coding-systemがなくなってしまいました。

set-terminal-coding-systemです。
(set-terminal-coding-system 'euc-japan)
とか
(set-terminal-coding-system 'iso-2022-jp)
とかしておかないと、emacs -nwで起動したときに日本語が表示されなくなります。


set-file-coding-systemがなくなってしまいました。

set-buffer-file-coding-systemです。ただし、ここに大きな変更があります。バッファの文字コードを変更したら、そのバッファはmodified状態になります。だから、CのソースはいつもEUCというつもりで
(add-hook 'c-mode-common-hook
	  '(lambda ()
	     (set-buffer-file-coding-system 'euc-japan)))
としてしまうと、ファイルを生成したときやEUC以外の文字コードのファイルであった場合に、いきなりmoifired状態になってしまいます。これを避けるには
(add-hook 'c-mode-common-hook
	  '(lambda ()
	     (setq buffer-file-coding-system 'euc-japan)))
とするか
(if Emacs20
    (modify-coding-system-alist 'file "\\.\\(c\\|cc\\|h\\)\\'"
				'(undecided . euc-japan)))
というように、file-codig-system-alistに登録しましょう。後者の例では既にファイルが存在した場合はその文字コードに従い、ファイルを生成した場合は保存する段階でcoding-systemがeuc-japanになります。詳しくはinfoの(emacs)Coding Systemsをみてください。


文字コードがEUCのファイルを読み込むと文字化けします。

文字コード判定に失敗しています。emacs-20は様々な言語をサポートしており、コード判定の優先順位を言語の指定で変更できます。基本的に日本語を使うのでしたら、
(set-language-environment 'Japanese)
とか
(set-language-environment-coding-system 'Japanese)
としましょう。詳しくはInfoの(emacs)Langage Environmentsを見てください。


-nwで起動するとタイトルバーがついてしまいます。消したいのですがどうすれば良いのでしょうか。

(menu-bar-mode nil)です。以下はinfoより
menu-bar-mode is an interactive compiled Lisp function.
(menu-bar-mode FLAG)

Toggle display of a menu bar on each frame.
This command applies to all frames that exist and frames to be
created in the future.
With a numeric argument, if the argument is positive,
turn on menu bars; otherwise, turn off menu bars.
また、Xのリソースで指定してもちゃんと-nwに反映されます。
Emacs*menuBar: off
Emacs*verticalScrollBars: off


cc-modeのc-modeでスタイルがgnuになってしまっています

emacs-19.34以降でc-modeのデフォルトスタイルがgnuに変更されました。(c-set-style "cc-mode")でmule-2.3(emacs-19.28)のデフォルトスタイルになります。


井上 敬介 / keisuke@am.ics.keio.ac.jp