Compare commits

...

231 Commits

Author SHA1 Message Date
Přemysl Eric Janouch 13d2ff115b
xM: improve the bundle icon a bit 3 months ago
Přemysl Eric Janouch 9e4692bb09
xM: generate and use a bundle icon 3 months ago
Přemysl Eric Janouch 1c4343058d
Add a Cocoa frontend for xC
Some work remains to be done to get it to be even as good
as the Win32 frontend, but it's generally usable.
3 months ago
Přemysl Eric Janouch e5156cddbf
xW: render leaked lines a bit more accurately
There is no need to reset all text attributes, just the colour.
4 months ago
Přemysl Eric Janouch 34521e61c1
xP/xW: fix buffer rename handling
Maintaining string pointers to the current/last buffer
means that renames invalidate them.
4 months ago
Přemysl Eric Janouch c22dd67fc1
xC: send missing relay events for newly added servers 4 months ago
Přemysl Eric Janouch 274d5f03e7
xC: give the /away command a proper handler
Multiple words should be passed to the server as a single argument.
4 months ago
Přemysl Eric Janouch 2f19e5a733
xW: improve command sending 4 months ago
Přemysl Eric Janouch b9cdabca5d
xC: fix relay handling of missing log files
Intermediate error messages would trash the prepared static buffer.
4 months ago
Přemysl Eric Janouch f60ca43156
xW: do not unnecessarily enter compatibility mode 4 months ago
Přemysl Eric Janouch afe4e61f08
xW: mark a footgun
These messages are used by IsDialogMessage(), and use the WM_USER range.
4 months ago
Přemysl Eric Janouch 8d9d1c60ec
xW: make Up/Down go through input history
The input field isn't multiline, so this doesn't pose an issue.
Otherwise, we'd have to check if we're on the top line first.
5 months ago
Přemysl Eric Janouch 8c1464822b
xW: don't delay sending out pongs 5 months ago
Přemysl Eric Janouch fcd1b8e011
xW: improve beeping
This adds yet another build dependency,
but it's better than the alternatives of handling it in code.
5 months ago
Přemysl Eric Janouch 3d345987c3
xW: cleanup 5 months ago
Přemysl Eric Janouch 3e37efd9cd
xW: show a connect dialog when run without args 5 months ago
Přemysl Eric Janouch efb25b8aae
xW: un-highlight the icon when activating buffers 5 months ago
Přemysl Eric Janouch e72793e315
xW: make newline before unread marker conditional 5 months ago
Přemysl Eric Janouch 5a412ab6e2
xW: handle WM_SYSCOLORCHANGE 5 months ago
Přemysl Eric Janouch 81bc578773
xW: add missing date change handling 5 months ago
Přemysl Eric Janouch 100de5ac2d
xC: fix Readline 6.3 compatibility 5 months ago
Přemysl Eric Janouch c157d3369f
xP: make Page Up/Down in editor scroll the buffer
Just like in xW recently.  It is unlikely that the user would want
to use these keys to move the cursor.  Ctrl+Home/End still work,
as does holding Up/Down arrows.

Also stop using the deprecated and somewhat cryptic keyCode.
5 months ago
Přemysl Eric Janouch 8b5ea67aff
xW: fix Clang build 5 months ago
Přemysl Eric Janouch 6f02af814f
xW: store the largest program icon in PNG format
This shaves off about half a megabyte.
5 months ago
Přemysl Eric Janouch 90859107c8
xW: set version information 5 months ago
Přemysl Eric Janouch 0219dbd026
Add a Win32 frontend for xC
This has been more of an exercise.  The performance of Msftedit.dll
is rather abysmal, and its interface isn't the most accomodating.

That said, the frontend is quite usable, at least on Windows 10+.
5 months ago
Přemysl Eric Janouch 1da4699a7a
Cleanup 5 months ago
Přemysl Eric Janouch 9e993c50e6
xC: don't crash with unknown terminals
It would be possible to avoid using cur_term fields in this case,
but the program would likely be of little use anyway.
5 months ago
Přemysl Eric Janouch b3e9218b23
Fix Cygwin build warnings 5 months ago
Přemysl Eric Janouch bc8867eb22
Fix the integration test
IRCv3 capabilities broke it a bit.

Also change it so that it doesn't destroy existing configuration.
5 months ago
Přemysl Eric Janouch ec33adba35
Update README.adoc 5 months ago
Přemysl Eric Janouch 6f596f1dcb
Move project version to file, add xS manual page
So far Go applications remain independent to handle Nix's inability
to easily combine them with the CMake part.

There is also no "install" target, because any packagers will want to
adjust installation paths manually, and there is no configure step.
5 months ago
Přemysl Eric Janouch abcff46dc4
xC: fix an OpenBSD build warning
sys/cdefs.h makes _XOPEN_SOURCE cause _POSIX_C_SOURCE to be overriden.
5 months ago
Přemysl Eric Janouch 8d9ce92758
README.adoc: update package information 5 months ago
Přemysl Eric Janouch 4bb9449e47
Fix the static analysis test
Adjust its query so that it doesn't cause a particular false positive.
6 months ago
Přemysl Eric Janouch 50f70f93bb
xC: fix a harmless copy-paste error 6 months ago
Přemysl Eric Janouch 3f9a365d36
xC: improve the --format mode
Avoid having formatting spill over the rest of the line,
by placing the automatic formatting reset before newlines.

Also handle longer lines properly.
7 months ago
Přemysl Eric Janouch 9932b35a10
xP: highlight hovered buffer list items
To make it apparent which one would be closed by a middle click.
8 months ago
Přemysl Eric Janouch af5f209c53
xP: make middle click close buffers
As if they were tabs, to save pointless typing.
8 months ago
Přemysl Eric Janouch 6bfe577f1b
xP: make the buffer list selectable by Vimium 8 months ago
Přemysl Eric Janouch 1079189381
xP: render date changes as they happen 11 months ago
Přemysl Eric Janouch c58b772905
xP: use the correct log function 11 months ago
Přemysl Eric Janouch 26ed2dbc77
xC: fully synchronize input history with frontends
The missing parts were:

 - frontends to client
 - client to frontends after the initial sync
 - frontend to other frontends
1 year ago
Přemysl Eric Janouch 4b7258cba0
xP: fix ESC H detection on Macintosh systems 1 year ago
Přemysl Eric Janouch 9dc3dd02f3
xP: disable WebSocket compression on Safari
Wildly known to be broken.
1 year ago
Přemysl Eric Janouch a7c3ed7cc1
xC: clean up 1 year ago
Přemysl Eric Janouch 807a8c37d9
Bump liberty, improve fallback manual page output 1 year ago
Přemysl Eric Janouch c4707e2803
xC/xP: send buffer input history during sync
This transfer is currenly quite simplistic,
but it paves the way for further extensions.
1 year ago
Přemysl Eric Janouch 46d68eacce
Move protocol code generators to liberty
This part of the project is now more or less stable.
1 year ago
Přemysl Eric Janouch 86278c154c
Clean up protocol code generators 1 year ago
Přemysl Eric Janouch 941ee2f10c
xP: fix automatic scrolling down
Showing channel logs cancelled the AbortController forever.
Thus store it within vnodes.
1 year ago
Přemysl Eric Janouch 5b57e9b41b
xC/xP: fix unseen message counting
xC: advance unread message counters even with leaked messages,
and don't unnecessarily set the highlighted flag.  Plus clean up.

xP: make leaked non-unimportant messages advance the counter
for unimportant messages, so that the buffer doesn't get emboldened.
1 year ago
Přemysl Eric Janouch 4d99690b89
xS: parse project version from CMakeLists.txt 1 year ago
Přemysl Eric Janouch 7c74e6615d
xD: use SHA-256 for certificate fingerprints
Just like xS.  2.0.0 is the ideal time for such a breaking change.
1 year ago
Přemysl Eric Janouch 614fd98fc1
Update README 1 year ago
Přemysl Eric Janouch 5863040f93
Update documentation, clean up 1 year ago
Přemysl Eric Janouch f891e5ca63
Merge hid IRCd from haven as xS
Given that this project already contains a Go binary,
it only makes sense to put the IRCds back together.
1 year ago
Přemysl Eric Janouch 8344b09c4f
hid: rename to xS before merge into xK 1 year ago
Přemysl Eric Janouch 4d50ed111a
Bump liberty, make use of its new asciiman.awk 1 year ago
Přemysl Eric Janouch e15c9cba43
xP: use a dotted border for button focus
It's visible enough.
1 year ago
Přemysl Eric Janouch 66370387bc
Update documentation 1 year ago
Přemysl Eric Janouch 2bc3ac7b0d
Update screenshots
It's been five years since the previous xC screenshot was made.
1 year ago
Přemysl Eric Janouch 2c54f5a5dd
xP: make the overlay actually overlay 1 year ago
Přemysl Eric Janouch f2d8de3ab9
xP: support adding formatting from keyboard
Just like in xC, only with some indication.
1 year ago
Přemysl Eric Janouch 67d52a2d89
xP: fix up link detection
Allow balanced parantheses at the end of a link.
1 year ago
Přemysl Eric Janouch ef3d1cc409
xP: add formatting buttons
And fix autoscroll autoenabler, as well as toolbar padding.

Only add the basic toggles, which should be well supported.
1 year ago
Přemysl Eric Janouch e6bf88673f
xP: produce a custom font for IRC formatting
Given that the generated file needs a manual adjustment,
its small size, and the dependencies involved,
it will be checked in to the repository.
1 year ago
Přemysl Eric Janouch 4a2740313c
Give up on the X11 frontend for now
There seem to be only a few things it could bring to the table,
compared to xP, making it barely worth the effort:

 - saner keyboard controls,
 - GVIM integration,
 - slightly improved resource usage.
1 year ago
Přemysl Eric Janouch d3628928b9
xC/xP: relay and render channel modes 1 year ago
Přemysl Eric Janouch 1f0e0b1ce4
xP: only care about RPC results if requested
This prevents "No response" errors from firing for most commands.
1 year ago
Přemysl Eric Janouch 919b12510b
xC/xP: relay and render channel topics 1 year ago
Přemysl Eric Janouch 414859d309
xP: improve paging 1 year ago
Přemysl Eric Janouch 5a7f2d16df
xP: clean up DOM attributes 1 year ago
Přemysl Eric Janouch b8061b665d
Silence spurious compiler warnings 1 year ago
Přemysl Eric Janouch 807bdea2ea
Update README 1 year ago
Přemysl Eric Janouch 8a689c98b4
xC: fix autocomplete in server buffers 1 year ago
Přemysl Eric Janouch 9327333813
xC/xP: show own user's info in frontends 1 year ago
Přemysl Eric Janouch 7806d4bd4e
xC/xP: improve rendering of highlighting actions 1 year ago
Přemysl Eric Janouch c0e1cd57b2
Make sure to always find installed plugins 1 year ago
Přemysl Eric Janouch 00184811ea
xP: make the prompt look more xC-like 1 year ago
Přemysl Eric Janouch ec20fdef7b
xP: show all completion options 1 year ago
Přemysl Eric Janouch 21e5d80ab1
xC: improve Readline completion
The autocomplete for /set used to be extremely annoying,
and menu-complete-display-prefix also prevents mistaken highlights.

One downside is that using plain Tab in channels no longer
just inserts the last-talking nickname, one needs to press it twice.
1 year ago
Přemysl Eric Janouch ff243c1d11
xP: implement Readline's M-l, M-u, M-c 1 year ago
Přemysl Eric Janouch e2ef7d668c
xP: implement Readline's M-b and M-f 1 year ago
Přemysl Eric Janouch b979257c3a
xP: implement Readline's M-< and M-> 1 year ago
Přemysl Eric Janouch 840b646700
xC: reorganize relay code, improve logging
Even with one forward function declaration down,
it was possible to move most code to a more convenient location.

Most logging has thus been fixed to go to buffers.
1 year ago
Přemysl Eric Janouch 126105fa4f
xC: don't abort on accept() failure
Just disable the relay.
1 year ago
Přemysl Eric Janouch e2f3fc2e79
xC: clean up 1 year ago
Přemysl Eric Janouch b55bae50df
Update some documentation 1 year ago
Přemysl Eric Janouch 430968e5d5
xP: make non-connected states more apparent 1 year ago
Přemysl Eric Janouch d5153fe354
xC/xP: implement M-H in the web frontend 1 year ago
Přemysl Eric Janouch ee76186bef
xP: abandon the idea of a configuration file 1 year ago
Přemysl Eric Janouch 6f39aa6615
xP: use the binary protocol for incoming events
And batch event messages together as much as possible.

JSON has proven itself to be really slow
(for example, encoding/json.Marshaler is a slow interface),
and browsers have significant overhead per WS message.

Commands are still sent as JSON, sending them in binary
would be a laborious rewrite without measurable merits.

The xP server now only prints debug output when requested,
because that was another source of major slowdowns.
1 year ago
Přemysl Eric Janouch e87cc90b5e
xP: improve comments in protocol code generator 1 year ago
Přemysl Eric Janouch 98b0a4ef3d
xP: further optimize JSON marshalling 1 year ago
Přemysl Eric Janouch 9cf44aa4dd
xP: speed up log decoding 1 year ago
Přemysl Eric Janouch b53fc1918f
xP: fix log JSON serialization 1 year ago
Přemysl Eric Janouch 92f2f6895b
xP: use buffered reads 1 year ago
Přemysl Eric Janouch c1d2e38840
xP: generate our own JSON marshallers
For non-trivial types, which are expensive to serialize
with encoding/json's struct reflection.
1 year ago
Přemysl Eric Janouch f89f21a47f
xP: pass all events through one handler
This is a mild clean up.
1 year ago
Přemysl Eric Janouch fa85ea8208
xP: parallelize event reception and sending
Still trying to make the frontend load tolerably fast,
still unsuccessfully.
1 year ago
Přemysl Eric Janouch b728235b6c
xP: move to a WebSocket package with compression
Compression happens to be broken in Safari,
though luckily there are friendlier browsers one can use.
1 year ago
Přemysl Eric Janouch d31ab67268
xC: mildly optimize relay traffic 1 year ago
Přemysl Eric Janouch b2b3093e0e
xP: remove debugging protocol logs from JS 1 year ago
Přemysl Eric Janouch a551e911ab
xP: adjust buffer list iteration and styling
M-a and M-! should iterate, rather than keep jumping back
to the same buffers.

The current item wasn't visible enough,
and it jumped around in my 1.5-scale Firefox.
1 year ago
Přemysl Eric Janouch a61789637a
xP: deal with macOS/Blink for good 1 year ago
Přemysl Eric Janouch 8968100a28
xP: improve favicon behaviour
Make it black when disconnected, and orange when the document
is hidden but the current tab is highlighted.
1 year ago
Přemysl Eric Janouch 3b6c29d676
xC: silence some compiler warnings 1 year ago
Přemysl Eric Janouch b4ee523628
xP: bind buffer iteration to M-PageUp/PageDown 1 year ago
Přemysl Eric Janouch c3a52b9e4c
xP: indicate hidden buffer lines 1 year ago
Přemysl Eric Janouch 96fc12bc4c
xC/xP: send buffer type and server state
Also make PM highlighting behaviour consistent.
1 year ago
Přemysl Eric Janouch 1493d9998b
xC: clean up 1 year ago
Přemysl Eric Janouch 36f77e74fb
xP: change the favicon when highlighted 1 year ago
Přemysl Eric Janouch 23deca45c9
xP: fix non-ASCII text completion 1 year ago
Přemysl Eric Janouch 62773acaa0
xP: beep on highlight
800 Hz seems like it could match a POST beep.
1 year ago
Přemysl Eric Janouch 7e3919e25d
xP: add basic buffer input history
Bind M-p and M-n as in xC.

Also make all our bindings reachable on macOS.
1 year ago
Přemysl Eric Janouch 4bc2f736f2
xC: make terminal attributes abstract
And translate them for frontends.

This is very long overdue, and a rather significant cleanup.

Bump liberty.
1 year ago
Přemysl Eric Janouch add670212f
xP: remember buffer input selections 1 year ago
Přemysl Eric Janouch 95aa89ee97
xP: bind M-h to toggle history, and adjust focus 1 year ago
Přemysl Eric Janouch 0bc2c12eec
xP: handle the M-Tab binding from xC 1 year ago
Přemysl Eric Janouch 3330683ad6
xP: handle M-a and M-! bindings from xC 1 year ago
Přemysl Eric Janouch 0015d26dc8
xC/xP: support hiding unimportant messages at all 1 year ago
Přemysl Eric Janouch 7d5e63be1f
xC: deal with so far unexpected multiline messages
And get rid of an outdated unmarked TODO comment.
1 year ago
Přemysl Eric Janouch e7d0f2380e
xC: split Command.BUFFER_INPUT on newlines 1 year ago
Přemysl Eric Janouch 36529a46fd
xP: also scroll to bottom on window resize 1 year ago
Přemysl Eric Janouch 632ac992ab
xC/xP: only send buffer stats in the initial sync
The client and frontends track these separately,
there is no need for hard synchronization.
1 year ago
Přemysl Eric Janouch d29e2cbfe8
xP: detect links in the log 1 year ago
Přemysl Eric Janouch 240fac4d90
xP: only allow vertical textarea resizing 1 year ago
Přemysl Eric Janouch c06894b291
xP: fix command sequence number generation 1 year ago
Přemysl Eric Janouch 9eaf78f823
xP: open links in a new tab/window 1 year ago
Přemysl Eric Janouch 5f02dddd11
xP: advance unread marker when the log is visible 1 year ago
Přemysl Eric Janouch 6f4a3f4657
xP: advance unread marker in an inactive tab 1 year ago
Přemysl Eric Janouch 6387145adc
xP: improve line wrapping 1 year ago
Přemysl Eric Janouch f3cc137342
xC-gen-proto: reduce enums to single bytes
That's already way more than we can possibly use.
1 year ago
Přemysl Eric Janouch 8c8e06b015
xP: enhance mobile experience
The left column used to jump around, and phones were near-unusable.
1 year ago
Přemysl Eric Janouch d7b6967b6f
xP: allow setting a fixed WS URI
For reverse proxies.
1 year ago
Přemysl Eric Janouch 8c3ee80b21
xC/xP: finalize and implement Event.PING 1 year ago
Přemysl Eric Janouch 3a165a595b
xC: use the relay protocol's RPC for pings 1 year ago
Přemysl Eric Janouch 4ba28c6ed3
xC/xP: mark highlights and buffer activity
And more or less finalize out the protocol for this use case.
1 year ago
Přemysl Eric Janouch 45aa0e8dfb
xP: remember to differentiate today 1 year ago
Přemysl Eric Janouch a2d5995cf5
xC: don't autoactivate buffers on forced JOINs 1 year ago
Přemysl Eric Janouch 2075c38fd1
xP: use an industry-standard name for a button 1 year ago
Přemysl Eric Janouch 88a7b1a2d9
xP: resolve various issues, mostly in styling 1 year ago
Přemysl Eric Janouch 2341228efd
xP: implement buffer line leakage
Rather than on redisplay, these get cleared on reconnect.
1 year ago
Přemysl Eric Janouch 2e3005d88b
xP: abort autocomplete when no longer applicable 1 year ago
Přemysl Eric Janouch 2b13f891c9
xP: clean up 1 year ago
Přemysl Eric Janouch d55402234c
xP: add a temporary lock for autoscroll 1 year ago
Přemysl Eric Janouch e3149b9abf
xP: support showing buffer logs 1 year ago
Přemysl Eric Janouch 976e7bfbb4
xP: separate input buffers 1 year ago
Přemysl Eric Janouch 5fd76ba6f9
xC: add a trivial /relay command
For there is otherwise no way of getting that information.
1 year ago
Přemysl Eric Janouch 41878a587f
xC: use liberty logging less
These messages cannot be relayed to frontends (they could be,
but it's useful to keep them distinct rather than redirected).
1 year ago
Přemysl Eric Janouch 80089a4d65
xC: describe general.editor parse errors 1 year ago
Přemysl Eric Janouch 93b66b6a26
xP: scroll to bottom and focus the input on switch 1 year ago
Přemysl Eric Janouch ee1750c23c
xP: clean up 1 year ago
Přemysl Eric Janouch f5104c807d
xP: indicate connection state 1 year ago
Přemysl Eric Janouch 2c49a72d94
Update README 1 year ago
Přemysl Eric Janouch 8cd94b30f6
xP: implement tab completion
Currently it only goes for the longest common prefix.

Refactor WebSocket handling into an abstraction for our protocol.

The Go code generater finally needed fixing.
1 year ago
Přemysl Eric Janouch 2d30b6d115
xC: define critical bindings after el_source()
And use ^C rather than ^G.
1 year ago
Přemysl Eric Janouch cf14cb8122
xC: implement buffer completion in the relay
And actually support completion with non-UTF-8 locales.
We used to ignore the encoding conversion result.
1 year ago
Přemysl Eric Janouch 31e9c6d2d5
xC/xP: pass timestamps with millisecond precision
Future-proofing the protocol.
1 year ago
Přemysl Eric Janouch d2af6cf64c
xP: convert links to link elements 1 year ago
Přemysl Eric Janouch d7b0b447b7
xC/xP: turn the action asterisk into a rendition 1 year ago
Přemysl Eric Janouch 25ad5ae0ec
xC/xP: fix colour values, and render them with CSS 1 year ago
Přemysl Eric Janouch 10f6072da9
xC: also force monospace for RPL_MOTDSTART
It tends to looks inconsistent without.
1 year ago
Přemysl Eric Janouch aceac26cbb
Fix up xP's module path, mention the licence 1 year ago
Přemysl Eric Janouch e250ae8255
Fix up README 1 year ago
Přemysl Eric Janouch 1639235a48
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.
1 year ago
Přemysl Eric Janouch 2160d03794
xC: slightly clean up character encodings 1 year ago
Přemysl Eric Janouch 36f8c7639f
xC: clean up logging
Don't treat rendition as flags, separate the two.

Also treat join and part arrows as rendition.
1 year ago
Přemysl Eric Janouch 74470f1aa4
CMakeLists.txt: improve dependencies of xD-replies 1 year ago
Přemysl Eric Janouch 3af1765261
xC: make alias creation tolerant to prefixed names
Those would not work, so skip the first forward slash.

Note that liberty can save arbitrary alias names since 6e93119,
making the removed comment about checking outdated.
1 year ago
Přemysl Eric Janouch b454920c81
xC: deal with conflicts when renaming buffers 1 year ago
Přemysl Eric Janouch ef8f25d1dd
xC: deal with any identifier conflicts
Invalid UTF-8 converted to UTF-8 may conflict with that
which was valid UTF-8 in the first place.
1 year ago
Přemysl Eric Janouch 313a65180e
xC: fix some corner cases around terminal handling 1 year ago
Přemysl Eric Janouch 91db8e6e54
xC: use the correct way of resetting libedit
The only remaining major annoyance is incremental search
seemingly not giving back control.
1 year ago
Přemysl Eric Janouch dbe95fa298
xC: make libedit history switching more reliable 1 year ago
Přemysl Eric Janouch 9d5e57a501
xC: improve libedit multiline input handling 1 year ago
Přemysl Eric Janouch 4ed6693f57
xC: erase remaining mentions of a "backlog helper" 1 year ago
Přemysl Eric Janouch bea8d13227
xC: don't autosave when nothing changed 1 year ago
Přemysl Eric Janouch ecebeace0e
Don't wrap xD-gen-replies in a shell script
AWK doesn't seem to be that friendly to shebangs, so let env,
also required for changing LC_ALL, locate it in PATH.
1 year ago
Přemysl Eric Janouch ca33adeeee
Update README
Stop pretending that xD has a future.
1 year ago
Přemysl Eric Janouch b31e079256
Update README 1 year ago
Přemysl Eric Janouch 57597bf8a2
xC: move TEXT_* constants where they belong 1 year ago
Přemysl Eric Janouch c0996fcbe7
xC: normalize BSD Editline's history behaviour
Now it's a realistically useful frontend.
1 year ago
Přemysl Eric Janouch 03d8ea4c5a
xC: general.save_on_quit -> general.autosave
Power outages and similar situations make the former unreliable,
so get rid of any false promise it might seem to give.
1 year ago
Přemysl Eric Janouch dc002a2db4
xC: revise configuration options
This commit constitutes a breaking change to old configurations.

All behaviour.* options have now become general.*, with the following
few renames as exceptions:

 - editor_command -> editor
 - backlog_helper -> pager
 - backlog_helper_strip_formatting -> pager_strip_formatting
1 year ago
Přemysl Eric Janouch a32916ffcf
xC: label code sections better
Introduce tildes as a new sublevel of markers.
1 year ago
Přemysl Eric Janouch f7be510d26
xC: make fancy-prompt.lua alignment more reliable
And generally clean up that script.
1 year ago
Přemysl Eric Janouch 83764d1e1b
Fix xB.adoc parsing with current libasciidoc 1 year ago
Přemysl Eric Janouch a717782480
Build with AsciiDoc as well as Asciidoctor 1 year ago
Přemysl Eric Janouch c50c959f4d
Bump copyright years 1 year ago
Přemysl Eric Janouch 0dd7536b5a
Update README 1 year ago
Přemysl Eric Janouch 0750096827
xC: expand behaviour.editor_command examples 1 year ago
Přemysl Eric Janouch 49d9980662
xC: improve backlog helper capabilities
Snippets now receive positional parameters in the form of the buffer's
name in the locale encoding, and a filename if applicable
(we keep passing stdin along with the filename, which happens to
work out well for less(1)).

The default value of the configuration option also no longer uses
the "long prompt", which used to unhelpfully tell position in terms
of lines, but rather sets its own prompt that counts pages,
and makes sure to indicate the source buffer.

The main motivation behind this change is to make the 'v' command
work in less(1).  LESSSECURE must be omitted from the snippet
for this to work.

Bump liberty to receive a config parser that allows for less
convoluted escaping.
1 year ago
Přemysl Eric Janouch 2f7fbcdc5d
CMakeLists.txt: fix a typo 1 year ago
Přemysl Eric Janouch ef0cbe9a59
Rename the project
It is about to see some extensions, obsoleting the number three.
1 year ago
Přemysl Eric Janouch 1238233556 hid: bump the FD limit 1 year ago
Přemysl Eric Janouch 2d8808d795
utm-filter.lua: mention the passing of fbclid 1 year ago
Přemysl Eric Janouch 9c31fb69df hid: make note of a deprecation 2 years ago
Přemysl Eric Janouch a51c247d69 hid: add WebIRC support
Such clients can only be identified through STATS L.

It's a bit weird to abuse the "port" field this way,
but right now, it serves its purpose.
2 years ago
Přemysl Eric Janouch f26e6361f3 hid: implement WALLOPS 2 years ago
Přemysl Eric Janouch 60d52ad479
xC, xD: add basic WALLOPS support 2 years ago
Přemysl Eric Janouch 4073b7329f hid: reflect the original project's new name
Better keep all schizophreny in my own head, rather than all projects.
2 years ago
Přemysl Eric Janouch 6421892ef3 Name change 3 years ago
Přemysl Eric Janouch a1994865a9 hid: mention Go 1.12 alternative to TLS autodetection 5 years ago
Přemysl Eric Janouch c285f3a266 hid: clean up/finalize logging 5 years ago
Přemysl Eric Janouch e2c34afbc6 hid: move off of the log package
We don't spam with useless messages without -debug any longer.
5 years ago
Přemysl Eric Janouch e2c8fb6e33 hid: port logging facilities
Though the regular mode now has timestamps and a new mode for systemd
has been added.
5 years ago
Přemysl Eric Janouch 5c7ac9a92b hid: cleanups
No functional changes.
5 years ago
Přemysl Eric Janouch 3fee7e8051 hid: port IRC tests from liberty, fix tag parsing 5 years ago
Přemysl Eric Janouch 09d7a10b69 hid: rename connCloseWrite to connCloseWriter 5 years ago
Přemysl Eric Janouch e9bcd0fa53 hid: add the first tests
This has actually revealed a problem in the SSL 2.0 detection.
5 years ago
Přemysl Eric Janouch 3815795d59 hid: fix SSL 2.0 autodetection 5 years ago
Přemysl Eric Janouch fd1538251a hid: add support for customized replies 5 years ago
Přemysl Eric Janouch ffad1f15a5 hid: unify exit codes with the flag package 5 years ago
Přemysl Eric Janouch 765b741a67 hid: cleanups 5 years ago
Přemysl Eric Janouch ab66a60703 hid: fix listener shutdown 5 years ago
Přemysl Eric Janouch 9ee07873ea hid: fix nickname verification in the user MODE message 5 years ago
Přemysl Eric Janouch 7ee7dc5f9b hid: port default formatting strings to fmt 5 years ago
Přemysl Eric Janouch fea801ac7a hid: ircSendToRoommates -> ircNotifyRoommates
Should be clearer.
5 years ago
Přemysl Eric Janouch cbdbfc3d64 hid: figured out how to port timeouts 5 years ago
Přemysl Eric Janouch 3610f98d67 hid: another round of general code cleanups 5 years ago
Přemysl Eric Janouch e77495f316 hid: bringup of what we have this far 5 years ago
Přemysl Eric Janouch 2f841d214f hid: port configuration and initialization
All the basic elements should be there now, we just need to port PING
timers and fix some remaining issues and we're basically done.
5 years ago
Přemysl Eric Janouch 051bbedc2f hid: port IRC 3.2 message tag parsing, unused 5 years ago
Přemysl Eric Janouch 404aa8c9cc hid: use time.Time and time.Duration
It improves the code significantly over explicit int64 conversions.

Despite carrying unnecessary timezone information, time.Time also
carries a monotonic reading of time, which allows for more precise
measurement of time differences.
5 years ago
Přemysl Eric Janouch 90129ee2bc hid: port MODE, STATS, LINKS, KILL
Now all the commands have been ported but we desperately need to parse
a configuration file for additional settings yet.
5 years ago
Přemysl Eric Janouch 50e7f7dca5 hid: port PART, KICK, INVITE, JOIN, AWAY, ISON, ADMIN, DIE 5 years ago
Přemysl Eric Janouch 3322fe2851 hid: port PRIVMSG, NOTICE, NAMES, WHO, WHOIS/WAS, TOPIC, SUMMON, USERS 5 years ago
Přemysl Eric Janouch 208a8fcc7e hid: first round of mixed fixes and cleanups 5 years ago
Přemysl Eric Janouch 2d287752d4 hid: add a work in progress IRC daemon
The port is more than viable but it's also sort of all-or-nothing
and versioning needs have come before I've had a chance to finish it.
5 years ago

12
.gitignore vendored

@ -3,9 +3,9 @@
# Qt Creator files
/CMakeLists.txt.user*
/uirc3.config
/uirc3.files
/uirc3.creator*
/uirc3.includes
/uirc3.cflags
/uirc3.cxxflags
/xK.config
/xK.files
/xK.creator*
/xK.includes
/xK.cflags
/xK.cxxflags

@ -1,10 +1,17 @@
# Ubuntu 18.04 LTS and OpenBSD 6.4
cmake_minimum_required (VERSION 3.10)
project (uirc3 VERSION 1.5.0 LANGUAGES C)
file (READ xK-version project_version)
configure_file (xK-version xK-version.tag COPYONLY)
string (STRIP "${project_version}" project_version)
project (xK VERSION "${project_version}"
DESCRIPTION "IRC daemon, bot, TUI client and its web frontend" LANGUAGES C)
# Options
option (WANT_READLINE "Use GNU Readline for the UI (better)" ON)
option (WANT_LIBEDIT "Use BSD libedit for the UI" OFF)
option (WANT_XF "Build xF" OFF)
# Moar warnings
set (CMAKE_C_STANDARD 99)
@ -16,9 +23,6 @@ if ("${CMAKE_C_COMPILER_ID}" MATCHES "GNU" OR CMAKE_COMPILER_IS_GNUCC)
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wno-unused-function")
endif ()
# Version
set (project_version "${PROJECT_VERSION}")
# Try to append commit ID if it follows a version tag. It might be nicer if
# we could also detect dirty worktrees but that's very hard to get right.
# If we didn't need this for CPack, we could use add_custom_command to generate
@ -143,28 +147,56 @@ set (HAVE_EDITLINE "${WANT_LIBEDIT}")
set (HAVE_LUA "${WITH_LUA}")
include (GNUInstallDirs)
configure_file (${PROJECT_SOURCE_DIR}/config.h.in ${PROJECT_BINARY_DIR}/config.h)
set (project_config ${PROJECT_BINARY_DIR}/config.h)
configure_file (${PROJECT_SOURCE_DIR}/config.h.in ${project_config})
include_directories (${PROJECT_SOURCE_DIR} ${PROJECT_BINARY_DIR})
# Generate IRC replies--we need a custom target because of the multiple outputs
add_custom_command (OUTPUT xD-replies.c xD.msg
COMMAND ${PROJECT_SOURCE_DIR}/xD-gen-replies.sh
> xD-replies.c < ${PROJECT_SOURCE_DIR}/xD-replies
DEPENDS ${PROJECT_SOURCE_DIR}/xD-replies
COMMAND env LC_ALL=C awk
-f ${PROJECT_SOURCE_DIR}/xD-gen-replies.awk
${PROJECT_SOURCE_DIR}/xD-replies > xD-replies.c
DEPENDS
${PROJECT_SOURCE_DIR}/xD-gen-replies.awk
${PROJECT_SOURCE_DIR}/xD-replies
COMMENT "Generating files from the list of server numerics")
add_custom_target (replies DEPENDS ${PROJECT_BINARY_DIR}/xD-replies.c)
add_custom_command (OUTPUT xC-proto.c
COMMAND env LC_ALL=C awk
-f ${PROJECT_SOURCE_DIR}/liberty/tools/lxdrgen.awk
-f ${PROJECT_SOURCE_DIR}/liberty/tools/lxdrgen-c.awk
-v PrefixCamel=Relay
${PROJECT_SOURCE_DIR}/xC.lxdr > xC-proto.c
DEPENDS
${PROJECT_SOURCE_DIR}/liberty/tools/lxdrgen.awk
${PROJECT_SOURCE_DIR}/liberty/tools/lxdrgen-c.awk
${PROJECT_SOURCE_DIR}/xC.lxdr
COMMENT "Generating xC relay protocol code" VERBATIM)
add_custom_target (xC-proto DEPENDS ${PROJECT_BINARY_DIR}/xC-proto.c)
# Build
foreach (name xB xC xD)
add_executable (${name} ${name}.c ${PROJECT_BINARY_DIR}/config.h)
add_executable (${name} ${name}.c ${project_config})
target_link_libraries (${name} ${project_libraries})
add_threads (${name})
endforeach ()
add_dependencies (xD replies)
add_dependencies (xC replies)
add_dependencies (xC replies xC-proto)
target_link_libraries (xC ${xC_libraries})
if (WANT_XF)
pkg_check_modules (x11 REQUIRED x11 xrender xft fontconfig)
include_directories (${x11_INCLUDE_DIRS})
link_directories (${x11_LIBRARY_DIRS})
add_executable (xF xF.c ${project_config})
add_dependencies (xF xC-proto)
target_link_libraries (xF ${x11_LIBRARIES} ${project_libraries})
add_threads (xF)
endif ()
# Tests
include (CTest)
if (BUILD_TESTING)
@ -196,7 +228,6 @@ add_custom_target (clang-tidy
# Installation
install (TARGETS xB xC xD DESTINATION ${CMAKE_INSTALL_BINDIR})
install (FILES LICENSE DESTINATION ${CMAKE_INSTALL_DOCDIR})
# XXX: our defaults for XDG_DATA_DIRS expect /usr/local/shore or /usr/share
install (DIRECTORY plugins/xB/
DESTINATION ${CMAKE_INSTALL_DATADIR}/xB/plugins USE_SOURCE_PERMISSIONS)
install (DIRECTORY plugins/xC/
@ -204,20 +235,40 @@ install (DIRECTORY plugins/xC/
# Generate documentation from text markup
find_program (ASCIIDOCTOR_EXECUTABLE asciidoctor)
if (NOT ASCIIDOCTOR_EXECUTABLE)
message (FATAL_ERROR "asciidoctor not found")
find_program (A2X_EXECUTABLE a2x)
if (NOT ASCIIDOCTOR_EXECUTABLE AND NOT A2X_EXECUTABLE)
message (WARNING "Neither asciidoctor nor a2x were found, "
"falling back to a substandard manual page generator")
endif ()
foreach (page xB xC xD)
set (page_output "${PROJECT_BINARY_DIR}/${page}.1")
list (APPEND project_MAN_PAGES "${page_output}")
add_custom_command (OUTPUT ${page_output}
COMMAND ${ASCIIDOCTOR_EXECUTABLE} -b manpage
-a release-version=${project_version}
"${PROJECT_SOURCE_DIR}/${page}.adoc"
-o "${page_output}"
DEPENDS ${page}.adoc
COMMENT "Generating man page for ${page}" VERBATIM)
if (ASCIIDOCTOR_EXECUTABLE)
add_custom_command (OUTPUT ${page_output}
COMMAND ${ASCIIDOCTOR_EXECUTABLE} -b manpage
-a release-version=${project_version}
-o "${page_output}"
"${PROJECT_SOURCE_DIR}/${page}.adoc"
DEPENDS ${page}.adoc
COMMENT "Generating man page for ${page}" VERBATIM)
elseif (A2X_EXECUTABLE)
add_custom_command (OUTPUT ${page_output}
COMMAND ${A2X_EXECUTABLE} --doctype manpage --format manpage
-a release-version=${project_version}
-D "${PROJECT_BINARY_DIR}"
"${PROJECT_SOURCE_DIR}/${page}.adoc"
DEPENDS ${page}.adoc
COMMENT "Generating man page for ${page}" VERBATIM)
else ()
set (ASCIIMAN ${PROJECT_SOURCE_DIR}/liberty/tools/asciiman.awk)
add_custom_command (OUTPUT ${page_output}
COMMAND env LC_ALL=C asciidoc-release-version=${project_version}
awk -f ${ASCIIMAN} "${PROJECT_SOURCE_DIR}/${page}.adoc"
> ${page_output}
DEPENDS ${page}.adoc ${ASCIIMAN}
COMMENT "Generating man page for ${page}" VERBATIM)
endif ()
endforeach ()
add_custom_target (docs ALL DEPENDS ${project_MAN_PAGES})
@ -229,7 +280,6 @@ foreach (page ${project_MAN_PAGES})
endforeach ()
# CPack
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Unreasonable IRC client, daemon and bot")
set (CPACK_PACKAGE_VERSION "${project_version_safe}")
set (CPACK_PACKAGE_VENDOR "Premysl Eric Janouch")
set (CPACK_PACKAGE_CONTACT "Přemysl Eric Janouch <p@janouch.name>")

@ -1,4 +1,4 @@
Copyright (c) 2014 - 2021, Přemysl Eric Janouch <p@janouch.name>
Copyright (c) 2014 - 2023, Přemysl Eric Janouch <p@janouch.name>
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.

40
NEWS

@ -1,3 +1,43 @@
2.0.0 (Unreleased)
* xD: now using SHA-256 for client certificate fingerprints
* xD: implemented WALLOPS, choosing to make it target even non-operators
* xC: made it show WALLOPS messages, as PRIVMSG for the server buffer
* xC: all behaviour.* configuration options have been renamed to general.*,
with the exception of editor_command/editor, backlog_helper/pager,
and backlog_helper_strip_formatting/pager_strip_formatting
* xC: all attributes.* configuration options have been made abstract in
a subset of the git-config(1) format, and renamed to theme.*,
with the exception of attributes.reset, which has no replacement
* xC: replaced behaviour.save_on_quit with general.autosave
* xC: improved pager integration capabilities
* xC: unsolicited JOINs will no longer automatically activate the buffer
* xC: made Readline insert the longest common completion prefix first,
and prevented the possible-completions command from duplicating the prompt
* xC: normalized editline's history behaviour, making it a viable frontend
* xC: various bugfixes
* xC: added a relay interface, enabled through the general.relay_bind option
* Added a web frontend for xC called xP
* Added a Win32 frontend for xC called xW
* Added a Cocoa frontend for xC called xM
* Added a Go port of xD called xS
1.5.0 (2021-12-21) "The Show Must Go On"
* xC: made it possible to pass the cursor position to external editors,

@ -1,57 +1,60 @@
uirc3
=====
xK
==
The unreasonable IRC trinity. This project consists of an IRC client, daemon,
and bot. It's all you're ever going to need for chatting, as long as you can
make do with minimalist software.
'xK' (chat kit) is an IRC software suite consisting of a daemon, bot, terminal
client, and web/Windows/macOS 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.
They have these potentially interesting properties:
- supporting IRCv3, SOCKS, IPv6, TLS (including client certificates)
- lean on dependencies
- compact and arguably easy to hack on
- maximally permissive license
They're all lean on dependencies, and offer a maximally permissive licence.
xC
--
The IRC client. It is largely defined by being built on top of GNU Readline
that has been hacked to death. Its interface should feel somewhat familiar for
weechat or irssi users.
The IRC client, and the core of 'xK'. It is largely defined by building on top
of GNU Readline or BSD Editline that have been hacked to death. Its interface
should feel somewhat familiar for weechat or irssi users.
image::xC.png[align="center"]
image::xC.webp[align="center"]
This is the core of the project. It has most of the stuff you'd expect of
an IRC client, such as being multiserver, a powerful configuration system,
integrated help, text formatting, automatic splitting of overlong messages,
multiline editing, bracketed paste support, decent word wrapping, autocomplete,
logging, CTCP queries, auto-away, command aliases, and basic support for Lua
scripting. As a unique bonus, you can launch a full text editor from within.
It has most features you'd expect of an IRC client, such as being multiserver,
a powerful configuration system, integrated help, text formatting, automatic
message splitting, multiline editing, bracketed paste support, word wrapping
that doesn't break links, autocomplete, logging, CTCP queries, auto-away,
command aliases, SOCKS proxying, SASL EXTERNAL authentication using TLS client
certificates, a remote relay interface, or basic support for Lua scripting.
As a unique bonus, you can launch a full text editor from within.
xD
xP
--
The IRC daemon. It is designed to be used as a regular user application rather
than a system-wide daemon. If all you want is a decent, minimal IRCd for
testing purposes or a small network of respectful users (or bots), this one will
do it just fine.
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
the list of all buffers in a side panel. Otherwise it is a near replica,
including link:xC.adoc#_key_bindings[keyboard shortcuts].
Notable features:
image::xP.webp[align="center"]
- TLS autodetection (I'm still wondering why everyone doesn't have this)
- IRCop authentication via TLS client certificates
- partial IRCv3 support
xD
--
The IRC daemon. It is designed for use as a regular user application rather
than a system-wide daemon, and follows the XDG Base Directory Specification.
If all you want is a decent, minimal IRCd for testing purposes or a small
network of respectful users (or bots), this one will do it just fine.
Not supported:
It autodetects TLS on incoming connections (I'm still wondering why everyone
doesn't have this), authenticates operators via TLS client certificate
fingerprints, and supports a number of IRCv3 capabilities.
- server linking (which also means no services); I consider existing protocols
for this purpose ugly and tricky to implement correctly; I've also found no
use for this feature yet
- online changes to configuration; the configuration system from 'xC' could
be used to implement this feature if needed
- limits of almost any kind, just connections and mode `+l`
What it notably doesn't support is online changes to configuration, any limits
besides the total number of connections and mode `+l`, or server linking
(which also means no services).
This program has been
https://git.janouch.name/p/haven/src/branch/master/hid[ported to Go],
and development continues over there.
xS
--
The IRC daemon again, this time ported to Go, additionally supporting WEBIRC,
and thus ideal for pairing with, e.g.,
https://github.com/kiwiirc/webircgateway[].
Any further development, such as P10 or TS6 linking for IRC services,
or plugin support for arbitrary bridges, will happen here.
xB
--
@ -66,24 +69,24 @@ that easily to any program).
Packages
--------
Regular releases are sporadic. git master should be stable enough. You can get
a package with the latest development version from Archlinux's AUR.
Regular releases are sporadic. git master should be stable enough.
You can get a package with the latest development version using Arch Linux's
https://aur.archlinux.org/packages/xk-git[AUR],
or as a https://git.janouch.name/p/nixexprs[Nix derivation].
Building
--------
Build dependencies: CMake, pkg-config, asciidoctor, awk, liberty (included) +
Runtime dependencies: openssl +
Additionally for 'xC': curses, libffi, lua >= 5.3 (optional),
readline >= 6.0 or libedit >= 2013-07-12
Avoid libedit if you can, in general it works but at the moment history is
acting up and I have no clue about fixing it.
$ git clone --recursive https://git.janouch.name/p/uirc3.git
$ mkdir uirc3/build
$ cd uirc3/build
Build-only dependencies: CMake, pkg-config, awk, liberty (included),
asciidoctor or asciidoc (recommended but optional) +
Common runtime dependencies: openssl +
Additionally for 'xC': curses, libffi, readline >= 6.0 or libedit >= 2013-07-12,
lua >= 5.3 (optional) +
$ git clone --recursive https://git.janouch.name/p/xK.git
$ mkdir xK/build
$ cd xK/build
$ cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DWANT_READLINE=ON -DWANT_LIBEDIT=OFF -DWANT_LUA=ON
-DWANT_READLINE=ON -DWANT_LIBEDIT=OFF -DWITH_LUA=ON
$ make
To install the application, you can do either the usual:
@ -93,7 +96,7 @@ To install the application, you can do either the usual:
Or you can try telling CMake to make a package for you:
$ cpack -G DEB # also supported: RPM, FreeBSD
# dpkg -i uirc3-*.deb
# dpkg -i xK-*.deb
Usage
-----
@ -118,16 +121,54 @@ a Screen or tmux session.
file or something like `killall` if you want to terminate it. You can run it
as a `forking` type systemd user service.
xP
~~
The precondition for running 'xC' frontends is enabling its relay interface:
/set general.relay_bind = "127.0.0.1:9000"
To build the web server, you'll need to install the Go compiler, and run `make`
from the _xP_ directory. Then start it from the _public_ subdirectory,
and navigate to the adress you gave it as its first argument--in the following
example, that would be http://localhost:8080[]:
$ ../xP 127.0.0.1:8080 127.0.0.1:9000
For remote use, it's recommended to put 'xP' behind a reverse proxy, with TLS,
and some form of HTTP authentication. Pass the external URL of the WebSocket
endpoint as the third command line argument in this case.
xW
~~
The Win32 frontend is a separate CMake subproject that should be compiled
using MinGW-w64. To avoid having to specify the relay address each time you
run it, create a shortcut for the executable and include the address in its
_Target_ field:
C:\...\xW.exe 127.0.0.1 9000
It works reasonably well starting with Windows 7.
xM
~~
The Cocoa frontend is a separate CMake subproject that requires Xcode to build.
It is currently not that usable. The relay address can either be passed on
the command line, or preset in the _defaults_ database:
$ defaults write name.janouch.xM relayHost 127.0.0.1
$ defaults write name.janouch.xM relayPort 9000
Client Certificates
-------------------
'xC' will use the SASL EXTERNAL method to authenticate using the TLS client
certificate specified by the respective server's `tls_cert` option if you add
`sasl` to the `capabilities` option and the server supports this.
'xD' uses SHA-1 fingerprints of TLS client certificates to authenticate users.
To get the fingerprint from a certificate file in the required form, use:
'xD' and 'xS' use SHA-256 fingerprints of TLS client certificates
to authenticate users. To get the fingerprint from a certificate file
in the required form, use:
$ openssl x509 -in public.pem -outform DER | sha1sum
$ openssl x509 -in public.pem -outform DER | sha256sum
Custom Key Bindings in xC
-------------------------
@ -151,20 +192,24 @@ Beware that you can easily break the program if you're not careful.
How do I make xC look like the screenshot?
------------------------------------------
First of all, you must build it with Lua support. With the defaults, 'xC'
doesn't look too fancy because I don't want to depend on Lua or 256-colour
terminals. In addition to that, I appear to be one of the few people who use
black on white terminals.
/set behaviour.date_change_line = "%a %e %b %Y"
/set behaviour.plugin_autoload += "fancy-prompt.lua"
/set behaviour.backlog_helper = "LESSSECURE=1 less -R +Gb1d -Ps'Backlog ?ltlines %lt-%lb?L/%L. .?e(END):?pB%pB\\%..'"
/set attributes.userhost = "\x1b[38;5;109m"
/set attributes.join = "\x1b[38;5;108m"
/set attributes.part = "\x1b[38;5;138m"
/set attributes.external = "\x1b[38;5;248m"
/set attributes.timestamp = "\x1b[48;5;255m\x1b[38;5;250m"
/set attributes.read_marker = "\x1b[38;5;202m"
With the defaults, 'xC' doesn't look too fancy because I don't want to have
a hard dependency on either Lua for the bundled script that provides an easily
adjustable enhanced prompt, or on 256-colour terminals. Moreover, it's nearly
impossible to come up with a colour theme that would work well with both
black-on-white and white-on-black terminals, or anything wild in between.
Assuming that your build supports Lua plugins, and that you have a decent,
properly set-up terminal emulator, it suffices to run:
/set general.pager = Press Tab here and change +Gb to +Gb1d
/set general.date_change_line = "%a %e %b %Y"
/set general.plugin_autoload += "fancy-prompt.lua"
/set theme.userhost = "109"
/set theme.join = "108"
/set theme.part = "138"
/set theme.external = "248"
/set theme.timestamp = "250 255"
/set theme.read_marker = "202"
Configuration profiles
----------------------
@ -179,7 +224,7 @@ configurations accordingly, but I consider it rather messy and unnecessary.
Contributing and Support
------------------------
Use https://git.janouch.name/p/uirc3 to report any bugs, request features,
Use https://git.janouch.name/p/xK to report any bugs, request features,
or submit pull requests. `git send-email` is tolerated. If you want to discuss
the project, feel free to join me at ircs://irc.janouch.name, channel #dev.

@ -1,7 +1,7 @@
/*
* common.c: common functionality
*
* Copyright (c) 2014 - 2020, Přemysl Eric Janouch <p@janouch.name>
* Copyright (c) 2014 - 2022, Přemysl Eric Janouch <p@janouch.name>
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted.
@ -48,6 +48,66 @@ init_openssl (void)
#endif
}
static char *
gai_reconstruct_address (struct addrinfo *ai)
{
char host[NI_MAXHOST] = {}, port[NI_MAXSERV] = {};
int err = getnameinfo (ai->ai_addr, ai->ai_addrlen,
host, sizeof host, port, sizeof port,
NI_NUMERICHOST | NI_NUMERICSERV);
if (err)
{
print_debug ("%s: %s", "getnameinfo", gai_strerror (err));
return xstrdup ("?");
}
return format_host_port_pair (host, port);
}
static bool
accept_error_is_transient (int err)
{
// OS kernels may return a wide range of unforeseeable errors.
// Assuming that they're either transient or caused by
// a connection that we've just extracted from the queue.
switch (err)
{
case EBADF:
case EINVAL:
case ENOTSOCK:
case EOPNOTSUPP:
return false;
default:
return true;
}
}
/// Destructively tokenize an address into a host part, and a port part.
/// The port is only overwritten if that part is found, allowing for defaults.
static const char *
tokenize_host_port (char *address, const char **port)
{
// Unwrap IPv6 addresses in format_host_port_pair() format.
char *rbracket = strchr (address, ']');
if (*address == '[' && rbracket)
{
if (rbracket[1] == ':')
{
*port = rbracket + 2;
return *rbracket = 0, address + 1;
}
if (!rbracket[1])
return *rbracket = 0, address + 1;
}
char *colon = strchr (address, ':');
if (colon)
{
*port = colon + 1;
return *colon = 0, address;
}
return address;
}
// --- To be moved to liberty --------------------------------------------------
// FIXME: in xssl_get_error() we rely on error reasons never being NULL (i.e.,