このページにはcygwinのtips,特にcygwinのemacsについての情報を記載してい ます。Windows上でemacsというと,一般にはMeadow,NT Emacs,あるいは coLinux上のemacsを使っている方が多いと思いますが,今日ではcygwinの emacsも十分に安定しています。
cygwinのemacsは,ファイルのパーミッションなどを含め,当然ながらcygwinと の相性がよいので,Meadowなどに比べて,より「普通の」emacsとして使うこと ができます。私も以前はMeadowを使っていたのですが,しばらくMeadowのアッ プデートがなかった時期に移行して以来,そのままcygwinのemacs (21.3.50)を 使っています。
なお,後述の各項目のうち,主なものは cyg-addon.tgz にまとめてあります。これを取ってきて次のようにすると,
$ tar xzf cyg-addon.tgz $ cd cyg-addon $ ./install.sh
次の処理を行います。
cygwinのemacsの現在(2005/5/8)のデフォルトは21.2ですが,私は21.3.50を入 れて使っています。以下の記述は21.2でも大体通用しますが,試してはいない ので注意してください。21.3.50だとMule-UCSほど完全ではありませんが,軽い utf-translate-cjk-modeが使え,(utf-translate-cjk-mode 1)を.emacs.elに加 えるだけで,utf-8を扱えるようになります。
ちなみに,私は複数のマシンにインストールするため,適当なミラーサイトか らローカルにcygwinをダウンロードし,そこからインストールを行うようにし ています。その際,emacsのバージョンを設定してやらないといけないのです が,ダウンロードも含めてこうした作業を毎回やるのは面倒です。そこで, cyg-update を使って,ダウンロード,setup.iniの修正,インストールを行っています。
cygwinのemacsの表示は,ターミナルエミュレータ上とX上のものが考えられま す。前者の場合は,Ishiiさんの素晴らしいターミナルエミュレータ ck がお勧めです。私は次のような設定で,主にck上でemacsを使っています。
emacsとは関係ありませんが,ckを使ってリモートログインする際,とても便利 なのが,Iwamuroさんの cocot です。
cocot ssh somehost.somedomain
のようにLinuxなどにログインすると,ローカルとリモートの間の文字コードの 変換をしてくれるので,ターミナルエミュレータの文字コードを切り替えずに 済みます。
Xの上で使う場合,適切に設定しておけば,Windowsのフォントを使ったり,ク リップボードとのやり取りができます。 Cygwin + X + 日本語アプリケーション にあるファイルを導入すると,ほぼそのようになります。どのような設定なの かは,.XresourcesのEmacsに関連した箇所,また.xserverrcの内容を参照して ください。
仮名漢字変換もimeproxy経由でWindowsのIMEを利用できますが,そのフロント エンドにkinput2を使うかtamagoなどを使うかで,さらに選択肢があります。私 はtamagoを導入しています。なお,cygwinの問題ではないのですが,tamagoに ついては,後述の修正が必要です。
Xで使う分には,通常のkill-regionやyank (カット&ペースト)がそのまま Windowsのクリップボードへの操作になりますが,ckなどで使う場合はそうは なりません。私は次のような設定を.emacs.elに加えて,必要なときだけ Windowsのクリップボードとのやり取りをしています(C-cwでコピー,C-cyで ペーストです)。
(global-set-key "\C-cw" 'cb-copy) (global-set-key "\C-cy" 'cb-paste) (defun cb-copy () (interactive) (let ((coding-system-for-write 'shift_jis-dos)) (shell-command-on-region (region-beginning) (region-end) "cat > /dev/clipboard" nil nil nil)) (message "")) (defun cb-paste () (interactive) (let ((coding-system-for-read 'shift_jis-dos)) (goto-char (+ (point) (cadr (insert-file-contents "/dev/clipboard"))))))
cygwinのemacsでは,ファイルをドラッグ&ドロップで開くようなことができま せんが,emacsclientというコマンドで稼動中のemacsにファイルを開かせるこ とができます。これをExplorer上の右クリックの「送る」メニューから使える ようにするラッパーが cyg-emacsclient です。これをインストールすると,「送る」メニューにEmacsという項目が追 加されて,ファイルを開かせることができるようになります。
diredを除き,多くはemacs 21.3.50の問題ですが,次のような修正が必要です。
emacsのdiredモードではdfを使ってディスクのフリースペースのチェックが行 われますが,cygwinの場合,不幸なことに毎回フロッピーディスクドライブを チェックしようとして止まります。普通に使っているときにdfの情報は要らな いので,.emacs.elで次のように設定し,dfを使わないようにします。
(setq directory-free-space-program nil)
/usr/share/emacs/21.3.50/lisp/log-edit.elの次のdefvarのタイポがありま す。
--- /usr/share/emacs/21.3.50/lisp/log-edit.el.orig 2004-03-18 12:21:58.000000000 +0900 +++ /usr/share/emacs/21.3.50/lisp/log-edit.el 2005-05-04 19:14:04.953125000 +0900 @@ -299,7 +299,7 @@ ;;; Actual code ;;; -(defar log-edit-font-lock-keywords +(defvar log-edit-font-lock-keywords '(("\\`\\(Summary:\\)\\(.*\\)" (1 font-lock-keyword-face) (2 font-lock-function-name-face))))
tamago (tamago-4.0.6.tar.bz2にcanna-20010107.diff.gzを加えたもの)を導入 すると,"error Selecting deleted buffer"というエラーが出ることがありま す。アドホックな修正ですが,次のように egg-activate-keymap-after-commandを書き換えることで,エラーを避けるこ とができます。
--- tamago-4.0.6/egg.el.orig2 2005-02-25 15:13:19.453125000 +0900 +++ tamago-4.0.6/egg.el 2005-02-25 15:09:44.468750000 +0900 @@ -115,9 +115,11 @@ (defun egg-activate-keymap-after-command () (while egg-change-major-mode-buffer (save-excursion - (set-buffer (car egg-change-major-mode-buffer)) - (egg-activate-keymap) - (setq egg-change-major-mode-buffer (cdr egg-change-major-mode-buffer)))) + (if (buffer-live-p (car egg-change-major-mode-buffer)) + (progn + (set-buffer (car egg-change-major-mode-buffer)) + (egg-activate-keymap)))) + (setq egg-change-major-mode-buffer (cdr egg-change-major-mode-buffer))) (remove-hook 'post-command-hook 'egg-activate-keymap-after-command)) (defun egg-change-major-mode-func ()
tamagoの問題というのは,Matsuiさんのサイトで知って,上記のパッチを作り ました。詳しくはMatsuiさんの error Selecting deleted buffer を参照してください。
中丸 幸治