My emacs lisp collection
This is a copy of my Emacs collection, with some HTML files added
to document it. The collection is fairly extensive (the code I wrote
myself is now 51k lines, about 1.9Mb) by now -- I started writing
elisp around 1987 as far as I can remember; I think GNUemacs was on
version 17 at the time.
For many years, I gave up on Usenet because of the spam, and didn't
pay much attention to any other forms of announcement; during this
period, I re-invented many Emacs wheels. I'm now working my way
through the Emacs sources, finding out what's in there and removing my
near-duplicates (except in a few cases where I really prefer my
version) and I'm trying to keep up with what's being posted, to avoid
future duplication (again, except where I really want something a bit
different).
Highlights
- emacs-versor
on SourceForge (project page at http://sourceforge.net/projects/emacs-versor/)
- Versatile cursors, giving a wider variety of ways of moving
around files through a narrow interface such as just the arrow
keys, or pedals set up to imitate them.
- email/majordomo.el
- This package is meant for people who manage several majordomo lists.
It composes and sends majordomo commands, parses the replies, and
maintains a cache of the membership of each list. It could do
with a bit more work on it.
- basics/use-package.el
- Download and configure packages on demand. Like a remote
version of
autoload
but with opportunities to set
variables, hooks etc at the same time as specifying where to get the
package from. Particularly handy if you're a flashcard based nomad
and don't want to have to take all the big packages around with you.
- Loads all the el / elc files in a directory.
- editing/diary-mode.el
- Major mode for editing diary files. Colours days of the week differently.
-->
- editing/generic-text.el
and friends
- Mode-sensitive insertion of markup, using the same commands for
TeX, LaTeX, HTML, *roff, and plain text. (Not all implemented
yet -- *roff contributions would be welcome.) They provide similar
facilities to html-helper-mode
but consistently across several markup-language modes.
- editing/replace-regexp-list.el
and editing/edit-tree.el
- Apply lots of edits systematically. These two are most useful
used together. I don't need them often, but when I do need them,
I really need them!
- misc/banner.el
- Giant writing.
- mulvoc (on Sourceforge)
- MUlti-Lingual VOCabularies, read in from CSV (Comma-Separated
Value) files (a spreadsheet interchange format). I have great
expectations of this (there's early-stage enthusiasm for you),
but it is quite new. It now has quite a few source files, and
has now become a SourceForge project so people can share vocabularies there.
- natural-language/localized-source.el
- Show localization for source files, e.g. translations of
comments and perhaps names. Intended for (typically open-source)
developers in countries where knowledge of English is not
typically good; particularly where there may be large
organizations who could have translators translating the
comments on open-source code that their programmers then work
on.
- sidebrain
(project page at http://sourceforge.net/projects/sidebrain/)
- A working memory tool for programmers: it maintains a stack of
your current tasks, and a queue or pool of pending tasks, and a
set of observations, to help to remind you what you're
doing. This is a fairly new project; for what I can tell so far,
it helps me to keep focused on what I'm doing.
- my-extensions-to-packages/voice/embedded-commands.el
- Allow commands embedded in dictated text, for voice
recognition. Needs my improved version of vr.el.
Directory location and structure
Because I ship my emacs setup around between various machines, it
all uses an environment $COMMON
(which on a Unix-style
system I set to $HOME/common
) as its idea of where
everything lives. This directory (the one in which this page resides)
expects to be found at $COMMON/emacs
. It also expects
some companion directories, $COMMON/open-projects
containing packages from sourceforge etc (including one which I
manage), and $COMMON/emacs-library
containing packages I
have downloaded from elsewhere. (By the way, I can definitely
recommend this way of working: $COMMON
contains also my
research papers, personal web site etc -- all the things I ship around
all my machines -- and all fits handily onto a USB key. That way, I
can keep my machines at home isolated from the Internet, and
concentrate on getting things done there, without email interruptions
and web distractions.)
$COMMON
points to the things I wrote myself. All the
things that I gathered from the net, rather than wrote myself, are
pointed to by $GATHERED
.
Code related to this way of working is in file-handling/filenames-in-env.el
and in file-handling/common-directory.el.
My emacs startup structure
My .emacs
sets up some environment variables
representing where the rest of my emacs stuff is, then loads the
contents of config
, which
mostly uses use-package
to find and
configure packages.
My emacs directory contents
Some of this is acquired long ago from others, but I wrote most of
it myself. (Stuff I downloaded from others goes in a separate directory.) I'm trying to update
all files in it that I remember I wrote myself, to identify them as
such. I also mean to GPL it all, although some files may yet have
escaped getting a GPL notice in them.
- .emacs
- This sets the rest of my Startup going. It makes extensive use
of basics/load-directory.el.
- appearance/
- Choosing fonts etc.
- autoload/
- Autoload stubs. I probably ought to move more into here.
- basics/
- I load these early in my Startup sequence. It contains things
like basics/load-directory.el
which is used heavily in the rest of my startup sequence.
- contexts.el
- Some stuff for arranging the many buffers I use into groups,
and swapping them in and out; less important now that machines
are larger than they were when I wrote it.
- ctl-x-7.el
- Some keyboard setup that ought to move elsewhere.
- data-structures
- Code for data structure handling.
- editing/
- General editing code.
- elisp-dev-tools/
- Things for handling elisp. Some more stuff should probably move
into here.
- email/
- e-mail handling, including a package for handling majordomo list
management messages.
- file-handling/
- Using filenames found in buffers, synchronizing files and
buffers, and things like that.
- games/
- Games and entertainments written in elisp; see also well-being/ for relaxations.
- graphics
- Includes a major mode for JPEG files, which displays the meta-data.
- handsfree/
- Setting things up for use by pedals that I used to augment the
keyboard because of my RSI. Most of this is moving over to emacs-versor on SourceForge.
- hardware devices
- Interfaces for I/O devices not usually used for editing, such
as joysticks.
- misc/
- Miscellaneous stuff.
- mode-setups/
- Setting variables etc for various modes.
- my-extensions-to-packages/
- My extensions to emacs code which I have loaded from
elsewhere. Includes stuff
for VM and
for BBDB; and lots of
adapters for voice. Also, there are some
extra
features for type-break (and some setup for it).
- natural-language
- Natural language handling, starting with a package for handling
vocabulary lists.
- persistence/
- Saving and restoring state between Emacs sessions, done using
load-directory.
- playpen/
- Things that I'm still playing around with, or that have yet to
grow to maturity.
- research
(on http://www.csis.ul.ie/)
- Code for doing research; includes (voluntary!) logging of emacs user
behaviour for empirical research, and organization of research papers
- unplugged
- I find I'm much more productive off-line, shuttling my files
around on USB mass storage devices. I'm not the only one who
finds this, I know, and with the information (and
distraction) overload that can so easily happen nowadays,
and with the risk of large companies attempting to
interfere with FLOSS development, I think it could be an
important part of the way forward for software
developments, so I'm starting a line of
research into how to do ``unplugged'' distributed development.
- ringing
- Emacs software for
change-ringing,
mostly for learning methods.
- savers1/
- These are loaded as I quit emacs, and the code in them fills in
a directory which is loaded on start-up. See persistence/*.el for the
framework for this.
- savers2/
- Like savers1, but loaded after it because of some order
dependencies. See persistence/*.el for the
framework for this.
- shells-to-start.el
-
- special-setups/
- Not quite ``embedded emacs'', but Emacs setups for specific
purposes, separate from my main emacs Startup.
- startup/
- Everything in this directory is loaded at start-up. Some of it
should get moved to directories organized by what kind of thing
the code does, and some should be given autoloads etc rather
than being loaded at the start every time, so things may
disappear from here and resurface in other directories, over the
first few months of making my collection public.
- sysadmin/
- Stuff relevant to system administration, such as looking at
dmesg
results.
- webstuff/
- Web related functions, many of them for writing HTML.
- well-being
- Stuff for looking after the user, such as breathing exercises.
You have to fetch these from their respective homes.
- bbdb
- Big Brother Data Base -- an email address manager and much
more. I have some additional code for this in my-extensions-to-packages/bbdb/.
- csv
- Reader for Comma Separated Value files from spreadsheets
- html-helper-mode
- A major mode for editing html, which I prefer to the built-in html-mode
- pplog
- Personal Process logging -- I'm not yet using this but mean to sometime
- vm
- View Mail -- my preferred mail reader. I have a little
additional code for this at my-extensions-to-packages/vm.
- w3
- A web browser inside emacs (there are also some interfaces
available to get emacs to control external browsers)
- AUCTeX
- Improved facilities for editing LaTeX and other TeX-family
markup languages.
Expected contents of ../open-projects
- emacs-versor
- Versatile cursors, giving a wider variety of ways of moving
around files through a narrow interface such as just the arrow
keys, or pedals set up to imitate them.
- emacs-vr-mode
- Interface to Dragon Naturally Speaking. I have additional code
to go with this, at my-extensions-to-packages/voice/.
Compatibility etc
I've not yet tried to unpick everything so each piece can be used
by itself in a vanilla emacs. I might get round to some of that
sometime (I hope I will, but then I hope all kinds of things).
I've not tried any of these with Xemacs. I'd be interested to hear
if you use any of my files successfully with it, and will mark them as
such if you do, but I'm not planning to get into that myself for the
time being.
[My emacs index]
[My computing index]
[My home page]
Contact me
Last modified: Fri Oct 12 23:06:16 IST 2007