Lucid GNU Emacs 19.10 is now available. This is a version of GNU Emacs derived from Emacs version 19 from the Free Software Foundation. (If you are already a user of version 19.9, you might want to skip ahead to the section labeled "Differences Between 19.9 and 19.10".) You can get it via anonymous FTP from LUCID.COM (192.43.175.3). Log in with the user "anonymous" and "username@host" as a password (that is, your email address.) Execute the command "cd /pub/lemacs/". There you will find a number of files, only a subset of which you need. LUCID.COM is the canonical distribution point, but has a rather slow internet connection; you may want to get it from one of the better-connected mirror sites instead, such as: cs.uiuc.edu /pub/epoch-files/lemacs/ self.stanford.edu /pub/lemacs/ ftp.uu.net /systems/gnu/lucid/ ftp.ai.mit.edu /pub/lemacs/ src.doc.ic.ac.uk /gnu/lucid/ ftp.germany.eu.net /pub/packages/lucid-emacs/ ftp.uni-erlangen.de /pub/lemacs/ ftp.th-darmstadt.de /pub/editors/GNU-Emacs/unix/Lucid-Emacs/ ftp.cenatls.cena.dgac.fr /pub/Emacs/lemacs/ liasun3.epfl.ch /pub/gnu/lemacs/ ftp.sunet.se /pub/gnu/lucid/lemacs/ ftp.technion.ac.il /pub/unsupported/gnu/lucid-emacs/ audrey.levels.unisa.edu.au /lemacs/ ftp.center.osaka-u.ac.jp /lucid-emacs/ There are three types of tar files which comprise the lemacs distribution: - A tar file containing a source tree, for building lemacs from scratch; - A tar file containing the architecture-independent parts of a lemacs installation tree (which contains only those files which are needed at run-time, and excludes much of the source code); - And several tar files containing the architecture-dependent parts of a lemacs installation tree (the executables themselves.) If you intend to build lemacs from source, all you need is the single source distribution tar file. If you intend to install the precompiled binaries for a single architecture, then you need two tar files: both the architecture-independent and the architecture-dependent parts of the installation tree. If you intend to install the precompiled binaries for more than one architecture, then you need three or more tar files: the single tar file of the architecture-independent parts of the installation tree, and the tar files of the architecture-dependent parts for the architectures you want. README This file. lemacs-19.10.tar.gz The complete source distribution. This file is about 8 megabytes. When unpacked, the source distribution will take up about 30 megs. You will need an additional 12 megs or so to compile it. README.executables Installation instructions for the precompiled binaries. It's important that you read this before unpacking the executables. lemacs-19.10-common.tar.gz This contains the architecture-independent parts of the installation tree. If you intend to build emacs from scratch, you do not need this file: it contains a subset of the files included in lemacs-19.10.tar.gz but arranged in a different directory structure (the files are arranged as an installation tree rather than a build tree.) If you intend to install the precompiled binaries, you need this file in addition to the binary kit(s). lemacs-19.10-sparc-sun-sunos4.1.3.tar.gz This contains a set of ready-to-run executables for SunOS 4.1.3. NOTE: you need to get lemacs-19.10-common.tar.gz as well for these to work. See README.executables. lemacs-19.10-sparc-sun-sunos4.1.3-energize.tar.gz This contains a set of ready-to-run executables for SunOS 4.1.3, plus support for Lucid's Energize development environment. If you do not own Energize, then these binaries do not add any features that you can take advantage of. You should probably use the other set of sun4 binaries instead, since these are larger. (Energize users should treat the Energize support in 19.10 as a BETA release.) NOTE: you need to get lemacs-19.10-common.tar.gz as well for these to work. See README.executables. lemacs-19.10-sparc-sun-solaris2.3.tar.gz This contains a set of ready-to-run executables for SunOS 5.3, also known as Solaris 2.3. NOTE: you need to get lemacs-19.10-common.tar.gz as well for these to work. See README.executables. lemacs-19.10-m68k-hp-hpux.tar.gz Executables for HP9000/300 and HP9000/400 with HPUX 8 or 9. lemacs-19.10-hppa1.1-hp-hpux.tar.gz Executables for HP9000/7xx and HP9000/9xx with HPUX 8. lemacs-19.10-hppa1.1-hp-hpux9.tar.gz Executables for HP9000/7xx and HP9000/8xx with HPUX 9. lemacs-19.10-mips-sgi-irix4.0.5F.tar.gz Executables for Irix 4.x. lemacs-19.10-mips-sgi-irix5.2.tar.gz Executables for IRIX 5.x. lemacs-19.10-rs6000-ibm-aix3.2.tar.gz Executables for AIX 3.2.4 and 3.2.5. lemacs-19.10-mips-dec-ultrix4.3.tar.gz Executables for Ultrix 4.3. lemacs-19.10-alpha-dec-osf2.0.tar.gz Executables for Dec Alpha OSF 2.0. lemacs-19.10-i386-bsdi-bsd386.tar.gz Executables for BSD/386 1.0. lemacs-19.10-i486-unknown-linux-motif.tar.gz Executables for Linux, using the Motif toolkit. lemacs-19.10-i486-unknown-linux-athena3d.tar.gz Executables for Linux, using the 3d Athena toolkit. xpm-3.4a.tar.gz The XPM library (optional, but recommended.) gzip-1.2.4.tar.Z The GNU compression utility; needed to unpack `.gz' files. You can get the latest version of this from any of the GNU mirror sites. Don't forget to set "binary" mode when transferring these files. Unpack them with some variation of the command "gzip -dc lemacs-19.10.tar.gz | tar -pxf -". You can purchase Lucid Emacs tapes and manuals directly from Lucid. Call (800) 223-9322 or send mail to lucid-info@lucid.com for current pricing, media, and platform information. In addition, Sun Microsystems provides a pre-compiled version with extended functionality for working with SPARCworks. This version is available via anonymous ftp at ftp.cs.uiuc.edu:/pub/xemacs. To build the regular 19.10 distribution with SPARCworks support include the `--with-sparcworks' flag when running configure. We have created two mailing lists for discussing Lucid Emacs. bug-lucid-emacs@lucid.com For reporting all bugs in Lucid GNU Emacs, including bugs in the compilation and installation procedures. help-lucid-emacs@lucid.com For random questions and conversation about using Lucid GNU Emacs. To be added or removed from these mailing lists, send mail to bug-lucid-emacs-request@lucid.com or help-lucid-emacs-request@lucid.com. (Send all administrative requests, and only administrative requests, to these addresses.) The bug-lucid-emacs and help-lucid-emacs mailing lists are archived on lucid.com in the directory /pub/mlists/, and are bidirectionally gatewayed into the newsgroups alt.lucid-emacs.bug and alt.lucid-emacs.help. Please use the newsgroups instead of the mailing lists if at all possible; it makes less work for us. Do not send messages about problems with Lucid Emacs to the FSF GNU Emacs newsgroups and mailing lists (help-gnu-emacs@prep.ai.mit.edu, bug-gnu-emacs@prep.ai.mit.edu, gnu.emacs.help, gnu.emacs.bug, et cetera) unless you are sure that the problem you are reporting is a problem with both versions of Emacs. Differences between Lucid Emacs 19 and FSF Emacs 19 =================================================== Pixmaps of arbitrary size can be embedded in a buffer. Variable width fonts work. The height of a line is the height of the tallest font (or pixmap) on that line, instead of all lines having the same height. The programatic interface to the menubar is simpler and more powerful. Lucid Emacs use the MIT "Xt" toolkit instead of raw Xlib calls, which makes it be a more well-behaved X citizen (and also improves portability). A result of this is that it is possible to include other Xt "Widgets" in the Emacs window. Also, Emacs understands the standard Xt command-line arguments. In Lucid Emacs, events are first-class objects. FSF19 represents them as integers, which obscures the differences between a key gesture and the ancient ASCII code used to represent a particular overlapping subset of them. In Lucid Emacs, keymaps are first-class opaque objects. FSF19 represents them as complicated combinations of association lists and vectors. If you use the advertised functional interface to manipulation of keymaps, the same code will work in Lucid Emacs, Emacs 18, and and FSF Emacs 19; if your code depends on the underlying implementation of keymaps, it will not. Lucid Emacs provides support for ToolTalk on systems that have it. The initial load-path is computed at run-time, instead of at compile-time. This means that if you move the Emacs executable and associated directories to somewhere else, you don't have to recompile anything. If you're running on a machine with audio hardware, you can specify sound files for Emacs to play instead of the default X beep. See the documentation of the function load-sound-file and the variable sound-alist. Lucid Emacs knows about timers directly, instead of them being simulated by a subprocess. You can specify what the title of the Emacs windows and icons should be with the variables `screen-title-format' and `screen-icon-title-format', which have the same syntax as `mode-line-format'. An Emacs screen can be placed within an "external client widget" managed by another application. This allows an application to use an Emacs screen as its text pane rather than the standard Text widget that is provided with Motif or Athena. Emacs supports Motif applications, generic Xt (e.g. Athena) applications, and raw XLib applications. Lucid Emacs calls a top-level emacs X window a "screen," which is the terminology that Epoch used. FSF 19 calls these "frames." We may adopt the term "frame" as well, but we have not done so yet. Lucid Emacs uses "extents" to represent all non-textual aspects of buffers; FSF 19 uses two distinct objects, "text properties" and "overlays", which divide up the functionality between them. Extents are a superset of the functionality of the two FSF data types. A large subset of the FSF 19 interface to text properties is supported in lemacs (with extents being the underlying representation.) Extents can be made to be copied into strings, and thus restored by kill and yank. Thus, one can specify this behavior on either "extents" or "text properties", whereas in FSF 19 text properties always have this behavior and overlays never do. Lucid Emacs *currently* requires an X Window System environment to run, though it will not be much work to make it run on dumb ttys again. We plan to do this, possibly soon. If you would like to volunteer to help, send us mail. Many useful third-party packages are shipped with the default distribution. See the etc/NEWS file for more info. Major Differences Between 19.9 and 19.10 ======================================== The GNU `configure' system is now used to build lemacs. The Emacs Manual and Emacs Lisp Reference Manual now document version 19.10. If you notice any errors, please let us know. When pixmaps are displayed in a buffer, they contribute to the line height - that is, if the glyph is taller than the rest of the text on the line, the line will be as tall as necessary to display the glyph. An X window can be embedded in a buffer in the same way as a pixmap; external programs (such as GhostScript, or an MPEG player) can then render arbitrary graphics on that window. In addition to using arbitrary sound files as emacs beeps, one can control the pitch and duration of the standard X beep, on X servers which allow that (Note: most don't.) There is support for playing sounds on systems with NetAudio servers. Minor modes may have mode-specific keybindings; keymaps may have an arbitrary number of parent maps. Menus can have toggle and radio buttons in them. There is an "options" menu that makes use of this. There is a font selection menu. ToolTalk support is provided. An Emacs screen can be placed within an "external client widget" managed by another application. This allows an application to use an Emacs screen as its text pane rather than the standard Text widget that is provided with Motif or Athena. Some default keybindings have changed to match FSF19; the new bindings are Screen-related commands: C-x 5 2 make-screen C-x 5 0 delete-screen C-x 5 b switch-to-buffer-other-screen C-x 5 f find-file-other-screen C-x 5 C-f find-file-other-screen C-x 5 m mail-other-screen C-x 5 o other-screen C-x 5 r find-file-read-only-other-screen Abbrev-related commands: C-x a l add-mode-abbrev C-x a C-a add-mode-abbrev C-x a g add-global-abbrev C-x a + add-mode-abbrev C-x a i g inverse-add-global-abbrev C-x a i l inverse-add-mode-abbrev C-x a - inverse-add-global-abbrev C-x a e expand-abbrev C-x a ' expand-abbrev Register-related commands: C-x r C-SPC point-to-register C-x r SPC point-to-register C-x r j jump-to-register C-x r s copy-to-register C-x r x copy-to-register C-x r i insert-register C-x r g insert-register C-x r r copy-rectangle-to-register C-x r c clear-rectangle C-x r k kill-rectangle C-x r y yank-rectangle C-x r o open-rectangle C-x r t string-rectangle C-x r w window-configuration-to-register Narrowing-related commands: C-x n n narrow-to-region C-x n w widen Other changes: C-x 3 split-window-horizontally (was undefined) C-x - shrink-window-if-larger-than-buffer C-x + balance-windows The variable allow-deletion-of-last-visible-screen has been removed, since it was widely hated. You can now always delete the last visible screen if there are other iconified screens in existence. Additional compatibility with Epoch is provided (though this is not yet complete.) Major Differences Between 19.8 and 19.9 ======================================= Scrollbars! If you have Motif, these are real Motif scrollbars; otherwise, Athena scrollbars are used. They obey all the usual resources of their respective toolkits. There is now an implementation of dialog boxes based based on the Athena widgets, as well as the existing Motif implementation. This release works with Motif 1.2 as well as 1.1. If you link with Motif, you do not also need to link with Athena. If you compile lwlib with both USE_MOTIF and USE_LUCID defined (which is the recommended configuration) then the Lucid menus will draw text using the Motif string-drawing library, instead of the Xlib one. The reason for this is that one can take advantage of the XmString facilities for including non-Latin1 characters in resource specifications. However, this is a user-visible change in that, in this configuration, the menubar will use the "*fontList" resource in preference to the "*font" resource, if it is set. It's possible to make extents which are copied/pasted by kill and undo. There is an implementation of FSF19-style text properties based on this. There is a new variable, minibuffer-max-depth, which is intended to circumvent a common source of confusion among new Emacs users. Since, under a window system, it's easy to jump out of the minibuffer (by doing M-x, then getting distracted, and clicking elsewhere) many, many novice users have had the problem of having multiple minibuffers build up, even to the point of exhausting the lisp stack. So the default behavior is to disallow the minibuffer to ever be reinvoked while active; if you attempt to do so, you will be prompted about it. There is a new variable, teach-extended-commands-p, which if set, will cause `M-x' to remind you of any keybindings of the command you just invoked the "long way." There are menus in Dired, Tar, Comint, Compile, and Grep modes. There is a menu of window management commands on the right mouse button over the modelines. Popup menus now have titles at the top; this is controlled by the new variable `popup-menu-titles'. The `Find' key on Sun keyboards will search for the next (or previous) occurrence of the selected text, as in OpenWindows programs. The `timer' package has been renamed to `itimer' to avoid a conflict with a different package called `timer'. VM 5.40 is included. W3, the emacs interface to the World Wide Web, is included. Felix Lee's GNUS speedups have been installed, including his new version of nntp.el which makes GNUS efficiently utilize the NNTP XOVER command if available (which is much faster.) GNUS should also be much friendlier to new users: it starts up much faster, and doesn't (necessarily) subscribe you to every single newsgroup. The byte-compiler issues a new class of warnings: variables which are bound but not used. This is merely an advisory, and does not mean the code is incorrect; you can disable these warnings in the usual way with the `byte-compiler-options' macro. the `start-open' and `end-open' extent properties, for specifying whether characters inserted exactly at a boundary of an extent should go into the extent or out of it, now work correctly. The `extent-data' slot has been generalized/replaced with a property list, so it's easier to attach arbitrary data to extent objects. The `event-modifiers' and `event-modifier-bits' functions work on motion events as well as other mouse and keyboard events. Forms-mode uses fonts and read-only regions. The behavior of the -geometry command line option should be correct now. The `iconic' screen parameter works when passed to x-create-screen. The user's manual now documents Lucid Emacs 19.9. The relocating buffer allocator is turned on by default; this means that when buffers are killed, their storage will be returned to the operating system, and the size of the emacs process will shrink. CAVEAT: code which contains calls to certain `face' accessor functions will need to be recompiled by version 19.9 before it will work. The functions whose callers must be recompiled are: face-font, face-foreground, face-background, face-background-pixmap, and face-underline-p. The symptom of this problem is the error "Wrong type argument, arrayp, #". The .elc files generated by version 19.9 will work in 19.6 and 19.8, but older .elc files which contain calls to these functions will not work in 19.9. Work In Progress: - We have been in the process of internationalizing Lucid Emacs. This code is ***not*** ready for general use yet. However, the code is included (and turned off by default) in this release. - If you define I18N2 at compile-time, then sorting/collation will be done according to the locale returned by setlocale(). - If you define I18N3 at compile-time, then all messages printed by lemacs will be filtered through the gettext() library routine, to enable the use of locale-specific translation catalogues. The current implementation of this is quite dependent on Solaris 2, and has a very large impact on existing code, therefore we are going to be making major changes soon. (You'll notice calls to `gettext' and `GETTEXT' scattered around much of the lisp and C code; ignore it, this will be going away.) - If you define I18N4 at compile-time, then lemacs will internally use a wide representation of characters, enabling the use of large character sets such as Kanji. This code is very OS dependent: it requires X11R5, and several OS-supplied library routines for reading and writing wide characters (getwc(), putwc(), and a few others.) Performance is also a problem. This code is also scheduled for a major overhaul, with the intent of improving performance and portability. Our eventual goal is to merge with MULE, or at least provide the same base level of functionality. If you would like to help out with this, let us know. - Other work-in-progress includes Motif drag-and-drop support, ToolTalk support, and support for embedding an Emacs widget inside another application (where it can function as that other application's text-entry area). This code has not been extensively tested, and may (or may not) have portability problems, but it's there for the adventurous. Comments, suggestions, bug reports, and especially fixes are welcome. But have no expectations that this experimental code will work at all. Major Differences Between 19.6 and 19.8 ======================================= There were almost no differences between versions 19.6 and 19.7; version 19.7 was a bug-fix release that was distributed with Energize 2.1. Lucid Emacs 19.8 represents the first stage of the Lucid Emacs/Epoch merger. The redisplay engine now in lemacs is an improved descendant of the Epoch redisplay. As a result, many bugs have been eliminated, and several disabled features have been re-enabled. Notably: Selective display (and outline-mode) work. Horizontally split windows work. The height of a line is the height of the tallest font displayed on that line; it is possible for a screen to display lines of differing heights. (Previously, the height of all lines was the height of the tallest font loaded.) There is lisp code to scale fonts up and down, for example, to load the next- taller version of a font. There is a new internal representation for lisp objects, giving emacs-lisp 28 bit integers and a 28 bit address space, up from the previous maximum of 26. We expect eventually to increase this to 30 bit integers and a 32 bit address space, eliminating the need for DATA_SEG_BITS on some architectures. (On 64 bit machines, add 32 to all of these numbers.) GC performance is improved. Various X objects (fonts, colors, cursors, pixmaps) are accessible as first- class lisp objects, with finalization. An alternate interface to embedding images in the text is provided, called "annotations." You may create an "annotation margin" which is whitespace at the left side of the screen that contains only annotations, not buffer text. When using XPM files, one can specify the values of logical color names to be used when loading the files. It is possible to resize windows by dragging their modelines up and down. More generally, it is possible to add bindings for mouse gestures on the modelines. There is support for playing sound files on HP machines. ILISP version 5.5 is included. The Common Lisp #' read syntax is supported (#' is to "function" as ' is to "quote".) The `active-p' slot of menu items is now evaluated, so one can put arbitrary lisp code in a menu to decide whether that item should be selectable, rather than doing this with an `activate-menubar-hook'. The X resource hierarchy has changed slightly, to be more consistent. It used to be argv[0] SCREEN-NAME pane screen ApplicationShell EmacsShell Paned EmacsScreen now it is argv[0] shell pane SCREEN-NAME ApplicationShell EmacsShell Paned EmacsScreen The Lucid Emacs sources have been largely merged with FSF version 19; this means that the lisp library contains the most recent releases of various packages, and many new features of FSF 19 have been incorporated. Because of this, the lemacs sources should also be substantially more portable. Major Differences Between 19.4 and 19.6 ======================================= There were almost no differences between versions 19.4 and 19.5; we fixed a few minor bugs and repacked 19.4 as 19.5 for a CD-ROM that we gave away as a trade show promotion. The primary goal of the 19.6 release is stability, rather than improved functionality, so there aren't many user-visible changes. The most notable changes are: - The -geometry command-line option now correctly overrides geometry specifications in the resource database. - The `width' and `height' screen-parameters work. - Font-lock-mode considers the comment start and end characters to be a part of the comment. - The lhilit package has been removed. Use font-lock-mode instead. - vm-isearch has been fixed to work with isearch-mode. - new versions of ispell and calendar. - sccs.el has menus. Lots of bugs were fixed, including the problem that lemacs occasionally grabbed the keyboard focus. Also, as of Lucid Emacs 19.6 and Energize 2.0 (shipping now) it is possible to compile the public release of Lucid Emacs with support for Energize; so now Energize users will be able to build their own Energize-aware versions of lemacs, and will be able to use newer versions of lemacs as they are released to the net. (Of course, this is not behavior covered by your Energize support contract; you do it at your own risk.) I have not incorporated all portability patches that I have been sent since 19.4; I will try to get to them soon. However, if you need to make any changes to lemacs to get it to compile on your system, it would be quite helpful if you would send me context diffs (diff -c) against version 19.6. Major Differences Between 19.3 and 19.4 ======================================= Prototypes have been added for all functions. Emacs compiles in the strict ANSI modes of lcc and gcc, so portability should be vastly improved. Many many many many core leaks have been plugged, especially in screen creation and deletion. The float support reworked to be more portable and ANSI conformant. This resulted in these new configuration parameters: HAVE_INVERSE_HYPERBOLIC, HAVE_CBRT, HAVE_RINT, FLOAT_CHECK_ERRNO, FLOAT_CATCH_SIGILL, FLOAT_CHECK_DOMAIN. Let us know if you had to change the defaults on your architecture. The SunOS unexec has been rewritten, and now works with either static or dynamic libraries, depending on whether -Bstatic or -Bdynamic were specified at link-time. Small (character-sized) bitmaps can be mixed in with buffer text via the new functions set-extent-begin-glyph and set-extent-end-glyph. (This is actually a piece of functionality that Energize has been using for a while, but we've just gotten around to making it possible to use it without Energize. See how nice we are? Go buy our product.) If compiled with Motif support, one can pop up dialog boxes from emacs lisp. We encourage someone to contribute Athena an version of this code; it shouldn't be much work. If dialog boxes are available, then y-or-n-p and yes-or-no-p use dialog boxes instead of the minibuffer if invoked as a result of a command that was executed from a menu instead of from the keyboard. Multiple screen support works better; check out doc of get-screen-for-buffer. The default binding of backspace is the same as delete. (C-h is still help.) A middle click while the minibuffer is active does completion if you click on a highlighted completion, otherwise it executes the global binding of button2. New versions of Barry Warsaw's c++-mode and syntax.c. Font-lock-mode works with C++ mode now. The semantics of activate-menubar-hook has changed; the functions are called with no arguments now. `truename' no longer hacks the automounter; use directory-abbrev-alist instead. Most minibuffer handling has been reimplemented in emacs-lisp. There is now a builtin minibuffer history mechanism which replaces gmhist. Major Differences Between 19.2 and 19.3 ======================================= The ISO characters have correct case and syntax tables now, so the word-motion and case-converting commands work sensibly on them. If you set ctl-arrow to an integer, you can control exactly which characters are printable. (There will be a less crufty way to do this eventually.) Menubars can now be buffer local; the function set-screen-menubar no longer exists. Look at GNUS and VM for examples of how to do this, or read menubar.el. When emacs is reading from the minibuffer with completions, any completions which are visible on the screen will highlight when the mouse moves over them; clicking middle on a completion is the same as typing it at the minibuffer. Some implications of this: The *Completions* buffer is always mousable. If you're using the completion feature of find-tag, your source code will be mousable when you type M-. Dired buffers will be mousable as soon as you type ^X^F. And so on. The old isearch code has been replaced with a descendant of Dan LaLiberte's excellent isearch-mode; it is more customizable, and generally less bogus. You can search for "composed" characters. There are new commands, too; see the doc for ^S, or the NEWS file. A patched GNUS 3.14 is included. The user's manual now documents Lucid Emacs 19.3. A few more modes have mouse and menu support. The startup code should be a little more robust, and give you more reasonable error messages when things aren't installed quite right (instead of the ubiquitous "cannot open DISPLAY"...) Subdirectories of the lisp directory whose names begin with a hyphen or dot are not automatically added to the load-path, so you can use this to avoid accidentally inflicting experimental software on your users. I've tried to incorporate all of the portability patches that were sent to me; I tried to solve some of the problems in different ways than the patches did, so let me know if I missed something. Some systems will need to define NEED_STRDUP, NEED_REALPATH, HAVE_DREM, or HAVE_REMAINDER in config.h. Really this should be done in the appropriate s- or m- files, but I don't know which systems need these and which don't. If yours does, let me know which file it should be in. Check out these new packages: blink-paren.el: causes the matching parenthesis to flash on and off whenever the cursor is sitting on a paren-syntax character. pending-del.el: Certain commands implicitly delete the highlighted region: Typing a character when there is a highlighted region replaces that region with the typed character. font-lock.el: A code-highlighting package, driven off of syntax tables, so that it understands block comments, strings, etc. The insertion hook is used to fontify text as you type it in. shell-font.el: Displays your shell-buffer prompt in boldface.