Start X11 and web frontends for xC

For this, we needed a wire protocol.  After surveying available options,
it was decided to implement an XDR-like protocol code generator
in portable AWK.  It now has two backends, per each of:

 - xF, the X11 frontend, is in C, and is meant to be the primary
   user interface in the future.

 - xP, the web frontend, relies on a protocol proxy written in Go,
   and is meant for use on-the-go (no pun intended).

They are very much work-in-progress proofs of concept right now,
and the relay protocol is certain to change.
This commit is contained in:
2022-08-08 04:39:20 +02:00
parent 2160d03794
commit 1639235a48
20 changed files with 2798 additions and 91 deletions

109
xP/public/xP.css Normal file
View File

@@ -0,0 +1,109 @@
body {
margin: 0;
padding: 0;
font-family: sans-serif;
}
.xP {
height: 100vh;
display: flex;
flex-direction: column;
overflow: hidden;
}
.title, .status {
background: #f8f8f8;
border-bottom: 1px solid #ccc;
padding: .05rem .3rem;
}
.middle {
flex: auto;
display: flex;
flex-direction: row;
overflow: hidden;
}
.list {
overflow-y: auto;
border-right: 1px solid #ccc;
min-width: 10rem;
}
.item {
padding: .05rem .3rem;
cursor: default;
}
.item.active {
font-weight: bold;
}
/* Only Firefox currently supports align-content: safe end, thus this. */
.buffer-container {
flex: auto;
display: flex;
flex-direction: column;
overflow: hidden;
}
.filler {
flex: auto;
}
.buffer {
display: grid;
grid-template-columns: max-content auto;
overflow-y: auto;
}
.date {
padding: .3rem;
grid-column: span 2;
font-weight: bold;
}
.time {
padding: .1rem .3rem;
background: #f8f8f8;
color: #bbb;
border-right: 1px solid #ccc;
}
.mark {
padding-right: .3rem;
text-align: center;
display: inline-block;
min-width: 2rem;
}
.mark.error {
color: red;
}
.mark.join {
color: green;
}
.mark.part {
color: red;
}
.content {
padding: .1rem .3rem;
white-space: pre-wrap;
}
.content span.b {
font-weight: bold;
}
.content span.i {
font-style: italic;
}
.content span.u {
text-decoration: underline;
}
.content span.s {
text-decoration: line-through;
}
.content span.m {
font-family: monospace;
}
.status {
border-top: 2px solid #fff;
}
textarea {
padding: .05rem .3rem;
font-family: inherit;
}