💾 Archived View for zaibatsu.circumlunar.space › ~krixano › phlog › 112118_EdimCodersImprovementsOve… captured on 2020-09-24 at 01:35:26.
-=-=-=-=-=-=-
------------------------------------------------------------ EdimCoder's Improvements Over Ed ------------------------------------------------------------ While EdimCoder takes a lot of inspiration from Ed, it also makes several improvements over Ed. Before we move onto detailing a new type of editor that was used in the past, I've decided to go over these improvements. Prompts and Colors One Improvement made over Ed is that EdimCoder utilizes prompts and colors to distinguish file text from the editor's user interface. Additionally, prompts give useful information and are especially helpful to new users. I made the choice to include both colors and prompts for the reasons above, but also because EdimCoder no longer needs to be restricted by the hardware that was used when Ed was created/used (namely, teletypes). Because screens can display characters much quicker now than in the past, showing prompts and colors should no longer be a bother considering speed. The SubEditor Many command-based editors have a SubEditor. This is the line editor that you use to type in a command or a line. Therefore, subeditors work similarly to how readline and linenoise work. Previously we discussed how EdimCoder created it's own alternative to readline that is portable across Windows, Linux, and perhaps in the future, others. This readline alternative is the SubEditor. It provides the means of editing the command line or the line you are currently typing to insert, append, prepend, or replace in the file. EdimCoder made several improvements to it's subeditor over Ed. These include the ability to move the cursor left/right so it's positioned in the middle of the text of the current line, and the ability to add text in the middle/beginning of the line where the cursor is currently positioned. Additionally, the Home, End, and Delete keys also work. And finally, the Tab key always inserts a tab character, but will display as 4 spaces instead of a tab so that the tab stops of the terminal aren't used. Context One of the problems I considered while creating EdimCoder was how someone could make sure they have the context of what they are writing in mind. This means you should have a good idea of where you are currently doing an operation, making sure you are doing the *right* operation, and where in the file the operation is happening. Therefore, I have came up with a few different features that help you get an idea of all of these things. Firstly, the simplest is always showing the current line number you are on while doing an operation and showing the current line number in the command prompt. Additionally, there is a 1 character gutter that shows the current operation you are applying to the line number you are currently on. This character is often the same as the command you used. I have provided the different characters that may be shown below: a - for inserting lines after a line A - for inserting chars at beginning of line i - for inserting lines before a line I - for inserting chars at end of line x - for deleting line ^ - the line *was* moved up - meaning it was previously in a position lower than it currently is. V - the line *was* moved down - meaning it was previously in a position lower than what it currently is. r - the line is being replaced R - a given subset of the line is being replaced (replacing chars with chars) Whenever you are inserting, deleting, or moving lines, ^ and V are used to show the effects those commands have on the other lines of the file. In most instances only the first moved line is shown. For example, inserting one line before another will show that the line being inserted before was moved down one line number to accommodate for the insertion. Therefore, 'V' will be shown in the gutter of that line after you are done with the insertion operation. The next feature is a very simple one. EdimCoder will display the line before and the line after the line(s) you are currently operating on to give more context on where in the file the operation is happening. The final feature is incomplete and only works for *few* files because it is programming-language aware. The feature is the ability to show an outline of the file (using the 'info' command). This outline currently works with C, C/C++ Headers, and Markdown files. This provides more context as well as, in the future, the ability to more easily jump to these locations and do operations *on* these "objects" (for example, doing an operation on a function or section). Bookmarks This is a recent addition. EdimCoder has the ability to store line numbers and line ranges in bookmarks (which are basically like variables). Then, you can use these bookmarks in any of the operations. Here's an example of creating a bookmark, then using it in the Print operation: d 5:25 fGetInput P #fGetInput This will set lines 5 through 25 to the 'fGetInput' bookmark. Then, when passed into the Print operation, it will print out lines 5 through 25. In the future, different types of bookmarks will be provided. More on this in a future post. Command Modes EdimCoder also has different modes - currently 3 modes (but more in the future). Ed can be thought of as having 2 modes, command and input. EdimCoder has the same modes, plus an additional one: the preview mode. The preview mode acts similar to 'pg' (or less but being less screen-oriented) and accepts commands that tell it whether you want to view the previous or next page. EdimCoder will be getting at least one additional mode in the future. More on this in a future post. Canceling Current Operation EdimCoder lets you cancel the current operation by pressing Ctrl-X. This will revert back to what the text was before the operation ever happened. Buffers EdimCoder has one more improvement over Ed - this one I consider to be a big improvement. EdimCoder has the ability to open multiple files/buffers and easily switch between them. The current line, outline, and other information is kept per-buffer. Continually Improving While EdimCoder currently offers many advantages and improvements over Ed, it is continually improving. There are various other ideas that will be implemented in the future (hints: input suspension, outline bookmarks, relative lines, relative and static bookmarks, default bookmarks, ...). Thanks for reading this post. Hopefully I will have the next post out soon, which will talk about a different type of editor used in the past and how it's ideas can be used in EdimCoder.