Hi,
We are very happy to announce the alpha version of a moldable editor built in Brick
(
https://github.com/pharo-graphics/Brick) which is based on Bloc
(
https://github.com/pharo-graphics/Bloc). This is primarily the work of Alex Syrel. The
project was initially financially sponsored by ESUG and it is currently supported by
feenk. And of course, the project is based on the tremendous work that went into Bloc and
Brick by all contributors.
Take a look at this 2 min video:
https://www.youtube.com/watch?v=2vy6VMJM9W4&feature=youtu.be
The basic editor works and it is both flexible and scalable. For example, the last example
shown in the video is an editor opened on 1M characters, which is reasonably large, and as
can be seen see one can interact with it as smoothly as with the one screen text. It
actually works just as fine with 100M characters.
The functionality of the editor includes: rendering, line wrapping, keypress and shortcut
handling, navigation, selection and text styling. Currently, the editor is 1260 lines of
code including method and class comments. This is not large for a text editor and this is
possible because most of the work is done by generic concepts that already exist in Bloc
such as layouts and text measurements. Beside the small maintenance cost, the benefit is
that we have the option to build all sorts of variations with little effort. That is why
we call this a moldable text editor.
Another benefit of using elements and layouts is that we can also embed other kinds of
non-text elements with little effort (such as pictures), and obtain a rich and live text
editor. We already have basic examples for this behavior, and we will focus more in the
next period on this area.
The next immediate step is to add syntax highlighting. Beside the text attributes problem,
this issue will also exercise the thread-safety the implementation is. The underlying
structure (
https://en.wikipedia.org/wiki/Rope_(data_structure)) is theoretically
thread-safe, but it still needs to be proven in practice.
We think this is a significant step because the editor was the main piece missing in Brick
and it will finally allow us to build value that can be directly perceived by regular
users on top of Brick and this, in turn, will generate more traction. Please also note
that because now Bloc is directly embeddable in Morphic it means that we can actually
start using it right away. For example, the picture below shows the text element being
shown through a live preview in the GTInspector.
This is another puzzle piece towards the final goal of engineering the future of the Pharo
user interface. There is still a long way to go to reach that goal, but considering the
work that is behind us, that goal that looked so illusive when Alain and Stef initiated
the Bloc project is now palpable.
We will continue the work on this over the next period and we expect to announce new
developments soon.
If you want to play with it, you can load the code like this (works in both Pharo 6 and
7):
Iceberg enableMetacelloIntegration: true.
Metacello new
baseline: 'Brick';
repository: 'github://pharo-graphics/Brick/src';
load: #development
Please let us know what you think.
Cheers,
Alex and Doru
--
www.tudorgirba.com
www.feenk.com
"What is more important: To be happy, or to make happy?"