haven

module
v0.0.0-...-103704b Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 26, 2022 License: 0BSD

README

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.

Goal
----
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 today's 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.

Scope
-----
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.

Projects
--------
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.

hnc -- netcat-alike
~~~~~~~~~~~~~~~~~~~
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.

hpcu -- PRIMARY-CLIPBOARD unifier
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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.

hswg -- static website generator
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
link:hswg/README.adoc[See hswg's README for details.]

ht -- terminal emulator
~~~~~~~~~~~~~~~~~~~~~~~
Similar scope to st(1).  Clever display of internal padding for better looks.

he -- text 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 "// ".

.Resources:
 - http://doc.cat-v.org/plan_9/4th_edition/papers/sam/

ho -- all-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:

 - http://rachbelaid.com/postgres-full-text-search-is-good-enough/
 - https://www.sqlite.org/fts3.html#full_text_index_queries (FTS4 seems better)

htd -- translation dictionary
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This specific kind of application doesn't 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 don't
really strive for random access and memory-efficiency (those 120M that sdtui
takes with my 10 dictionaries isn't particularly bad), pack everything with
archive/zip.

Instead of ICU we may use x/text/collate and that's about everything we need.
Since we have our own format, we may expect the index to be ordered by the
locale's rules, assuming they don't change between versions.

hfm -- file 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.

hss -- spreadsheets
~~~~~~~~~~~~~~~~~~~
The first version doesn't need to be able to reference other cells, and can more
or less be a CSV editor.

We can take inspiration from Excel:

 - https://docs.microsoft.com/en-us/office/client-developer/excel/excel-recalculation
 - https://www.microsoft.com/en-us/research/uploads/prod/2018/03/build-systems.pdf

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

Directories

Path Synopsis
hnc is a netcat-alike that shuts down properly.
hnc is a netcat-alike that shuts down properly.
hpcu unifies the PRIMARY and CLIPBOARD X11 selections for text contents.
hpcu unifies the PRIMARY and CLIPBOARD X11 selections for text contents.
Program hswg is a static website generator employing libasciidoc with added support for two-line/underlined titles, and postprocessing "wiki" InterLinks.
Program hswg is a static website generator employing libasciidoc with added support for two-line/underlined titles, and postprocessing "wiki" InterLinks.
Package nexgb provides the X Go Binding, which is a low-level API to communicate with the core X protocol and many of the X extensions.
Package nexgb provides the X Go Binding, which is a low-level API to communicate with the core X protocol and many of the X extensions.
bigreq
Package bigreq is the X client API for the BIG-REQUESTS extension.
Package bigreq is the X client API for the BIG-REQUESTS extension.
composite
Package composite is the X client API for the Composite extension.
Package composite is the X client API for the Composite extension.
damage
Package damage is the X client API for the DAMAGE extension.
Package damage is the X client API for the DAMAGE extension.
dpms
Package dpms is the X client API for the DPMS extension.
Package dpms is the X client API for the DPMS extension.
dri2
Package dri2 is the X client API for the DRI2 extension.
Package dri2 is the X client API for the DRI2 extension.
examples
Package examples contains a few different use cases of XGB, like creating a window, reading properties, and querying for information about multiple heads using the Xinerama or RandR extensions.
Package examples contains a few different use cases of XGB, like creating a window, reading properties, and querying for information about multiple heads using the Xinerama or RandR extensions.
examples/create-window
Example create-window shows how to create a window, map it, resize it, and listen to structure and key events (i.e., when the window is resized by the window manager, or when key presses/releases are made when the window has focus).
Example create-window shows how to create a window, map it, resize it, and listen to structure and key events (i.e., when the window is resized by the window manager, or when key presses/releases are made when the window has focus).
examples/get-active-window
Example get-active-window reads the _NET_ACTIVE_WINDOW property of the root window and uses the result (a window id) to get the name of the window.
Example get-active-window reads the _NET_ACTIVE_WINDOW property of the root window and uses the result (a window id) to get the name of the window.
examples/randr
Example randr uses the randr protocol to get information about the active heads.
Example randr uses the randr protocol to get information about the active heads.
examples/xinerama
Example xinerama shows how to query the geometry of all active heads.
Example xinerama shows how to query the geometry of all active heads.
ge
Package ge is the X client API for the Generic Event Extension extension.
Package ge is the X client API for the Generic Event Extension extension.
glx
Package glx is the X client API for the GLX extension.
Package glx is the X client API for the GLX extension.
randr
Package randr is the X client API for the RANDR extension.
Package randr is the X client API for the RANDR extension.
record
Package record is the X client API for the RECORD extension.
Package record is the X client API for the RECORD extension.
render
Package render is the X client API for the RENDER extension.
Package render is the X client API for the RENDER extension.
res
Package res is the X client API for the X-Resource extension.
Package res is the X client API for the X-Resource extension.
screensaver
Package screensaver is the X client API for the MIT-SCREEN-SAVER extension.
Package screensaver is the X client API for the MIT-SCREEN-SAVER extension.
shape
Package shape is the X client API for the SHAPE extension.
Package shape is the X client API for the SHAPE extension.
shm
Package shm is the X client API for the MIT-SHM extension.
Package shm is the X client API for the MIT-SHM extension.
xcmisc
Package xcmisc is the X client API for the XC-MISC extension.
Package xcmisc is the X client API for the XC-MISC extension.
xevie
Package xevie is the X client API for the XEVIE extension.
Package xevie is the X client API for the XEVIE extension.
xf86dri
Package xf86dri is the X client API for the XFree86-DRI extension.
Package xf86dri is the X client API for the XFree86-DRI extension.
xf86vidmode
Package xf86vidmode is the X client API for the XFree86-VidModeExtension extension.
Package xf86vidmode is the X client API for the XFree86-VidModeExtension extension.
xfixes
Package xfixes is the X client API for the XFIXES extension.
Package xfixes is the X client API for the XFIXES extension.
xgbgen
xgbgen constructs Go source files from xproto XML description files.
xgbgen constructs Go source files from xproto XML description files.
xinerama
Package xinerama is the X client API for the XINERAMA extension.
Package xinerama is the X client API for the XINERAMA extension.
xprint
Package xprint is the X client API for the XpExtension extension.
Package xprint is the X client API for the XpExtension extension.
xproto
Package xproto is the X client API for the extension.
Package xproto is the X client API for the extension.
xselinux
Package xselinux is the X client API for the SELinux extension.
Package xselinux is the X client API for the SELinux extension.
xtest
Package xtest is the X client API for the XTEST extension.
Package xtest is the X client API for the XTEST extension.
xv
Package xv is the X client API for the XVideo extension.
Package xv is the X client API for the XVideo extension.
xvmc
Package xvmc is the X client API for the XVideo-MotionCompensation extension.
Package xvmc is the X client API for the XVideo-MotionCompensation extension.
This is an example TLS-autodetecting chat server.
This is an example TLS-autodetecting chat server.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL