jEdit (and some plugins) generate several kinds of messages to
alert plugins and other components of jedit-specific events. The message
classes, all derived from
EBMessage
cover the opening and closing
of the application, changes in the status of buffers and views, changes
in user settings, as well as changes in the state of other program
features. A full list of messages can be found in the org.gjt.sp.jedit.msg
package.
For example, the ViewUpdate messages are all related to the jEdit View, or the top-level window. If the user creates multiple Views, a plugin may need to know when they are created or destroyed, so it would monitor ViewUpdate messages.
BufferUpdate messages are all related to jEdit buffers. They let plugins know when a buffer has become dirty, when it is about to be closed, after it is closed, created, loaded, or saved. Each of these messages are described in further detail in the API docs.
As another example, The Navigator plugin monitors a newly added
(to jEdit 4.3) EBMessage of the kind BufferChanging.
The BufferChanging event provides Navigator enough advance notice to
save the TextArea's caret just before the current EditPane changes its
active Buffer. The BufferChanged
event, another
EditPaneUpdate
message, is thrown shortly afterward.
This is not used by Navigator, but it is used by SideKick to determine
when it is time to reparse the buffer.
Plugins register
EBComponent
instances with the
EditBus
to receive messages reflecting
changes in jEdit's state.
EBComponent
s are added and removed with the
EditBus.addToBus()
and
EditBus.removeFromBus()
methods.
Typically, the
EBComponent.handleMessage()
method is
implemented with one or more if
blocks that test
whether the message is an instance of a derived message class in which
the component has an interest.
if(msg instanceof BufferUpdate) { // a buffer's state has changed! } else if(msg instanceof ViewUpdate) { // a view's state has changed! } // ... and so on
If a plugin core class will respond to EditBus messages, it can be
derived from
EBPlugin
, in which case no explicit
addToBus()
call is necessary. Otherwise,
EditPlugin
will suffice as a plugin base
class. Note that QuickNotepad uses the latter.
To determine precisely which EditBus messages are being sent by
jEdit or the plugins, start up jEdit with an additional argument,
-log=5
. You can set an even lower log level to see
further details (the default is 7). With a log level of 5 or lower, the
Activity Log will include [notice]s, which will show us exactly which
EditBus message is sent and when. See Appendix B, The Activity Log
for more details.