When confronted with a Microsoft Windows environment that I need to productively produce code in, the first thing I do is install the cygwin package to get to a minimal UNIX-like environment. Unlike many Windows enhancements, the installation of cygwin does not require Administrator privileges so it is possible even in a somewhat restricted corporate environment. cygwin provides a UNIX compatibility layer that has enabled the porting of many standard GNU utilities to run under Windows, including an X11 server.
One of the first packages that I install for use under cygwin is the Emacs X11 package, which provides The One True editor with a lot of tools that make simple programmatic tasks easy, and the construction of complicated system possible. Historically there have been other efforts to bring Emacs to Windows such as NTEmacs, but now that GNU Emacs 23.1 runs fine in an X11 server with cygwin, I think the ease by which cygwin installs and updates outweighs putative advantages of Windows-specific Emacs ports. In truth, over time, GNU Emacs has absorbed most of the useful features pioneered by other, more native, versions.
People have reported that they have been able to get SLIME working with Emacs under Windows, but I never had much success, maybe because cygwin imposes a UNIX-like pathname structure that are naturally quite different from Windows pathnames. Not only is the '\' <--> '/' convention switch, Windows drive letters (like 'C:') are mapped to mounts unto the UNIX-like root filesystem, so 'C:\' becomes '/cygdrive/c'. Since ABCL under Windows runs on the JVM it expects to be dealing with Windows pathnames, it never worked for me. Until today. Or rather, yesterday. So, without further ado about pathnames, here's …
HOWTO install SLIME under Windows for ABCL
0. Install cygwin, selecting the 'emacs-x11' and 'cvs' packages in the interactive chooser.
1. Make a directory called 'c:\work' to contain ABCL and SLIME. You can of course use whatever directory you wish here, but the adjust the rest of these instructions to whatever you choose. Under cygwin, this directory will appear as '/cygdrive/c/work'.
2. Install ABCL under 'c:\work\abcl', so that 'c:\work\abcl\abcl.bat' invokes ABCL.
3. Use CVS to retrieve a copy of SLIME HEAD later than 2010-05-05. SLIME doesn't do releases which put me off for a bit at first, so even though there is a slime-2.0 floating around somewhere, it's ancient by this time, and a release process probably won't be repeated by the SLIME community in the foreseeable future.
From the bash prompt you installed in step 0, from the /cygdrive/c/work directory issue the following command:
cmd$ cvs -d :pserver:anonymous:anonymous@common-lisp.net:/project/slime/cvsroot checkout slimeThis will checkout a copy of SLIME including documentation. Alternatively one may download a CVS snapshot but then it will be harder to update SLIME later if you wish.
4. Use Emacs to edit '~/.emacs' to contain the following code
;;; .emacs for SLIME working with cygwin emacsThis code sets up SLIME to be autoloaded by Emacs, using the 'cygpath.exe' to translate pathnames between the cygwin UNIX conventions (which Emacs expects), and the native conventions (which ABCL running on the JVM expects).
(add-to-list 'load-path "/cygdrive/c/work/slime")
(setq slime-lisp-implementations
'((abcl ("/cygdrive/c/work/abcl/abcl.bat"))))
(require 'slime)
(slime-setup '(slime-repl slime-asdf slime-fancy slime-banner))
(defun slime-to-lisp-translation (filename)
(replace-regexp-in-string
"\n" "" (shell-command-to-string
(format "cygpath.exe --windows %s" filename))))
(defun lisp-to-slime-translation (filename)
(replace-regexp-in-string
"\n" "" (shell-command-to-string
(format "cygpath.exe --unix %s filename"))))
(setq slime-to-lisp-filename-function #'slime-to-lisp-translation)
(setq lisp-to-slime-filename-function #'lisp-to-slime-translation)
5. Upon evaluating the elisp code which you just used to configure SLIME (which can be affected by restarting Emacs), SLIME can be invoked via "M-x slime". ABCL will be invoked as a separate process, it will compile the elisp server known as swank that communicates between Emacs and the inferior Lisp process, it will load that code to initiate a connection, you'll see some "flying letters" coalesce into a REPL with a message in the mini-buffer welcoming you to SLIME
Happy hacking!
Hey I've been trying for weeks to get cygwin and emacs working smoothly, much less slime. I have a 64-bit machine running Windows 7. I was about to give up.
ReplyDeleteIf you have things running - all the shell-mode, dired, gdb, etc. stuff - on cygwin/emacs can you post everything you did?
Running Windows 7 64 bit under VirtualBox to test ABCL seems to work pretty well. The default X11 path is missing '/usr/bin' if one directly tries the menu Cygwin X >> Editors >> Emacs, so I bring up an Xterm, then launch Emacs from that.
ReplyDeleteFor shell-mode, try adding to "~/.emacs" to get Bash:
(setq explicit-shell-file-name "/usr/bin/bash")
Dired works for me without issues.
gdb I haven't tried.
Thank you VERY much for the cygwin path conversion code. Working with Clojure and it saved me HOURS. Thank you thank you thank you.
ReplyDeleteYes indeed. It made the trick. Thanks
ReplyDeleteThis comment has been removed by the author.
ReplyDeleteFor those having problems with "Doing vfork: resource temporarily unavailable" please look at the following thread:
ReplyDeletehttp://blog.cottee.org/2008/05/cygwin-emacs-problems.html
The SLIME update of 2011-12-24 broke this method.
ReplyDeleteI have fixed the code placing the new version at http://slack.net/~evenson/abcl/slime-cygwin.el.
The contents of http://slack.net/~evenson/abcl/slime-under-cygwin.html will now resolve to the canonical location of the latest information on getting Cygwin to work under ABCL.