org-davep-dictrepl is a Common Lisp application that provides a simple repl for talking to a dict server.
You can download the latest version from http://www.davep.org/lisp/#org-davep-dictrepl.
prepl is a REPL implementation, also known as a Lisp listener.It is written in fully portable Common Lisp (aside from minor
workarounds for implementation-specific issues...), with major
unportable bits being handled by external portability libraries.
Downloadgit clone git://gitorious.org/prepl/prepl.gitHistoryprepl is a fork of SBCL's sb-aclrepl module.Since then, it has been ported to Clozure CL and other Lisps.Debugging capabilities have been added.Overall, PREPL does not have Allegro compatibility as a goal, although it
still largely keeps its interface.
(asdf:operate 'asdf:load-op 'prepl)
See alsoThe Qt version of Hemlock uses PREPL in its Slave buffers.
Ease common tasks at the REPL.
A framework to build readline applications out of existing code.
Jonathan Amsterdam's iterator/gatherer/accumulator facility
A simple regression testing framework
Portable Unicode Library
SLIME is the Superior Lisp Interaction Mode for Emacs. This is an ILISP-like development environment intended for maximum integration with CMUCL (also works with SBCL, OpenMCL and work is ongoing on Lispworks and current CVS version of CLISP and CLISP 2.32 on Linux; there is also support packaged separately for Scheme48, called SLIME48).SLIME is now stable and released. Please download the latest version from its home page. Documentation is included there.
NOTE: slime-2.0 is too old for use with current versions of SBCL. Fetch slime from CVS.Want to try SLIME? Check out the SLIME-HOWTO or read about the SLIME Features. You can also check out some SLIME Tips.Users are invited to post feature suggestions on this page.
Ability to pin certain things (arglist info, debugger, repl) into dedicated frames for nice multi-window operation -- Zach
Make the slime faces inherit from the standard font-lock faces when appropriate (eg making the REPL output face inherit from font-lock-comment-face) -- Brian
Note: Although it is possible to connect to a Lisp on a remote machine, we haven't yet figured out what does and doesn't work without a shared filesystem. Maybe this can be made tramp-aware? -- Rahul Jain Clear *use-dedicated-output-stream* before connecting works for me so far. -- ngps
Autodetection of LINEDIT (or other random REPL wrappers) and calling LINEDIT's UNINSTALL-REPL before running SWANK. I tried to add something in slime-maybe-start-lisp in slime.el to do so, but comint-proc-query was uncooperative and kept hanging. -- James A. Crippen
Some REPL conveniences, such as ILISP's C-z P (set package).
The SLIME equivalent of the latter is
SLIME-REPL-SET-PACKAGE, anything else?
Some way to get a REPL in the current debugger frame, for more serious
playing around I second the motion. It would be very useful to keep a record
of what was evaluated and what printed, sort of like a
... read-eval-print loop! It's amazing that this crucial feature of
Lisp was discarded in the SLIME model; its absence really detracts from
Drew McDermott -- 2005-12-09.
I would also very much like this feature! -Lars Rune NÃ¸stdal
Working symbol-completion when you enter expressions in the mini-buffer
"Getting ILISP working was a nightmare. Getting SLIME working was a breeze, even though I had to check it out of CVS" (Steve Jenson, saladwithsteve.com)
If your connection to ssh forwarded swank server doesnt work, try to (setf swank::*use-dedicated-output-stream* nil)
Maybe: Visit a file "through" the lisp process: slime instructs lisp process to open the file and squirt it across connection back to an emacs buffer. When buffer is saved in emacs, squirt back to lisp process. Potentially very nice for long-lived lisp server processes (provided your slimeswank is a secure channel!), and skirts the whole path-translations thing: the only correct path is the path the lisp process uses i.e. you're not doing C-xC-f emacs-file-path, you're doing C-cC-xC-f (or something saner) CL-file-path. (obviously, you'd provide tab completion for CL-file-path, too ;-) ) See the variable `file-name-handler-alist' for how you might want to do this.
How about unified directory access! I know there are some packages out there, but it would be wonderful to have this come with slime. It would be nice to have it as a part of the development environment. It's hard for me to switch between different implementations of CL otherwise. (for example, (:cd "dir") doesn't work when using SLIME with OpenMCL...) Update: I found directory functionality by typing a comma then entering 'cd' into the minibuffer. SLIME RULES!
It would be nice if I could have fixed Emacs windows for different SLIME buffers. Like, if I evaluate something and the debugger pops up, I never know where it's going to be (I usually have several Emacs frames and windows open). I would like to say "this will be the REPL window, and I want nothing else there" -- another window for the debugger, another for Lisp code etc. - You can kind of do this with the Emacs Code Browser, if you tell it the repl is a compilation window. It provides a fixed and togglable compilation window at the bottom of the first frame.
To add a note about using the standard font-lock faces, the keywords from the appropriate mode should also be used. That is, SLIME should use the lisp-mode-font-lock-keywords-... variables. I have diffrerent ones for Common Lisp, Scheme, and Emacs Lisp, so it would be nice to have this customizable for SLIME. Or better yet, since Emacs's default keywords for Lisp are pretty ELisp-centric maybe SLIME should provide its own set of Common Lisp--centric font-lock keywords, leaving the user to decide whether to copy those for Emacs's Lisp-mode or not. -- James A CrippenSounds a good idea to me. Can you post the code you use somewhere so we can use it as a basis? -- Luke GorrieSome responses..A "Recent Changes" popup: Can you elaborate a bit? The ChangeLog file + the mailing list is supposed to fill this role, but feedback about the effectiveness would be appreciated. -- Luke GorrieIt might be nice to just add a link to the latest ChangeLog in CVS, like so
Latest ChangeLog. Stick that on the project home page. -- James A Crippen Good idea. ChangeLog and mailing lists are now linked.Re: "Recent Changes Popup": Especially with the daily ChangeLog diff on the list, this is a solved problem for me at least. I suspect that people following
the CVS, but not the list deserve to lose (like I did...). OTOH: I can imagine having a busy month, then updating SLIME, and not noticing all the new goodies. ;) So in the bells and whistles department, SLIME offering to show it's own ChangeLog since last update would be kind of neat -- but definitely not a priority.As far as using slime remotely: if you have a shared filesystem but not with identical mountpoints, the patch included in this mail provides you with a M-x slime-replace-prefix function which causes a few uses of filenames to be translated (but only in the emacs->lisp direction).The full cygwin-windows cycle is translated by these hooks, working for any cygwin mountpoint. --ReiniUrbanThere is the beginnings of MP (threading) support in SLIME CVS. See the mailing list for detailsSlime DistributionsInformation, for fetching the source distribution, is available at the Slime homepage.For fetching Slime via cvs, information is available, also, at the Slime homepage.Debian packagesSlime has got an
official Debian package.It is under the non-free section of Debian mostly because of the license of one
file (xref.lisp). So, should it stay on CLiki.net? -- alceste@NOSPAM.muvara.orgMac OS X
A fink package for Mac OS X (10.3) is also available in fink's unstable tree.Slime is available in MacPorts, current port is based on 20110419 CVS snapshot.
Yet another URI library for Common Lisp
A utility library implementing 2x2, 3x3, 4x4, and NxN matrix functionality.
A package for reading and writing archive (tar, cpio, etc.) files.
Extensible cache services for Common Lisp
A futures implementation for Common Lisp. Plugs in nicely to cl-async.
Compatible re-implementation of the BibTeX program, with a BST-to-CL compiler.
Runtime for cl-launch
A set of utilities for manipulating strings in CL.
Common lisp implementation of TextMagic API to send SMS
DO+ (doplus) is a high-level, extensible iteration construct for Common Lisp with a reasonably simple implementation, which in particular does not use a code walker.
Allows lexers to be defined using regular expressions a la cl-ppcre. A lexer will convert (or tokenize) a text string into a list of tokens (consisting of a token-class and the token's image). For example:
(defun snip (s) (subseq s 1 (1- (length s))))
(defun un-squote (s) (regex-replace-all "''" (snip s) "'"))
(defun un-dquote (s) (regex-replace-all "\"\"" (snip s) "\""))
(deflexer scan-csv (:priority-only t)
("'(?:[^']|'')*'" value un-squote)
("\"(?:[^\"]|\"\")*\"" value un-dquote)
See the distribution for a more complete example.See the project page.
evol - entrenched virtues of lisp / love reversed. Multi-purpose build system.
Exscribe is a CL-based document authoring tool in the spirit of Manuel Serrano's Scribe.Current Exscribe features (as of version 0.94.2) include: output to HTML or PDF, good support for HTML footnotes (endnotes only on PDF backend), ok support for table-of-contents and bibliography, and most importantly, programmability.
All that in a way largely compatible with Manuel Serrano's Scribe (given a published abstraction layer).
These feature are few, but useful enough so that I (Fare Rideau) use Exscribe for all the pages I write.Currently missing (intended future) features include: a better cl-typesetting backend (work in progress), Markdown/ReST/TeX syntax in addition/complement/combination with the Scribble syntax, cl-bibtex bridge, graphics, boxes, orphans, styles, etc.Unlike most other document authoring systems, Exscribe is programmable: I casually compute content on-the-fly within documents.
However, unlike the only widespread programmable document authoring system,
namely (La)TeX, it's programmable in a decent language, namely Lisp.Exscribe is directly inspired by Manuel Serrano's Scribe, and largely compatible with it. Actually, I use Exscribe as a drop-in replacement for Scribe, within the strictures of my programming style: with a small abstraction layer, my Scribe files run with both Scribe and Exscribe, with similar output as seen with a web browser (the output of Exscribe is actually cleaner).I use Exscribe with Scribble syntax, but it is trivial to translate from your usual SEXP syntax, and there is a builtin mechanism to allow for arbitrary text filters (so you could embed a Markdown syntax within Exscribe documents).I used to use Scribe, but Scribe was discontinued in favor of the slightly incompatible Skribe. Instead of learning Skribe and migrating my documents to it, and continue to cope with a few small limitations that really annoyed me, I opted to reimplement myself a variant of Scribe. The result is Exscribe. In many ways, it's a quick and dirty hack, thrown together in a few tens of hours of intensive work. But I like the architecture of it, and though it doesn't do much, it does just what I need for the time being, and it does it exactly the way I want. When it fails, I have noone to blame but myself. All my new web pages are written with it.Exscribe currently mainly targets HTML and so currently is mainly a web authoring tool, and it can also be used as a Lisp Markup Languages. But a CL-typesetting backend is already available, and will hopefully match and surpass the HTML backend Real Soon Now(tm).At the time being, Exscribe is definitely not for non-hacker users: error checking and reporting is minimal, and documentation is almost absent. However, in its current state it is already fit for use by developers, and I'm open to collaboration to develop it. The Scribe documentation should be mostly valid, and an example that uses most of the capabilities present in Exscribe is here:
Bitrot has made it impossible to get the native code Scribe running anymore (one probably could if willing to invest some substantial effort in either retrocomputing or porting). However, the unstable and slow JVM version of Scribe can still be run. Exscribe on CMUCL or SBCL compiles my documents much faster (performance is less good with other implementations, but always better than the JVM Scribe on my documents).Exscribe depends on other packages: meta, fare-utils, fare-matcher, scribble and cl-launch. You will need cl-launch to run it from the unix command-line. The PDF backend uses cl-typesetting. You can also compile Exscribe with XCVB.Exscribe source code is at:
http://common-lisp.net/gitweb?p=users/frideau/exscribe.gitNote that the referred Scribe does not really have anything to do with the already established language Scribe from the early 1980's. That is why Manuel Serrano renamed it to Skribe in its new (slightly incompatible) incarnation. Though there were implementations of the old Scribe in Lisp, it didn't have a Lisp-related syntax. See Brian Reid, "Scribe: A Document Specification Language and its Compiler", Technical Report CMU-CS-81-100, 1981.document format
A module for encoding and decoding HTML/XML/SGML entities.
A library to allow jQuery-like HTML/DOM manipulation.
A convenience library containing a motley collection of macros and other extensions.Misc-Extensions is intended as a catchall for small, general-purpose extensions to Common Lisp, typically macros. It is in the public domain. It currently contains the following:
A replacement for
let that makes it much easier to write CL in a functional style making heavy use of multiple values. It generalizes the semantics of let, let*, and multiple-value-bind. For example:
(let ((a b c (foo x))
((d (bar a b))
(e (baz b c)))
This binds a, b, and c to the three values of (foo x), and, in parallel, binds f to the value of (zot); then it binds d and e. The nesting level indicates scoping, so the values of a, b, and c are in scope for the clauses binding d and e, but not for the clause binding f. All these bindings are in scope for the body.
A replacement for cond that deals with the occasional situation where one wants to refer to a value in the body of a cond clause that was computed in the predicate. If the car of the predicate is the symbol let, then the scope of the bindings established by that let is extended to include the entire clause. Example:
(cond ((let ((x y (foo q)))
Yet another iteration macro called GMap, which generalizes mapcar by providing an extensible set of sequence generators and allowing an arbitrary function to combine the results. GMap is in much the same spirit as Dick Waters' Series package; it provides much of the useful functionality of Series, but with a far simpler implementation. Some examples:
* (gmap :list #'+ (:list '(1 2 3)) (:index 10 nil))
(11 13 15)
* (gmap :string #'code-char (:index #x40 #x45))
* (gmap (:values :list :vector) (lambda (x y) (values (+ x y) (* x y)))
(:vector #(0 12 42 17)) (:index 6 nil))
(6 19 50 26)
#(0 84 336 153)
* (gmap :alist nil (:plist '(a 1 b 2 c 3)))
((A . 1) (B . 2) (C . 3))
* (gmap :plist nil (:alist '((x . 0) (y . 1) (z . 2))))
(X 0 Y 1 Z 2)
See the the common-lisp.net project page.
Portable MT19937 Mersenne Twister random number generator
org-davep-dict is a Common Lisp networking protocol library for talking to a dict server. See www.dict.org. You can download the latest version from http://www.davep.org/lisp/#org-davep-dict. As a bit of test
code you can try org-davep-dictrepl. If you're into McCLIM then
org-davep-cldict might interest you too.
Intercept the reader to replace CL syntax with your own
rfc2109 (aka cookies1) is a package for dealing with cookies in an RFC-compliant way. This is often needed with Web programming.It is BSD licensed.DARCS repository:
http://www.common-lisp.net/project/rfc2109/rfc2109/Browse the DARCS repository:
(cookie1:cookie-string "mycookie" "42" :max-age (* 6 24 60 60))
(cookie1:parse-cookies "thisis=\"an old netscape cookie\"")
(cookie1:parse-cookies "$Version=1;thisis=\"An RFC 2109-style cookie\";domain=\"fake.domain.name\"")
An araneida example is here:It parses old netscape cookies as well as RFC 2109 cookies.- Alan ShieldsThe function cookie-string in this package does not accept a value of zero, even though RFC2109 says it should. Is this a bug or a feature?After receiving no reply from Alan, I'm putting up a separate darcs repo that adds two things to the official one:
Allow zero max-age to allow expiring a cookie.
Add Netscape's "Expires" attribute which some browsers require for
setting a persistent cookie.
Support parsing cookie values that contain equals signs ('='). Though against the spec, these exist in the wild, used in e.g. Google AdSense/Analytics.
There are no other changes. Ideally these changes would be merged to the main tree.Sasha Kovar
Nondeterministic programming and constraint propagation.
Fast algorithms for simple random sampling from sets,
A small Ajax framework for hunchentoot using parenscript
NON-optimized pattern matcher compatible with OPTIMA, with extensible optimizer interface and clean codebase
Universal Foreign Function Library for Common Lisp
URL-REWRITE programmatically rewrites (X)HTML documents such that certain attributes values are replaced by others. It was originally written to rewrite URLs for cookie-less session handling.This one's by Edi Weitz and can be found at http://weitz.de/url-rewrite/.