4coder logo
4coder is a modern text editor based loosely on Emacs. The primary goal of 4coder is to maximize the power and ease of customization. 4coder also places high priority on performance and portability.
Get 4coder: 4coder.itch.io
4coder news: newsletter.4coder.net
Custom API Documentation
Command Documentation
Built in Bindings

Demo Clips for 4coder 4.1.0

Customization in C/C++

4coder customizations are written in C/C++ 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 performance 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 4coder customizations.

Programmable Buffer Layout

One special feature of 4coder - and as far as I currently know this feature is unique to 4coder - is programmable buffer layout. In a basic sense this feature allows customization of line wrapping, but it also has many creative uses. "Virtual Whitespace" is a feature in 4coder, powered by programmable buffer layout, 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. Programmable buffer layout can also be used as the basis to implement code folding and elastic tabs.

Custom UIs and "Blocking" Call Wrappers

4coder's 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 "blocking" call. For instance 'get_buffer_from_user' 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.

Information and Links: