Compare commits

..

No commits in common. "e6bf88673f31e62050333f98d6bcd407ac34c13d" and "d3628928b919bd12deb224f5c3db3a7be5e7140b" have entirely different histories.

8 changed files with 19 additions and 108 deletions

View File

@ -1,7 +1,7 @@
# Ubuntu 18.04 LTS and OpenBSD 6.4 # Ubuntu 18.04 LTS and OpenBSD 6.4
cmake_minimum_required (VERSION 3.10) cmake_minimum_required (VERSION 3.10)
project (xK VERSION 1.5.0 project (xK VERSION 1.5.0
DESCRIPTION "IRC daemon, bot, TUI client and its web frontend" LANGUAGES C) DESCRIPTION "IRC daemon, bot, TUI client and X11/web frontends" LANGUAGES C)
# Options # Options
option (WANT_READLINE "Use GNU Readline for the UI (better)" ON) option (WANT_READLINE "Use GNU Readline for the UI (better)" ON)

4
NEWS
View File

@ -27,7 +27,9 @@
* xC: added a relay interface, enabled through the general.relay_bind option * xC: added a relay interface, enabled through the general.relay_bind option
* Added a web frontend for xC called xP * Added an experimental X11 frontend for xC called xF
* Added an experimental web frontend for xC called xP
1.5.0 (2021-12-21) "The Show Must Go On" 1.5.0 (2021-12-21) "The Show Must Go On"

View File

@ -2,7 +2,7 @@ xK
== ==
'xK' (chat kit) is an IRC software suite consisting of a daemon, bot, terminal 'xK' (chat kit) is an IRC software suite consisting of a daemon, bot, terminal
client, and a web frontend for the client. It's all you're ever going to client, and X11/web frontends for the client. It's all you're ever going to
need for chatting, so long as you can make do with slightly minimalist software. need for chatting, so long as you can make do with slightly minimalist software.
They're all lean on dependencies, and offer a maximally permissive licence. They're all lean on dependencies, and offer a maximally permissive licence.
@ -26,9 +26,16 @@ As a unique bonus, you can launch a full text editor from within.
xP xP
-- --
The web frontend for 'xC', making use of its networked relay interface. The web frontend for 'xC', making use of its networked relay interface.
It intentionally differs in that it uses a sans-serif font, and it shows Fully usable, despite some rough edges. It intentionally differs in that it
the list of all buffers in a side panel. Otherwise it is a near replica, uses a sans-serif font, and shows the list of all buffers in a side panel.
including keyboard shortcuts. Otherwise it aims to be a near replica.
xF
--
The X11 frontend for 'xC', making use of its networked relay interface.
This subproject has been put on hold, partly because of its massive overlap
with 'xP', and is hidden behind a CMake option.
xD xD
-- --
@ -71,6 +78,7 @@ Build-only dependencies:
Common runtime dependencies: openssl + Common runtime dependencies: openssl +
Additionally for 'xC': curses, libffi, readline >= 6.0 or libedit >= 2013-07-12, Additionally for 'xC': curses, libffi, readline >= 6.0 or libedit >= 2013-07-12,
lua >= 5.3 (optional) + lua >= 5.3 (optional) +
Additionally for 'xF': x11, xft
$ git clone --recursive https://git.janouch.name/p/xK.git $ git clone --recursive https://git.janouch.name/p/xK.git
$ mkdir xK/build $ mkdir xK/build

1
xC.c
View File

@ -15025,7 +15025,6 @@ process_formatting_escape (const struct pollfd *fd, struct app_context *ctx)
case 'u': case 'u':
case '_': CALL_ (ctx->input, insert, "\x1f"); break; case '_': CALL_ (ctx->input, insert, "\x1f"); break;
case 'v': CALL_ (ctx->input, insert, "\x16"); break; case 'v': CALL_ (ctx->input, insert, "\x16"); break;
case 'r':
case 'o': CALL_ (ctx->input, insert, "\x0f"); break; case 'o': CALL_ (ctx->input, insert, "\x0f"); break;
default: default:

View File

@ -2,7 +2,7 @@
.SUFFIXES: .SUFFIXES:
outputs = xP proto.go public/proto.js public/mithril.js outputs = xP proto.go public/proto.js public/mithril.js
all: $(outputs) public/ircfmt.woff2 all: $(outputs)
xP: xP.go proto.go xP: xP.go proto.go
go build -o $@ go build -o $@
@ -10,8 +10,6 @@ proto.go: ../xC-gen-proto.awk ../xC-gen-proto-go.awk ../xC-proto
awk -f ../xC-gen-proto.awk -f ../xC-gen-proto-go.awk ../xC-proto > $@ awk -f ../xC-gen-proto.awk -f ../xC-gen-proto-go.awk ../xC-proto > $@
public/proto.js: ../xC-gen-proto.awk ../xC-gen-proto-js.awk ../xC-proto public/proto.js: ../xC-gen-proto.awk ../xC-gen-proto-js.awk ../xC-proto
awk -f ../xC-gen-proto.awk -f ../xC-gen-proto-js.awk ../xC-proto > $@ awk -f ../xC-gen-proto.awk -f ../xC-gen-proto-js.awk ../xC-proto > $@
public/ircfmt.woff2: gen-ircfmt.awk
awk -v Output=$@ -f gen-ircfmt.awk
public/mithril.js: public/mithril.js:
curl -Lo $@ https://unpkg.com/mithril/mithril.js curl -Lo $@ https://unpkg.com/mithril/mithril.js
clean: clean:

View File

@ -1,89 +0,0 @@
# gen-ircfmt.awk: generate a supplementary font for IRC formatting characters
#
# Copyright (c) 2022, Přemysl Eric Janouch <p@janouch.name>
# SPDX-License-Identifier: 0BSD
#
# Usage: awk -v Output=static/ircfmt.woff2 -f gen-ircfmt.awk
# Clean up SVG byproducts yourself.
BEGIN {
if (!Output) {
print "Error: you must specify the output filename"
exit 1
}
}
function glyph(name, code, path, filename, actions, cmd) {
filename = Output "." name ".svg"
# Inkscape still does a terrible job at the stroke-to-path conversion.
actions = \
"select-by-id:group;" \
"selection-ungroup;" \
"select-clear;" \
"select-by-id:path;" \
"object-stroke-to-path;" \
"select-by-id:clip;" \
"path-intersection;" \
"select-all;" \
"path-combine;" \
"export-overwrite;" \
"export-filename:" filename ";" \
"export-do"
# These dimensions fit FontForge defaults, and happen to work well.
cmd = "inkscape --pipe --actions='" actions "'"
print "<?xml version='1.0' encoding='UTF-8' standalone='no'?>\n" \
"<svg version='1.1' xmlns='http://www.w3.org/2000/svg'\n" \
" width='1000' height='1000' viewBox='0 0 1000 1000'>\n" \
" <rect x='0' y='0' width='1000' height='1000' />\n" \
" <g id='group' transform='translate(200 200) scale(60, 60)'>\n" \
" <rect id='clip' x='0' y='0' width='10' height='10' />\n" \
" <path id='path' stroke-width='2' fill='none' stroke='#fff'\n" \
" d='" path "' />\n" \
" </g>\n" \
"</svg>\n" | cmd
close(cmd)
print "Select(0u" code ")\n" \
"Import('" filename "')" | FontForge
}
BEGIN {
FontForge = "fontforge -lang=ff -"
print "New()" | FontForge
# Designed a 10x10 raster, going for maximum simplicity.
glyph("B", "02", "m 6,5 c 0,0 2,0 2,2 0,2 -2,2 -2,2 h -3 v -8 h 2.5 c 0,0 2,0 2,2 0,2 -2,2 -2,2 h -2 Z")
glyph("C", "03", "m 7.6,7 A 3,4 0 0 1 4.25,8.875 3,4 0 0 1 2,5 3,4 0 0 1 4.25,1.125 3,4 0 0 1 7.6,3")
glyph("I", "1D", "m 3,9 h 4 m 0,-8 h -4 m 2,-1 v 10")
glyph("M", "11", "m 2,10 v -10 l 3,6 3,-6 v 10")
glyph("O", "0F", "m 1,9 l 8,-8 M 2,5 a 3,3 0 1 0 6,0 3,3 0 1 0 -6,0 z")
#glyph("R", "0F", "m 3,10 v -9 h 2 c 0,0 2.5,0 2.5,2.5 0,2.5 -2.5,2.5 -2.5,2.5 h -2 2.5 l 2.5,4.5")
glyph("S", "1E", "m 7.5,3 c 0,-1 -1,-2 -2.5,-2 -1.5,0 -2.5,1 -2.5,2 0,3 5,1 5,4 0,1 -1,2 -2.5,2 -1.5,0 -2.5,-1 -2.5,-2")
glyph("U", "1F", "m 2.5,0 v 6.5 c 0,1.5 1,2.5 2.5,2.5 1.5,0 2.5,-1 2.5,-2.5 v -6.5")
glyph("V", "16", "m 2,-1 3,11 3,-11")
# In practice, your typical browser font will overshoot its em box,
# so to make the display more cohesive, we need to do the same.
# Sadly, sf->use_typo_metrics can't be unset from FontForge script--
# this is necessary to prevent the caret from jumping upon the first
# inserted non-formatting character in xP's textarea.
# https://iamvdo.me/en/blog/css-font-metrics-line-height-and-vertical-align
print "SelectAll()\n" \
"Scale(115, 115, 0, 0)\n" \
"SetOS2Value('WinAscentIsOffset', 1)\n" \
"SetOS2Value('WinDescentIsOffset', 1)\n" \
"SetOS2Value('HHeadAscentIsOffset', 1)\n" \
"SetOS2Value('HHeadDescentIsOffset', 1)\n" \
"CorrectDirection()\n" \
"AutoWidth(100)\n" \
"AutoHint()\n" \
"AddExtrema()\n" \
"RoundToInt()\n" \
"SetFontNames('IRCFormatting-Regular'," \
" 'IRC Formatting', 'IRC Formatting Regular', 'Regular'," \
" 'Copyright (c) 2022, Premysl Eric Janouch')\n" \
"Generate('" Output "')\n" | FontForge
close(FontForge)
}

Binary file not shown.

View File

@ -1,14 +1,7 @@
@font-face {
src: url('ircfmt.woff2') format('woff2');
font-family: 'IRC Formatting';
font-weight: normal;
font-style: normal;
}
body { body {
margin: 0; margin: 0;
padding: 0; padding: 0;
/* Firefox only renders C0 within the textarea, why? */ font-family: sans-serif;
font-family: 'IRC Formatting', sans-serif;
font-size: clamp(0.5rem, 2vw, 1rem); font-size: clamp(0.5rem, 2vw, 1rem);
} }
.xP { .xP {
@ -140,7 +133,7 @@ button:hover:active {
font-family: monospace; font-family: monospace;
overflow-y: auto; overflow-y: auto;
} }
.log, .content, .completions { .log, .content {
/* Note: https://bugs.chromium.org/p/chromium/issues/detail?id=1261435 */ /* Note: https://bugs.chromium.org/p/chromium/issues/detail?id=1261435 */
white-space: break-spaces; white-space: break-spaces;
overflow-wrap: break-word; overflow-wrap: break-word;