Testing ground for GUI
Go to file
Přemysl Eric Janouch 103704b183
Punt hid back where it came from
2022-09-26 13:37:51 +02:00
hnc Name change 2020-08-01 14:01:58 +02:00
hpcu hpcu: eliminate infinite looping 2019-02-04 09:27:10 +01:00
hswg Bump libasciidoc 2022-03-20 23:28:45 +01:00
ht ht: add generated wcwidth tables and algorithm 2018-10-07 18:09:09 +02:00
nexgb Name change 2020-08-01 14:01:58 +02:00
prototypes xgb-image: fix visual searching 2021-11-15 12:12:23 +01:00
.gitignore Update .gitignore 2021-06-30 06:24:59 +02:00
LICENSE hswg: make AttrList return nil for missing attrs 2022-02-28 05:05:52 +01:00
README.adoc Punt hid back where it came from 2022-09-26 13:37:51 +02:00
go.mod Bump libasciidoc 2022-03-20 23:28:45 +01:00
go.sum Bump libasciidoc 2022-03-20 23:28:45 +01:00


Project haven

haven is an umbrella project for a range of mostly desktop applications.

This README is being converted into a wiki on the wiki branch, also publicly available at https://p.janouch.name/haven/Haven.html. We should only document here that which has been created, as the extent of the rationale and plans is gigantic and seems to have a life of its own.


The greater goal is to create a fresh computing environment for daily work and play—easily controllable, reasonably complex, both visually and internally unified and last but not least responsive. One should be able to use it comfortably with a 60% keyboard and no pointing device.

haven serves as a testing ground, leaning on the side of compromises. It aims to use todays Linux desktop as a support, relying on X11/Wayland, existing window managers and web browsers.

The focus is therefore on going breadth-first, not depth-first. Applications only need to be good enough to be able to replace their older siblings at all. I.e. for me personally.


Subproject names aim to have the minimum viable, reasonably identifiable name. To group them together, a common prefix of "h" is used. The second column is what should be used as the name in .desktop files, just like the GNOME project figured out it would make sense:

  • hbe - bitmap editor

  • hbfe - bitmap font editor

  • he - text editor

  • hfm - file manager

  • hm - mail client

  • hnc - netcat-alike

  • ho - all-powerful organizer

  • hsm - system monitor

  • hss - spreadsheets

  • htd - translation dictionary

  • ht - terminal emulator

  • htk - GUI toolkit library

See Projects for more information about the individual projects.

Some taken names in Debian: hd (important), hte, hy.


These are sorted in the order in which they should be created in order to gain the best possible momentum. The htk GUI toolkit is implied as a side product permeating the entire list.

Some information is omitted from these descriptions and lies either in my head or in my other notes.


The result of testing xK/xS with telnet, OpenSSL s_client, OpenBSD nc, GNU nc, and Ncat is that neither of them can properly shutdown the connection. We need a good implementation with TLS support.


An improved replacement for autocutsel in selection synchronization "mode":

  • using only one OS process;

  • not polling selections twice a second unnecessarily;

  • calling SetSelectionOwner on change even when it already owns the selection, so that XFIXES SelectionNotify events are delivered;

  • not using cut buffers for anything.

Only UTF8_STRING-convertible selections are synchronized.

hswgstatic website generator

htterminal emulator

Similar scope to st(1). Clever display of internal padding for better looks.

hetext editor

VIM controls, no scripting, no syntax highlight, single-file, made for variable-width/proportional fonts. Initially done primarily to produce a text editing widget, which is going to be an interesting challenge, arguably better solved by whole program composition. Scintilla may provide some inspiration.

In the second stage, support for the Language Server Protocol will be added so that the project can be edited using its own tools. Some scripting, perhaps a tiny subset of VimL, might be desirable. Or other means of configuration.

Visual block mode or the color column may still be implemented.

The real model for the editor is Qt Creator with FakeVIM, though this is not to be a clone of it, e.g. the various "Output" lists could be just special buffers, which may be have names starting on "// ".

hoall-powerful organizer

Zettelkasten with fulltext search, arbitrary reciprocal links, arbitrary tags. Flat storage. Should be able to use translation dictionaries for search hints.

Indexing and search may be based on a common database, no need to get all fancy:

htdtranslation dictionary

This specific kind of application doesnt need a lot of user interface either, just a tab bar, text entry and two columns of text with simple formatting.

For simplicity we will establish a custom dictionary format based on either simple compress/gzip with separate files in StarDict style or, since we dont really strive for random access and memory-efficiency (those 120M that sdtui takes with my 10 dictionaries isnt particularly bad), pack everything with archive/zip.

Instead of ICU we may use x/text/collate and thats about everything we need. Since we have our own format, we may expect the index to be ordered by the locales rules, assuming they dont change between versions.

hfmfile manager

All we need to achieve here is replace Midnight Commander, which besides the most basic features includes a VFS for archives. The editing widget in read-only mode could be used for F3. The shell is going to work very simply, creating a PTY device and running things under TERM=dumb while decoding SGR, or one could decide to run a new terminal emulator with a different shortcut. ht could probably also be integrated.

Eventually the number of panels should be arbitrary with proper shortcuts for working with them. We might also integrate a special view for picture previews, which might or might not deserve its own program.


The first version doesnt need to be able to reference other cells, and can more or less be a CSV editor.

We can take inspiration from Excel:

The rest

Currently there are no significant, specific plans about the other applications.