Version Control for Lispworks

Version Control for Lispworks is set of commands for those wanting to perform version control operations from their Lispworks editor.


Version Control for Lispworks can be downloaded from


Extract the vc directory to an appropriate place on your machine and compile the vc asdf system from vc.asd. Then in your .Lispworks add:

(asdf:oos 'asdf:load-op :vc)

Note: At present the current version is only implemented for MS Windows and the darcs backend. Information about adding other backends and porting to other platforms is given below.

A darcs executable for MS Windows is included in the distribution and things should just work. However, you will probably want to add the location of darcs.exe to your path.

One prerequisite for using the darcs backend is that you have to cd to your source directory and issue the command darcs initialize from your DOS shell or cygwin shell to initialize it as a darcs repository. You can then use the "VC Register" command on your files from Lispworks. For more details about using darcs, see the manual. You will also need a diff command in you path for the "vc Diff" command to work (having cygwin installed takes care of this).

If you run into hurdles with installation, please let me know at and I'll note them here or try to get them ironed out.

Key Bindings

C-x v =
vc Diff - shows the diff output between the file in the current buffer and the last checked in version. With a prefix argument the command prompts for the versions to diff.
C-x v u
vc Revert - reverts the buffer to the last checked in version of file, discarding any changes.
C-x v s
vc Create Snapshot - prompts for a snapshot name and creates a snapshot of all files in the directory of the file in the current buffer.
C-x v r
vc Retrieve Snapshot - prompts for a snapshot name and output directory and retrieves all files from that snapshot version to the output directory.
C-x v l
vc Print Log - prints changelog information to a temporary buffer for the file in the current buffer.
C-x v i
vc Register - places the file in the current buffer under version control.
C-x v g
vc Annotate - prints an annotation of the file in the current buffer to a temporary buffer.
C-x v a
vc Update ChangeLog - replaces or creates the file ChangeLog found in the same directory as the file in the current buffer with a file that contains all change log entries for the files in that directory.
C-x C-q
vc Toggle Read Only - begins to check in the file in the current buffer, asking for a version name, and creating a log edit buffer for entering a comment.
C-c C-c
Finish Log Entry (in Logedit mode) - checks in file with comment entered into Logedit buffer.

Adding Backends

The source file port.lisp contains all functions that are platform or implementation specific.

There are two levels of abstraction in the vc system for adding backends. The lower level is the vc-system protocol. All of the generic functions for this protocol are defined in vc-system.lisp, and a new back end will implement all or most of these functions (depending on feature compatibility). Calling the function use-backend with a class name of a vc-system instantiates that system and adds it to the list of *vc-systems*.Every editor command iterates over the list of *vc-systems* until it reaches one that is responsible for the current file.

The editor commands in lw-commands.lisp are the second level of abstraction. One hopes that after implementing the vc-system protocol the editor commands will just work. However, if there are some input peculiarities that aren't handled by the default implementation of the editor commands, they all call out to methods on the class vc-system. These lw-cmd- methods can be specialized or combined to handle special input needs.