pmacs3/MODES

39 lines
1.5 KiB
Plaintext

This document is designed to be a quick (and incomplete) description of how
modes work, how you might create one yourself, etc.
1. What are modes?
Pmacs uses modes to determine what actions can be applied to a buffer, which
keys should apply which actions, how the buffer should be highlighted, how the
buffer should be indented, and any other per-buffer configuration. The default
mode ("Fundamental") provides the base functionality which all other modes
inherit.
2. Where do they come from?
All modes are loaded and installed in application.py. It would be nice if there
was a configuration file where you could add your own modes, but there isn't.
Loading a module involves the following (in Application.__init__):
self.modes['foo'] = package.Foo
# ...
self.mode_paths['/some/full/path'] = 'foo'
self.mode_basenames['some-filename'] = 'foo'
self.mode_extensions['.foo'] = 'foo'
self.mode_detection['foo'] = 'foo'
The last is for detecting scripts using the "#!/usr/bin/foo" syntax.
3. How do they work?
The one thing every mode has in common is that they map key bindings to actions
to be taken. They do this via self.bindings, a dictionary mapping action names
(i.e. 'page-down') to a tuple of key bindings (i.e. ('C-v', 'PG_DN',)).
Modes subclass mode2.Fundamental, and they call mode2.Fundamental.__init__ to
run the standard mode initialization (including building the default bindings
dictionary); they can later modify or overwrite this dictionary if they choose.