Howl Text Editor

Howl UI

The howl text editor seems to be the missing text editor I have been looking for on OpenBSD. I have used textmate on macOS and later Sublime Text. But I am using OpenBSD more frequently as main desktop, so I have more or less been forced to adopt vim as the code editor.

I am able to use vim reasonably well, but I still miss the simplicity and effectiveness of sublime text. And although vim has much power I still think the mental load is too high compared with the power/effectiveness it provides.

I want to have a rather basic text editor with only a few bells and whistles.

I have also tried and hoped for the new breed of editors based on Electron like Atom and even Visual Studio Code. But even though electron is built to be portable it seems like a huge task to port and maintain the framework. See Measuring the weight of an electron for previous efforts to port electron to OpenBSD.

Generally I have been very content with sublime (on macOS and Linux), but there will probably never be native support for OpenBSD.

I noticed howl editor on a text editor comparison article Best open source text editors. The howl editor might be exactly what I have been looking for.

It still seems to be early days for this editor, but I have high hopes when it reach even more stability. Feature-wise 0.5 release seems to be good enough for my needs.

Howl features

Documentation is really good, which is a feature in itself. I am spoiled with excellent documentation from OpenBSD project where undocumented features are considered a bug.

The editor is really simple in its structure. It has a text view and command prompt (ALT-x) where all supported commands are accessible and briefly documented. By just pressing TAB after you activated the command prompt (ALT-x) you can see all supported commands. This is really good for feature exploration.

Personally I have always preferred a project file view to allow easy access to project files. File open in howl (CTRL-o) open a file system view (directly in the command view) which also is an effective way to present file structure when opening files. There is also fuzzy search (CTRL-P) for files within a project similar to textmate's. There is even an open recent (CTRL-SHIFT-o) for recent files. Files are closed with CTRL-w.

In general tab completion is supported very well in the command prompt.

Editor close doesn't have a shortcut associated with it by default. That is done by ALT-x :q. But to add a shortcut is also very simple.

The editor is customised through lua or moonscript code.

I had to add shortcuts for two commands, for paragraph movement, that I constantly use.

Word movement is already configured to CTRL-← (cursor_word_left) and CTRL-→ (cursor_word_right). I needed paragraph movement to be associated with CTRL-↑ and CTRL-↓.

First I checked that the bindings wasn't already taken by another command. I could search all shortcuts (shortcuts are visible in the list of commands) that include ctrl by using tab completion in the command view.

ALT-x :ctrl <TAB>

After checking if the shortcuts were used I just have to bind the shortcut's with the corresponding commands in my users howl init file ~/.howl/init.lua.

howl.bindings.push {
  editor = {
    ctrl_up = 'cursor-para-up',
    ctrl_down = 'cursor-para-down',
    ctrl_shift_down = 'editor-scroll-down',
  },
}

After using the editor for some time, it seems to include everything I need on a regular basis. Go explore more features in the official docs.

Installation on OpenBSD

OpenBSD has been supported since 0.5 release release. But my guess is that its not widely used. I imagine that most OpenBSD users use one of the traditional UNIX editors like vi or emacs.

There is still no package for howl, but that should be quite easy to include because of the trivial build process on OpenBSD.

So instead of a simply pkg_add howl, you currently need to build it manually.

pkg_add gmake
wget https://github.com/howl-editor/howl/releases/download/0.5.1/howl-0.5.2.tgz
tar xzf howl-0.5.2.tgz 
cd howl-0.5.2/src/
gmake install
...
All done.
howl

What a great addition to the text editor space!

libunwind error - OpenBSD 6.5 and later

I got errors when compiling howl 0.6.

cd howl-0.6/src
gmake
...
cc -o howl main.o process_helpers.o deps/lpeg-0.10.2/lpeg.o deps/LuaJIT-2.1.0-beta3/src/libluajit.a -lm -L/usr/local/lib -Wl,-rpath-link,/usr/X11R6/lib -Wl,--export-dynamic -pthread -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgmodule-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl -Wl,-E
ld: error: undefined symbol: _Unwind_RaiseException
>>> referenced by lj_err.c

It seems like the default compiler has switched to clang.

# cc --version
OpenBSD clang version 7.0.1 (tags/RELEASE_701/final) (based on LLVM 7.0.1)
# gcc --version
gcc (GCC) 4.2.1 20070719 

So to make it compile I had to force it to use gcc. Note gcc binary is called egcc in later versions of OpenBSD.

pkg_add gcc
gmake CC=egcc 
gmake install

I need to update the port according to this as well. See Porters Guide.

See https://abi-laboratory.pro/index.php?view=compat_report&l=libunwind&v1=0.98.6&v2=0.99&obj=aa3d9&kind=abi where referenced symbols was removed.

See http://openbsd-archive.7691.n7.nabble.com/clang-luajit-unwinding-td319765.html.

XFCE desktop item

$ cat howl.desktop                                                                    
[Desktop Entry]
Name=Howl
GenericName=Howl Editor
Comment=Code with the pack
Exec=/usr/local/bin/howl --reuse %F
Terminal=false
Type=Application
StartupNotify=true
MimeType=text/plain;
Icon=/usr/local/share/icons/hicolor/128x128/apps/howl.png                                           
Categories=Development;GTK;Utility;TextEditor;
Actions=
Keywords=Text;Plaintext;Write;Code;

Howl port

I am currently working on a port for OpenBSD.

Current version has been tested on amd64 and OpenBSD 6.2.

If you have a ports source tree installed you can try the package right now.

cd /usr/ports/editors
git clone https://github.com/peterljung/howleditor.git
cd howleditor
make install

So soon pkg_add howleditor may be possible ...