xemacsでDVCを使うメモ

Mac上でxemacsを使っているが、現時点でMacPortsでインストールされるバージョンは21.4です。このバージョンでDVCをMercurialのバックエンドとして動かそうとしたのですが、結構苦労したのでインストールメモを書いておきます。

vcのインストール

DVCパッケージは、emacsにデフォルトで含まれているvc(version control)パッケージを要求するようです。xemacsのxemacs-sumo elispパッケージがインストールされている場合は、vcも既にインストールされているのですが、バージョンが古くDVCを使っていると幾つかの関数が無い(例えば、vc-delete-logbuf-window)と怒られてしまいます。

幸い、Beta版のパッケージでは、DVCが要求する関数が存在するvcパッケージがあるので、これを取ってきて古いvcパッケージと置き換えます。

# mkdir vc
# cd vc
# wget http://ftp.xemacs.org/xemacs/beta/experimental/packages/vc-1.45-pkg.tar.gz
# tar xvfz vc-1.45-pkg.tar.gz
# rm -r /usr/local/lib/xemacs/xemacs-packages/lisp/vc
# mv lisp /usr/local/lib/xemacs/xemacs-packages/lisp/
      

mercurial.elの変更

DVCをMercurialのバックエンドとして動かした場合、vc/mercurial.elを読込むらしい。このmercurial.elはmercurial付属のelispと同じなのだけれども、オムロンから提供されているWnn7eggと相性が悪くwnn7egg-leimを読込むと、DVC側がエラーになってしまう。

調べてみると、mercurial.el内のhg-feature-condマクロが悪さをしているぽいので、マクロの内容をコメントにしてみた所うまく動作した。

mercurial.elのhg-feature-condマクロを修正
(defmacro hg-feature-cond (&rest clauses) )
;  "Test CLAUSES for feature at compile time.
;Each clause is (FEATURE BODY...)."
;  (dolist (x clauses)
;    (let ((feature (car x))
;         (body (cdr x)))
;      (when (or (eq feature t)
;               (featurep feature))
;       (return (cons 'progn body))))))
	

修正後、コンパイルして出来上がり。

# xemacs -batch -no-site-file  -f batch-byte-compile  -l mercurial.el 
# 
      

DVCのインストール

最初に、DVC: Distributed Version Control for Emacsからdvc-snapshot.tar.gzを取ってきます。

# wget http://download.gna.org/dvc/download/dvc-snapshot.tar.gz
      

次に展開して、makeします。

# cd dvc-snapshot
# autoconf
# mkdir ++build/
# cd ++build/
# ../configure --with-emacs=xemacs --prefix=/usr/local --datadir=/usr/local/lib/xemacs
# make
  (略)
Loading dired-mule...
Symbol's function definition is void: defstruct
xemacs exiting

#
      

makeを走らせると、defstruct関数が無いと怒られてしまいますので、elispの一部を修正します。

dvc-snapshot/lisp/dvc-build.elを修正
;; Add otherdirs to load-path
(mapcar '(lambda (dir)
           (when (file-exists-p dir)
             (add-to-list 'load-path dir)))
        (split-string otherdirs " "))

;(setq debug-on-error t)
(load "cl-macs") ;;追加
	  
;; The name of our package
(setq package-maint-pkg "dvc")
	

再度makeをして、完了したらインストールします。

# make 
# make install
      

xemacsはインストールしたパッケージを自動的に読込むので.emacsの編集は特に無いはずなのですが、この状態で"M-x dvc-status"コマンドを実行しリポジトリのステータスを見表示させようとすると、Symbol's function definition is void: dvc-expand-file-nameのエラーが出てしまいました。

dvc-expand-file-name関数は何処で定義されているか調べてみたところ、dvc-emacs.elに定義されていました。しかしxemacsの場合は、dvc-emacs.elファイルはインストールされずに、dvc-xemacs.elがインストールされるようです。

ダメもとで、dvc-emacs.elインストールして読込ませてみたら動きましたw

# cd dvc-snapshot/lisp
# cp dvc-emacs.el /usr/local/lib/xemacs/site-packages/lisp/dvc/
      

.emacs.elに下記の設定をします。

.emacs.elに追加
(modify-coding-system-alist 'process "hg" '(undecided . euc-jp-unix))
(setq load-path (append '("/usr/local/lib/xemacs/site-packages/lisp/dvc/") load-path))
(require 'dvc-emacs)
(require 'dvc-cmenu)

以上の設定で、動くようになりました。

emacs DVC mode
Last modified: Tue Jun 10 23:05:33 2008 JST