<divclass="normal"><spanclass="emphasize">4coder</span> is a modern text editor based loosely on Emacs. The primary goal of <spanclass="emphasize">4coder</span> is to maximize the power and ease of <spanclass="emphasize">customization</span>. <spanclass="emphasize">4coder</span> also places high priority on <spanclass="emphasize">performance</span> and <spanclass="emphasize">portability</span>.</div>
<divclass="normal"><spanclass="emphasize">4coder</span> customizations are written in <spanclass="emphasize">C/C++</span> and compile to a .dll or .so file that can link to the core. The downside to this, by comparison to the Emacs approach of elisp, is that customizations must be recompiled and so the user needs their compiler setup separately. The advantages are that: first C/C++ allow for more <spanclass="emphasize">performance</span> oriented customization code, and second any user who already has or often works in C/C++ will be able to leverage their own code in their <spanclass="emphasize">4coder customizations</span>.</div>
<divclass="spacer"></div>
<h2>Programmable Buffer Layout</h2>
<divclass="normal">One special feature of <spanclass="emphasize">4coder</span> - and as far as I currently know this feature is unique to <spanclass="emphasize">4coder</span> - is <spanclass="emphasize">programmable buffer layout</span>. In a basic sense this feature allows customization of line wrapping, but it also has many creative uses. <spanclass="emphasize">"Virtual Whitespace"</span> is a feature in <spanclass="emphasize">4coder</span>, powered by <spanclass="emphasize">programmable buffer layout</span>, where code files are wrapped at points that minimize the disruption of the meaning of the code and automatically positions the wrapped line with an indent in the same way an auto-indenter would. <spanclass="emphasize">Programmable buffer layout</span> can also be used as the basis to implement code folding and elastic tabs.</div>
<divclass="spacer"></div>
<h2>Custom UIs and "Blocking" Call Wrappers</h2>
<divclass="normal"><spanclass="emphasize">4coder's</span> customization API includes hooks for rendering and functions for drawing strings, primitive shapes, and for rendering more intricate buffer layouts. To handle user input, a UI implements an input handling loop that handles all the input sent to a view context. With this architecture a wide range of UI's can be implemented and then wrapped in a <spanclass="emphasize">"blocking" call</span>. For instance <spanclass="emphasize">'get_buffer_from_user'</span> is a call in the default custom layer code that contains all of the user interactions to query the user for a buffer, when the user confirms their decision the call returns the user's choice.</div>