(home)

Tips on cygwin

このページには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

次の処理を行います。

  1. Fixesに書かれたファイルの更新(log-edit.elの更新と修正した tamagoをインストールします)
  2. ck,cocotの/binへのインストール
  3. ホームディレクトリの.emacs.el,.Xdefaultsの置き換え(元のファイルが あれば,日付を付けた名前でバックアップします)
  4. cyg-emacsclientの/binへのインストールと「送る」メニューの設定
  5. ショートカットck.lnkとemacs.lnkをデスクトップに生成

cyg-update

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の修正,インストールを行っています。

ck

cygwinのemacsの表示は,ターミナルエミュレータ上とX上のものが考えられま す。前者の場合は,Ishiiさんの素晴らしいターミナルエミュレータ ck がお勧めです。私は次のような設定で,主にck上でemacsを使っています。

_Xdefaults
ckのリソースの設定です。ホームディレクトリに.Xdefaultsとして置きま す。色の設定をX上のemacsのそれに似るようにしてあります。
ck.exe --title Emacs -e bash --login -c 'exec emacs'
このような内容でショートカットを作っておくと,ck上のemacsを直接,起動 することができます。
gnu.ico
emacsに添付されているgnu.xpmから変換したアイコンです。私は,これを上 記のショートカットのアイコンに設定しています。

cocot

emacsとは関係ありませんが,ckを使ってリモートログインする際,とても便利 なのが,Iwamuroさんの cocot です。

cocot ssh somehost.somedomain

のようにLinuxなどにログインすると,ローカルとリモートの間の文字コードの 変換をしてくれるので,ターミナルエミュレータの文字コードを切り替えずに 済みます。

X

Xの上で使う場合,適切に設定しておけば,Windowsのフォントを使ったり,ク リップボードとのやり取りができます。 Cygwin + X + 日本語アプリケーション にあるファイルを導入すると,ほぼそのようになります。どのような設定なの かは,.XresourcesのEmacsに関連した箇所,また.xserverrcの内容を参照して ください。

仮名漢字変換もimeproxy経由でWindowsのIMEを利用できますが,そのフロント エンドにkinput2を使うかtamagoなどを使うかで,さらに選択肢があります。私 はtamagoを導入しています。なお,cygwinの問題ではないのですが,tamagoに ついては,後述の修正が必要です。

Clipboard

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"))))))

cyg-emacsclient

cygwinのemacsでは,ファイルをドラッグ&ドロップで開くようなことができま せんが,emacsclientというコマンドで稼動中のemacsにファイルを開かせるこ とができます。これをExplorer上の右クリックの「送る」メニューから使える ようにするラッパーが cyg-emacsclient です。これをインストールすると,「送る」メニューにEmacsという項目が追 加されて,ファイルを開かせることができるようになります。

.emacs.el

_emacs.el
.emacs.elのサンプルです。上記のクリップボードやemacsclient関連の設定 をしてあります。ホームディレクトリに.emacs.elとして置きます。

Fixes

diredを除き,多くはemacs 21.3.50の問題ですが,次のような修正が必要です。

dired

emacsのdiredモードではdfを使ってディスクのフリースペースのチェックが行 われますが,cygwinの場合,不幸なことに毎回フロッピーディスクドライブを チェックしようとして止まります。普通に使っているときにdfの情報は要らな いので,.emacs.elで次のように設定し,dfを使わないようにします。

(setq directory-free-space-program nil)

log-edit.el

/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))))

egg.el

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 を参照してください。

更新情報

Author

中丸 幸治