Homepage: http://www.neilvandyke.org/quack
Updated:
Enhanced support for editing and running Scheme code
INTRODUCTION:
Quack enhances Emacs support for Scheme programming.
Install Quack rather than following non-Quack-based tutorials on how to
set up Emacs for Scheme.
The name "Quack" was a play on "DrScheme".
Quack is dedicated to Yosh, naturally.
COMPATIBILITY:
GNU Emacs 23 and 22 -- Yes. Quack is now developed under GNU Emacs 23
on a GNU/Linux system, which is the preferred platform for Quacksmokers.
Quack should work under GNU Emacs 23 on any Un*x-like OS. Reportedly,
Quack also works with GNU Emacs 22 on Apple Mac OS X and Microsoft
Windows (NT, 2000, XP), but the author has no means of testing on those
platforms.
GNU Emacs 21 -- Probably, but no longer tested.
GNU Emacs 20 -- Probably mostly. When last tested. Some of the menus do
not work properly, due to a bug in easymenu.el (which the FSF will not
fix, since they no longer support Emacs 20). Nested block comments are
not fontified correctly. Pretty-lambda does not work. Quack runs less
efficiently in 20 than 21, due to the lack of standard hash tables.
XEmacs 21 -- Probably mostly, but no longer tested. Block comment
fontification is not yet supported under XEmacs 21, due to what appears
to be a bug in 21.4 font-lock. Pretty-lambda does not work. XEmacs
Quacksmokers who always want the latest and greatest Quack should
consider GNU Emacs 21 -- Quack treats XEmacs like a high-maintenance
redheaded stepchild.
INSTALLATION:
To install, put this file (`quack.el') somewhere in your Emacs load
path, and add the following line to your `.emacs' file:
(require 'quack)
If you don't know what your Emacs load path is, try invoking the command
"C-h v load-path RET" or consulting the Emacs manual.
Note to advanced Emacsers: Byte-compiled `quack.elc' files generally are
*not* portable between Emacs implementations, nor between different
versions of the same implementation.
You will also need the GNU `wget' program, which Quack uses for
downloading SRFI indexes. This popular program is included in most
GNU/Linux distributions and is available for most other platforms.
Note to PLT Scheme users: If you do not already have the PLT manuals
installed, they can be downloaded from
`http://download.plt-scheme.org/doc/' and installed in your PLT `doc'
collection. If Quack is not finding installed PLT manuals, then be sure
that the `quack-pltcollect-dirs' variable contains the appropriate
collection directory (if it does not, then either set the `PLTHOME'
and/or `PLTCOLLECTS' environment variables appropriately, or set
`quack-pltcollect-dirs').
KEY BINDINGS:
The key bindings that Quack adds to `scheme-mode' include:
C-c C-q m View a manual in your Web browser.
C-c C-q k View the manual documentation for a keyword
(currently only works for PLT manuals).
C-c C-q s View an SRFI.
C-c C-q r Run an inferior Scheme process.
C-c C-q f Find a file using context of point for default.
C-c C-q l Toggle `lambda' syntax of `define'-like form.
C-c C-q t Tidy the formatting of the buffer.
One additional command that does not currently have a standard binding
is `quack-dired-pltcollect', which prompts for a PLT collection name and
creates a Dired buffer on the collection's directory. (A future version
of Quack may integrate this functionality into a more generalized
documentation navigation interface.)
HISTORY:
Version 0.49 (2018-10-28):
* Removed reference to `scheme-announce' email list.
Version 0.48 (2016-04-03):
* Made fontify `#true` and `#false`.
Version 0.47 (2012-11-15):
* Added indent for `call-with-' file variants and semaphore.
* Added font and indent for `with-handlers*', `define-runtime-path',
`match-let'.
Version 0.46 (2012-06-20):
* Added indent for `letrec-values'.
* Corrected date on history for version 0.45.
Version 0.45 (2012-06-18):
* Added a bunch of indent rules for Scribble definition forms
and Racket sequence/iterator stuff, plus Overeasy `test-section'.
Version 0.44 (2012-04-11):
* Added indent and fontify for `struct', `module+', `module*'.
* Changed intent for `module' from `defun' to 2.
* Added fontify for `define-syntax-class',
`define-splicing-syntax-class', `begin-for-syntax'.
* Changed `define-struct' fontify.
Version 0.43 (2011-08-23):
* Add indent and fontify for "syntax-parse".
* Added another compile error regexp for Racket backtraces.
Version 0.42 (2011-07-30):
* Added compile error regexp for "raco".
Version 0.41 (2011-06-04)
* Added `sxml-match' to `scheme-indent-function'.
Version 0.40 (2010-12-22)
* Added indent rules for Racket `let:', `let*:', and `match'. And
a provisional rule for `define:'.
Version 0.39 (2010-10-18)
* Renamed "typed/scheme" to "typed/racket".
Version 0.38 (2010-10-14)
* Replaced old PLT Scheme programs in `quack-programs' with Racket.
* Added Racket ".rkt" and ".rktd" filename extensions.
* Added some Racket keywords for fontifying.
Version 0.37 (2009-06-29)
* Disabled highlighting of "Compilation started at" lines.
Version 0.36 (2009-05-27)
* Made `#:' ``colon keywords'' fontify in PLT-ish mode.
* Added PLT `r6rs' and `typed-scheme' languages to `quack-programs'.
Version 0.35 (2009-02-24)
* Added `interpreter-mode-alist' support, so Scheme scripts with "#!"
start in `scheme-mode'.
* Added PLT `parameterize-break'.
* Improved `compile' mode for PLT 4.x tracebacks when there is only
file, line, and column, but no additional information.
Version 0.34 (2009-02-19)
* Added fontify and indent support for PLT `define/kw', `lambda/kw',
`parameterize*'.
* Fontify Unix "#!" cookie in PLT-ish font-lock.
* Changed reference to `quack-announce' email list to
`scheme-announce'.
* Added PLT `default-load-handler' to
`quack-compilation-error-regexp-alist-additions'
* Changed some face ":height" attributes.
Version 0.33 (2008-07-31)
* Added handlers for some PLT 4.0.1 "setup-plt" messages.
Version 0.32 (2008-06-19)
* Added to `quack-programs'.
* Updated compatibility comments.
* Added indent rule for `for/fold'.
Version 0.31 (2008-05-03)
* Added `defvar' for `quack-pltish-font-lock-keywords', so that the
GNU Emacs 22.1 compiler doesn't complain about assignment to a free
variable.
* Changed banner regexp for MzScheme for v3.99.x.
* Set `dynamic-wind' `scheme-indent-function to 0, when the default
is 3. It was just taking up too much space. DrScheme's
indentation seems to be equivalent -1, so there is precedent for
something different. We generally respect Emacs indentation
convention.
* Added fontifying and indent for PLT `define-for-syntax',
`define-values-for-syntax', `quasisyntax', `quasisyntax/loc',
`syntax', `syntax/loc', `define-parameters'.
* Advise `scheme-interactively-start-process' for GNU Emacs 22.
* Removed TODO comment that mentioned using `(current-eventspace
(make-eventspace))' under `mred', as Robby Findler has indicated
that is not good advice.
Version 0.30 (2007-06-27)
* Emacs 22 compatibility change: `string-to-number' instead of
`string-to-int'. Thanks to Charles Comstock.
Version 0.29 (2006-11-12)
* Fixed `quack-bar-syntax-string', which caused vertical bar
characters to be treated as whitespace. Thanks to Eric Hanchrow
for reporting.
Version 0.28 (2005-05-14)
* Added `quack-smart-open-paren-p'.
* Changed `scheme-indent-function' for `parameterize' from `defun'
to `1'.
* In `quack-pltish-keywords-to-fontify': added `quasiquote',
`unquote', and `unquote-splicing'.
* Added ".mzschemerc" to `auto-mode-alist'.
* Added a little extra threesemi fontification for Funcelit and
similar Texinfo markup formats.
Version 0.27 (2004-12-19)
* For Gambit-C, added REPL banner fontifying, `quack-manuals' entry,
and "gsi ~~/syntax-case.scm -" `quack-programs' entry.
* Changed "[PLT]" prefix on PLT manuals to "PLT", to make it easier
to type.
* Minor changes to reflect "MIT Scheme" becoming "MIT/GNU Scheme".
Version 0.26 (2004-07-14)
* Added fontifying of a bunch of "define-"* syntax from Chicken.
Version 0.25 (2004-07-09)
* Added `define-record-type' to `quack-pltish-keywords-to-fontify'.
* Added "csi -hygienic" to `quack-programs'.
* In `quack-manuals', replaced PLT-specific `r5rs' and `t-y-scheme'
with generic ones.
* Updated URL in `quack-manuals' for 3rd ed. of `tspl'.
* `quack-view-manual' completions no longer include symbols.
* `quack-view-manual' completion default is now "R5RS".
Version 0.24 (2004-05-09)
* Made `quack-pltish-keywords-to-fontify' and
`quack-emacs-keywords-to-fontify' custom changes update
immediately. Bug reported by Taylor Campbell.
* Removed some non-syntax names from
`quack-pltish-keywords-to-fontify'.
* Documentation changes.
Version 0.23 (2003-11-11)
* `quack-local-keywords-for-remote-manuals-p' can now have the value
of the symbol `always', to work around a defect in some versions
of Microsoft Windows. Thanks to Bill Clementson.
* `quack-w3m-browse-url-other-window' no longer splits a `*w3m*'
buffer.
* Added indent and `quack-pltish-keywords-to-fontify' rules for
`c-lambda' and `c-declare'.
Version 0.22 (2003-07-03)
* `quack-newline-behavior' controls the RET key behavior in Scheme
buffers.
* In `quack-manuals', added Chez Scheme, and updated Chicken.
* Added error message navigation to `compile' for PLT `setup-plt'.
* Partial fix for Quack global menu disappearing from the main menu
bar in XEmacs. Thought it used to work, but it doesn't in XEmacs
21.4.12.
Version 0.21 (2003-05-28)
* `quack-find-file' is faster in many cases due to fix to
`quack-backward-sexp'.
* Added auto-mode-alist for `.ccl', `.stk', and `.stklos' files.
* Indent rule additions/changes for `chicken-setup' and `unit/sig'.
Version 0.20 (2003-05-04)
* Added indent and fontify for SRFI-8 "receive".
* Added indent and fontify for additional PLT syntax.
* Added `quack-fontify-threesemi-p'.
* `quack-tidy-buffer' sets `fill-prefix' to nil when running.
* Added messages to `run-scheme', if only to get rid of annoying
"Mark set" message.
* Added "mzscheme -M errortrace" to `quack-programs'.
* `quack-dired-pltcollect' prompt defaults to `mzlib'.
* "Update SRFI Index" menu item has moved to top of menu, mainly to
avoid usability issue in a particular Emacs menu implementation.
* Several code quality improvements sent by Stefan Monnier will be
in the next release.
Version 0.19 (2003-03-04)
* Commands such as `scheme-load-file' now start a Scheme process if
none is found.
* Bugfix for using `match-string-no-properties' when we meant
`quack-match-string-no-properties'. (Thanks to Noel Welsh.)
Version 0.18 (2003-05-02)
* Removed uses of `(regexp-opt LIST t)', since XEmacs21 does not
create match data. (Thanks to Garrett Mitchener for debugging.)
* Added to `quack-programs' and `quack-manuals'.
* Added pretty-case-lambda.
* Changed PLT documentation URL function.
Version 0.17 (2003-01-03)
* Pretty-lambda is supported well under GNU Emacs 21, when using PLT
Style fontification. Enable via the Options menu. (Based on
approach by Stefan Monnier; suggested by Ray Racine.)
* Various faces now have separate defaults for `light' and `dark'
backgrounds, so may now look better on dark backgrounds.
(Suggested by Eli Barzilay.)
* `quack-find-file' now respects `insert-default-directory' when
there is no default file. (Thanks to Eli Barzilay.)
* Most of the special w3m support has been moved to a separate
package, `w3mnav' (`http://www.neilvandyke.org/w3mnav/').
`quack-w3m-browse-url-other-window' has been added.
Version 0.16 (2002-12-16)
* `quack-insert-closing' now calls `blink-paren-function'. (Thanks
to Guillaume Marceau and Steve Elkins for reporting this.)
* Now uses PLT 202 manuals. Added "PLT Framework" manual.
* Added `quack-pltish-module-defn-face'.
* Added some PLTish font-lock keywords.
Version 0.15 (2002-11-21)
* "Keywords" are now fontified in PLT Style fontification mode.
* Definition names are now blue by default in PLT Style.
* Symbol literals with vertical bars are now fontified in PLT Style.
* New `quack-manuals-webjump-sites' function for people who prefer
to use the `webjump' package for invoking manuals.
* New `quack-quiet-warnings-p' option.
* New `quack-pltish-class-defn-face' face.
Version 0.14 (2002-10-18)
* Fix for `quack-view-manual' interactive prompting (thanks to Marko
Slyz for reporting this).
* `quack-emacsw3m-go-next' and `quack-emacsw3m-go-prev' now work
with GTK reference documentation (not that this has anything to do
with Scheme).
* Added SLIB to `quack-manuals'.
* Added comment about installing PLT manuals (thanks to Marko).
* We now call the canonical version of Emacs "GNU Emacs," instead of
"FSF Emacs".
Version 0.13 (2002-09-21)
* Bugfix: No longer drop SRFI index entries on the floor.
Version 0.12 (2002-09-20)
* New "View SRFI" menu. Select "Update SRFI Index" if the submenus
"Draft", "Final", and "Withdrawn" are disabled.
* Most options are now settable via "Options" menu.
* PLT collections are no longer scanned when building "View Manuals"
menu.
* "View Keyword Docs..." back on Scheme Mode menu in addition to
Quack menu.
* Various `defcustom' variables have been made to dynamically update
relevant program state when changed.
* Under GNU Emacs 20, dynamic menus still do not work -- they now
display, but do not perform the selected action. Will do more
debugging after this release.
* '[' and ']' keys work in emacs-w3m of MIT Scheme manuals.
Version 0.11 (2002-09-17)
* Menus now work under XEmacs. Also now partly broken for Emacs 20.
* New global "Quack" menu. Disable with `quack-global-menu-p'.
* New "View Manual" submenu under GNU Emacs 21 and XEmacs (GNU Emacs
20 is stuck with the old "View Manual..." menu item).
* Fix for `quack-pltcollects-alist' to include PLT `doc' collection,
which was preventing local manuals from being used.
* `quack-manuals' now includes `t-y-scheme'.
* `quack-view-in-different-browser' command that spawns alternative
Web browser from the special emacs-w3m support, bound to `B'. For
when you normally view manuals in an Emacs window, but
occasionally want to view a particular page in normal Web browser.
* More `scheme-indent-function' properties set.
* `quack-about' command.
* Fix to `quack-keyword-at-point'.
Version 0.10 (2002-09-11)
* `quack-view-srfi' now prompts with completion, including titles
for all SRFIs. The SRFI titles are fetched from the official SRFI
Web site using the GNU Wget program, and cached locally.
* `quack-view-srfi' also now defaults to the SRFI number at or near
the point.
* `quack-dir' variable specifies a directory where Quack should
store its persistent data files (e.g., cached SRFI indexes), and
defaults to "~/.quack/".
* New `quack-tidy-buffer' command. [C-c C-q t] is now bound to
this; [C-c C-q l] ("l" as in "lambda) is now the official binding
for `quack-toggle-lambda'.
* `quack-find-file' now recognizes PLT `dynamic-require' form.
* Fix to make `quack-looking-at-backward' preserve match data.
* Fix for benign bug in `quack-parent-sexp-search'.
Version 0.9 (2002-09-04)
* Quack now works under XEmacs 21, except no menus are currently
defined (that will come in a later version) and block comments
aren't fontified.
* `quack-toggle-lambda' command toggles a `define' form between
explicit and implicit `lambda' syntax.
* `quack-dired-pltcollect' feature prompts for a PLT collection name
and creates a Dired on the collection.
* `)' and `]' keys are bound to insert a closing character that
agrees with the opening character of the sexp.
* Nested `#|' comment blocks are now fontified mostly correctly
under GNU Emacs 21.
* Fix to `quack-parent-sexp-search'.
* Fix for PLT manual keywords lookup under Emacs 20.
* `quack-manuals' URLs for assorted implementation manuals now point
to canonical Web copies.
* No longer warns about PLT manual keywords file found without HTML.
* `find-file' key bindings are automatically remapped to
`quack-find-file' in Scheme buffers.
* Both PLT-style and Emacs-style fontification now work with the
`noweb-mode' package. Tested under GNU Emacs 21 with
Debian `nowebm' package version 2.10c-1.
* Added to `quack-emacsish-keywords-to-fontify'.
* Disabled fontification of named `let'.
* Renamed "collect" in PLT identifiers to "pltcollect".
* `auto-mode-alist' set more aggressively.
Version 0.8 (2002-08-25)
* PLT package file viewing mode. This is mainly used to easily
inspect a ".plt" package before installing it via DrScheme or
"setup-plt".
* No longer warns about `font-lock-keywords' when `noweb-mode'
package is installed.
Version 0.7 (2002-08-22)
* Now works on GNU Emacs 20 (though people are still encouraged to
upgrade to GNU Emacs 21 if they are able).
* `quack-manuals' now includes MIT Scheme and Chicken manuals
(currently where Debian GNU/Linux puts them).
* `quack-view-srfi' command.
* Named-`let' name is fontified like a PLTish definition name.
* `define-record' and `define-opt' fontified.
* Scheme Mode is forced in `auto-mode-alist' for ".sch" files.
* Fix to `quack-backward-sexp'.
* `quack-warning' messages get your attention.
* `quack-pltrequire-at-point-data-1' search depth limited.
Version 0.6 (2002-08-20)
* `quack-find-file' now supports multi-line PLT `require' forms.
* When `emacs-w3m' is used, the keys "[", "]", and "t" are bound to
navigate through PLT manuals like in Info mode.
* Names highlighted in PLT-style fontification of `defmacro',
`defmacro-public', `defsyntax'.
* Advised `run-scheme' no longer prompts when there is already a
running Scheme.
* "csi" (Chicken interpreter) added to `quack-programs' default.
* Forces `auto-mode-alist' for ".scm" files to `scheme-mode'
(two can play at that game, `bee-mode'!).
* To-do comments moved from the top of the file to throughout code.
Version 0.5 (2002-08-15)
* New `quack-find-file' permits quick navigation to files indicated
by a PLT Scheme `require' form under the point. Currently only
works when the "(require" string is on the same line as point.
* Improved PLT-style fontification. Most noticeable difference is
that names in many definition forms are boldfaced. See
`quack-pltish-fontify-definition-names-p' option.
* `quack-collects-alist' added.
* "~/plt/" has been removed from `quack-collect-dirs' default.
* Unnecessary syntax table settings have been removed.
* Reduced memory usage in some cases, via explicit GC calls.
Version 0.4 (2002-08-07)
* Functionality adapted from author's `giguile.el' package:
- Enhanced `run-scheme' behavior. `quack-run-mzscheme',
`quack-run-mred', and `quack-remove-run-scheme-menu-item-p'
are obsolete.
- Enhanced `switch-to-scheme' behavior.
- Options menu.
- Indent rules for a few Guile-isms.
* Inferior Scheme Mode now uses the preferred fontification method.
* Now uses the PLT-bundled version of R5RS manual, which permits
keyword searching.
* `quack-banner-face' for the MzScheme/MrEd banner in REPL buffer.
* This code includes a start on toolbars and XEmacs21 portability,
but neither feature is yet functional.
Version 0.3 (2002-08-01)
* PLT-style fontification added, except for quoted lists. Emacs-
style fontification still available; see `quack-fontify-style'.
* `emacs-w3m' package support for lightweight viewing of PLT manuals
in Emacs window. If you install the `emacs-w3m' package, then you
can change the new `quack-browse-url-browser-function' option to
use it.
* Quack menu items added to Scheme Mode menu. "Run Scheme" item
is removed by default; see `quack-remove-run-scheme-menu-item-p'.
* MrEd REPL supported with `quack-run-mred'.
* Better default for `quack-collect-dirs'.
* More `scheme-indent-function' settings.
* Bugfix for `quack-prompt-for-kwmatch-choice'.
* Bugfix for font-lock keywords getting set too early.
* Now byte-compiles without warnings/errors.
Version 0.2 (2002-07-28)
* Manual keywords lookup.
* Other minor changes.
Version 0.1 (2002-07-18)
* Initial release.
ADMONISHMENT TO IMPRESSIONABLE YOUNG SCHEME STUDENTS:
Quack should by no means be construed as a model of good programming,
much less of good software engineering. Emacs is by nature a complex
system of interacting kludges. To get Emacs to do useful new things is
to artfully weave one's extensions into a rich tapestry of sticky duct
tape. Also, Quack usually only got hacked on when I was stuck in a busy
lobby for an hour with a laptop and unable to do real work.