Mac上でxemacsを使っているが、現時点でMacPortsでインストールされるバージョンは21.4です。このバージョンでDVCをMercurialのバックエンドとして動かそうとしたのですが、結構苦労したのでインストールメモを書いておきます。
Mac上でxemacsを使っているが、現時点でMacPortsでインストールされるバージョンは21.4です。このバージョンでDVCをMercurialのバックエンドとして動かそうとしたのですが、結構苦労したのでインストールメモを書いておきます。
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/
DVCをMercurialのバックエンドとして動かした場合、vc/mercurial.elを読込むらしい。このmercurial.elはmercurial付属のelispと同じなのだけれども、オムロンから提供されているWnn7eggと相性が悪くwnn7egg-leimを読込むと、DVC側がエラーになってしまう。
調べてみると、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: 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の一部を修正します。
;; 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に下記の設定をします。
(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)
以上の設定で、動くようになりました。