Emacs modes for darcs
=====================
- `http://fresh.homeunix.net/~luke/misc/darcs-mode/ `_
- a non-VC darcs mode, simple and handy
- `http://sacha.free.net.ph/notebook/emacs/pcmpl-darcs.el `_
- Programmable completion for darcs commands in the Emacs shell
- `http://www.emacswiki.org/cgi-bin/wiki/VcDarcs `_
- vc-darcs.el, a Darcs backend for VC
- `http://www.pps.jussieu.fr/~jch/software/repos/vc-darcs/ `_
- `JuliuszChroboczek `_'s version of
vc-darcs.el, which works with recent Darcs versions, allows
browsing of older revisions, and cooperates with Tramp.
- `DarcsMode `_ - Collecting ideas for a new darcs mode
- `DarcsumMode `_ - darcs summary mode by John
Wiegley and Christian Neukirchen. This is does not use vc, but
provides an unrecorded changes browser that fits in better with
darcs. It's very useful but needs help - it sometimes fails and
leaves long-running darcs processes with large repos. ----
Use Emacs as an external merge tool for darcs
=============================================
(There's a more comprehensive example in the manual for darcs
1.0.5.)
Create the following wrapper script:
::
#!/bin/sh
#
# 3 way merge using emacs from the command line
emacs --eval="(ediff-merge-files-with-ancestor \"$1\" \"$2\" \"$3\" nil \"$4\")"
then invoke darcs pull as follows:
::
$ darcs pull --external-merge='/path/to/the/wrapper/script.sh %1 %2 %a %o'
or just put the following line into ``~/.darcs/defaults``:
::
ALL external-merge /path/to/the/wrapper/script.sh %1 %2 %a %o
--------------
Protect against accidentally editing files in \_darcs/current
=============================================================
More than once I found myself making an edit in the \_darcs/current
copy of a file; probably due to an accident with find-dired.
J.Ch's version of vc-darcs.el will automatically prevent you from
making this mistake. If for some reason you don't want to use
vc-darcs, you may use the folowing code:
Add the following to your .emacs:
::
(add-hook 'find-file-hooks 'warn-if-darcs-file)
(defun warn-if-darcs-file()
(let ((f (buffer-file-name (current-buffer))))
(and f (string-match "_darcs" f)
(if (y-or-n-p "This is a _darcs file, open the real file? ")
(jump-to-real-file-from-darcs)
(push '(:propertize "_DARCS-FILE:" face font-lock-warning-face)
mode-line-buffer-identification)))))
(defun jump-to-real-file-from-darcs()
(interactive)
(let* ((f (buffer-file-name (current-buffer)))
(match (string-match "_darcs/current" f)))
(and f match
(find-alternate-file
(concat (substring f 0 (match-beginning 0))
(substring f (match-end 0)))))))
I have included some code inspired by his in vc-darcs.el; I'd like
to credit the original author, please drop me a line. -- JCh
The above code is a nuisance when using darcsum-ediff. Also, the
warning label is lost at the end of the ediff. I prefer it as
follows. -- trb
::
; prevent accidental editing of files in darcs repository
(add-hook 'find-file-hooks 'label-darcs-file-with-warning)
;; warn against accidental writing to a _darcs file
(add-hook 'write-file-hooks 'warn-writing-darcs-file)
; affix a warning label to any _darcs file buffer
(defun label-darcs-file-with-warning()
(let ((f (buffer-file-name (current-buffer))))
(and f (string-match "_darcs" f)
(rename-buffer (concat "_DARCS-FILE:" (buffer-name)) t))))
; prevent accidental writing of files in darcs repository
(defun warn-writing-darcs-file()
(let ((f (buffer-file-name (current-buffer))))
(and f (string-match "_darcs" f)
(if (not (y-or-n-p "WARNING: YOU ARE ABOUT TO WRITE TO an _darcs file, are you sure you want to do this? "))
(keyboard-quit)))))
There is a general facility for preventing unintentional writes at
`http://www.loveshack.ukfsn.org/emacs/protect-files.el. `_
--------------
Wishlists
=========
People have created wishlists of what an "ideal" darcs mode for
emacs would require.
- `http://chneukirchen.org/repos/darcsum/perfect-darcs-mode.txt `_
(Christian Neukirchen; check out this repo for an updated version
of darcsum.el)
- Why not use DVC? Darcs will become a backend to the emacs
Distributed Version Control mode (http://wiki.gnuarch.org/xtla#DVC)
DVC people begin the darcs backend:
`https://mail.gna.org/public/xtla-el-dev/2006-03/msg00087.html `_
- I'm thinking the same. Yesterday found out about DVC and saw at
`http://download.gna.org/dvc/ `_ that
darcs back-end is not advancing nicely. Maybe the effort could be
directed towards DVC back-end. It would be nice having common DVC
interface for people that have to work with several distributed
rcs. However, I'm not (yet) familiar with darcsum.el so cannot
judge/compare its interface with DVC.