We went through my complaints with your editor back when the topic was first posted... you basically dismissed all of them with some variation of "you just don't understand".
An
elegant solution to one problem may be a very
inelegant solution to another. Hammers are great with nails, not so good with screws. To judge the elegance of a particular design, we must first understand the goals of that design.
Our overall goal was to make sure our interface would be (a) simple and friendly enough for first-time programmers (such as children at a grade-school level), yet (b) convenient and powerful enough for seasoned programmers (such as ourselves) who wanted to write programs like native-code generating compilers and wysiwyg page-editors. This two-pronged overall goal led to the following design decisions (among many others):
1.
Take over the entire screen (a) to remove all unnecessary distractions, not just for the sake of the beginner, but for ourselves as well; (b) to insure that our system would look the same on all operating systems and versions of those operating systems; and (c) to simplify and unify the system's documentation.
2.
Clearly distinguish foreground and background elements of the interface. Keep interface elements simple and functional, with minimal or no decoration. Use only black, white, and various shades of gray for interface elements so colors in the user's data will stand out more clearly.
3.
Employ a built-in system font that is (a) available on all operating systems; (b) proportionally spaced; (c) easy to read but reasonably dense; and (d) appealing to children. The font should also stand as a constant reminder to the experienced programmer that programming is fun.
4.
Provide "tabbed" workareas so (a) the experienced programmer can have multiple files open simultaneously, while (b) the beginner will not be burdened with positioning, sizing and layering overlapping windows.
5.
Fix the position of key interface elements (a) so they can serve as "anchor points" for educators, and (b) can be viewed and manipulated by experienced programmers without undue conscious thought.
6.
Eliminate all unnecessary controls and widgets such as radio buttons, check boxes, scroll bars, and complex dialogs.
7
Arrange menu commands alphabetically rather than topically. More like the
index of a book (where people most often go when they want to find something) rather than a "table of contents" (which is a useful organization only when one first surveys a text or program). Allow functionally equivalent commands to be listed under different names (such as "Exit" under "E" and "Quit" under "Q").
8.
Provide a single, unified view of the file system (rather than the "one view on the desktop, another in the a dialog box" approach taken by most systems).
9.
Include multiple clipboards for different kinds of entities, including at least (a) files, (b) pages, (c) elements of various kinds on pages, and (d) text.
10.
Allow for unlimited "undo" and "redo" operations.
11.
Use a common text editing facility everywhere in the system, including but not limited to (a) controls and dialogs; (b) text files; (c) documents; etc.
12.
Use an incremental find facility, similar to the "LEAP" system pioneered by Jef Raskin at Apple, for locating text in files, dumps, and documents.
13.
Allow the CTRL and ALT keys to be used interchangeably, where possible, to (a) shorten the learning curve for beginners, and (b) simplify keyboarding of menu shortcuts, etc.
14.
Supply a simply organized built-in color palette that allows for both (a) easy visual search, and (b) simplified naming of distinct colors. A sample of our palette, with pertinent remarks, appears below.
15.
Make sure the system can start up and be ready to go in less than a second.
16.
Code the entire system in Plain English (a) for educational purposes, and (b) to insure that the interface has the same look and feel on all operating systems.
The resulting interface looks like this:
Note the alphabetical menus across the top. (All the letters appear all the time; the "..." is simply to keep the images narrow for posting.) Note also the fixed message area in the top right: this area is used for "status" messages only; error messages are handled differently (as described below). Note, finally, the workarea tabs at the bottom of the screen; workareas can be rearranged simply by sliding the tabs left and right.
Error messages temporarily overwrite the menu area (so they don't obscure the user's code, pages, etc), and typically appear in red (this is one of the few uses of color in the standard interface):
Error messages are modal and can be dismissed by clicking the "M'Kay" button with the mouse or hitting the Escape or Enter key.
All dialogs are modal and allow only a single response per question; they also overwrite the menu area and include appropriate command buttons at the far right:
Each workarea is initially positioned at the top of the file system showing all available devices:
When you double-click a device (or select it and use the "Open" command) the top-level directories and files on that device are shown. You continue "digging" until you find the file of interest, and then open that. The default open procedure examines the file and activates the appropriate editor (text, document, etc). You can also force a file to be opened by a particular editor (say, an executable you want to examine as a dump, or a document you want to open as text so you can see our Osmosian "markup" language) by using the specific "Open and dump" or "Open as text" commands.
Program text in the editor looks like this:
Comments are color coded so the programmer can quickly and easily see which parts of his code are currently included in a build; this is the only color-coding allowed in Plain English code.
When you open a document, our page editor first shows you the "edges" of the pages, one line per, with the title and the page number:
Pages can be added, cut, copied, duplicated, pasted, and deleted, singly or in groups, in this view. When you open a page, you get the wysiwyg view:
Each page can contain vector graphics of various kinds (circles, ellipses, squares, rectangles, rounded squares and rectangles, arbitrarily complex polygons, smoothed polygons, text in any font, size, and style, and photographic images imported from most standard file types (jpg, png, etc). The page editor is non-modal: you don't select a tool and then draw an object, but rather create an object (via menu command) and then manipulate it into the appropriate size, shape, and position with the mouse. Other functions available in our page editor have been described in a previous post.
Colors can be applied to the border and the fill of any shape on any page, and to text. Our color palette includes clear, white, and black, seven shades of gray, and all the colors of the rainbow arranged as reds, oranges, yellows, greens, blues, and purples:
The programming language recognizes the center color in each row as the "norm", say, "red" or "blue". The three shades to the left are referenced with the adjectives light, lighter, and lightest, respectively; the shades to the right use the adjectives dark, darker, and darkest.
And that's the gist of it. An elegant solution to a specific and unusual problem. Simple and appealing for beginners: we've used it to teach all kinds of people, from young children to old ladies, how to program in Plain English. Yet convenient and powerful enough for pros: we used it ourselves to write the whole system itself: 25,000 sentences of fully functional Plain English code -- and believe me, had it lacked anything we really needed or wanted, we would have quickly added it in.