image provider

Macro Bar


This essay does not describe an existing computer program, just one that should exist. This essay is about a suggested student project in Java programming. This essay gives a rough overview of how it might work. I have no source, object, specifications, file layouts or anything else useful to implementing this project. Everything I have prepared to help you is right here.

This project outline is not like the artificial, tidy little problems you are spoon-fed in school, when all the facts you need are included, nothing extraneous is mentioned, the answer is fully specified, along with hints to nudge you toward a single expected canonical solution. This project is much more like the real world of messy problems where it is up to you to fully the define the end point, or a series of ever more difficult versions of this project and research the information yourself to solve them.

Everything I have to say to help you with this project is written below. I am not prepared to help you implement it; or give you any additional materials. I have too many other projects of my own.

Though I am a programmer by profession, I don’t do people’s homework for them. That just robs them of an education.

You have my full permission to implement this project in any way you please and to keep all the profits from your endeavour.

Please do not email me about this project without reading the disclaimer above.

Unlike the other projects this one is a plug-in, design to run under and IDE (Integrated Development Environment) such as Intellij or Eclipse. The difficult part is learning how to integrate the program into the IDE. The program itself is quite simple.

The Problem

IntelliJ supports keystroke macros. To trigger them you must hit a keystroke then type the macro name the hit enter. This is quite a production. For short macros, you might as well have keyed the macro expansion. What I want to do is trigger a macro with a single click. I want a bar of tiny icons, each one assigned to a keystroke macro. I just click the corresponding icon to trigger it.

The Implementation

The simplest way to implement this is with an XML (extensible Markup Language) configuration file. It contains such facts as:

Here is first cut at what the XML configuration file might look like:

Here is a first cut at an XSD (XML Scheme Definition) grammar defininition for the XML file:

How it Works

On initial load, (or earlier) something parses the XML file and converts it into convenient internal form.

When the program starts, it composes a single giant bar-strip Image, painting all the individual icons onto it. It can then repaint very quickly by doing a clipped drawImage of that giant Image onto the drawing context.

When a mouse click occurs, it does some division to figure out which cell was clicked. Then it invokes the corresponding keystroke macro.

Getting Fancy

For bonus points, allow the user to dynamically configure the macro bar, adding new macros, deleting or rearranging and then save the configuration as an XML file.

You might provide a set of icons, so the user can get started without art work. You could provide a library of icons with various letters upper and lower case, punctuation, squares of various colours, arrows of various colours in various directions, triangles, circles, pentagons, collected in a tree to keep them organised. You might look at the code for Masker to see how you might automate their creation.

You could implement this project for any IDE that supports keystroke macros. If you did it for SlickEdit, you could generate Slick-C code for menu bars. You would not have do any mouse click fielding.


I will write the code for this as if it were a standalone application. You write the parts that integrate it into IntelliJ. I will wire you via PayPal on successful completion. All the work becomes open source.

Eclipse Plugins
NetBeans Plugins
Writing IntelliJ plugins

This page is posted
on the web at:

Optional Replicator mirror
on local hard disk J:

Please the feedback from other visitors, or your own feedback about the site.
Contact Roedy. Please feel free to link to this page without explicit permission.

Your face IP:[]
You are visitor number