Come up with sillier names for the binaries

I'm not entirely sure, but it looks like some people might not like
jokes about the Holocaust.

On a more serious note, the project has become more serious over
the 7 or so years of its existence.
This commit is contained in:
Přemysl Eric Janouch 2021-08-06 16:12:15 +02:00
parent 1f64710e79
commit 50057d5149
Signed by: p
GPG Key ID: A0420B94F92B9493
33 changed files with 260 additions and 262 deletions

View File

@ -77,9 +77,9 @@ CHECK_C_SOURCE_RUNS ("#include <iconv.h>
int main () { return iconv_open (\"UTF-8//TRANSLIT\", \"ISO-8859-1\")
== (iconv_t) -1; }" ICONV_ACCEPTS_TRANSLIT)
# Dependencies for degesch
# Dependencies for xC
pkg_check_modules (libffi REQUIRED libffi)
list (APPEND degesch_libraries ${libffi_LIBRARIES})
list (APPEND xC_libraries ${libffi_LIBRARIES})
include_directories (${libffi_INCLUDE_DIRS})
link_directories (${libffi_LIBRARY_DIRS})
@ -92,7 +92,7 @@ if (WITH_LUA)
message (FATAL_ERROR "Lua library not found")
endif ()
list (APPEND degesch_libraries ${lua_LIBRARIES})
list (APPEND xC_libraries ${lua_LIBRARIES})
include_directories (${lua_INCLUDE_DIRS})
link_directories (${lua_LIBRARY_DIRS})
endif ()
@ -100,10 +100,10 @@ endif ()
find_package (Curses)
pkg_check_modules (ncursesw ncursesw)
if (ncursesw_FOUND)
list (APPEND degesch_libraries ${ncursesw_LIBRARIES})
list (APPEND xC_libraries ${ncursesw_LIBRARIES})
include_directories (${ncursesw_INCLUDE_DIRS})
elseif (CURSES_FOUND)
list (APPEND degesch_libraries ${CURSES_LIBRARY})
list (APPEND xC_libraries ${CURSES_LIBRARY})
include_directories (${CURSES_INCLUDE_DIR})
else ()
message (SEND_ERROR "Curses not found")
@ -115,13 +115,13 @@ elseif (WANT_READLINE)
# OpenBSD's default readline is too old
if ("${CMAKE_SYSTEM_NAME}" MATCHES "OpenBSD")
include_directories (${OPENBSD_LOCALBASE}/include/ereadline)
list (APPEND degesch_libraries ereadline)
list (APPEND xC_libraries ereadline)
else ()
list (APPEND degesch_libraries readline)
list (APPEND xC_libraries readline)
endif ()
elseif (WANT_LIBEDIT)
pkg_check_modules (libedit REQUIRED libedit)
list (APPEND degesch_libraries ${libedit_LIBRARIES})
list (APPEND xC_libraries ${libedit_LIBRARIES})
include_directories (${libedit_INCLUDE_DIRS})
endif ()
@ -135,34 +135,34 @@ configure_file (${PROJECT_SOURCE_DIR}/config.h.in ${PROJECT_BINARY_DIR}/config.h
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 kike-replies.c kike.msg
COMMAND ${PROJECT_SOURCE_DIR}/kike-gen-replies.sh
> kike-replies.c < ${PROJECT_SOURCE_DIR}/kike-replies
DEPENDS ${PROJECT_SOURCE_DIR}/kike-replies
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
COMMENT "Generating files from the list of server numerics")
add_custom_target (replies DEPENDS ${PROJECT_BINARY_DIR}/kike-replies.c)
add_custom_target (replies DEPENDS ${PROJECT_BINARY_DIR}/xD-replies.c)
# Build
foreach (name zyklonb degesch kike)
foreach (name xB xC xD)
add_executable (${name} ${name}.c ${PROJECT_BINARY_DIR}/config.h)
target_link_libraries (${name} ${project_libraries})
add_threads (${name})
endforeach ()
add_dependencies (kike replies)
add_dependencies (degesch replies)
target_link_libraries (degesch ${degesch_libraries})
add_dependencies (xD replies)
add_dependencies (xC replies)
target_link_libraries (xC ${xC_libraries})
# Tests
include (CTest)
if (BUILD_TESTING)
add_executable (test-degesch $<TARGET_PROPERTY:degesch,SOURCES>)
set_target_properties (test-degesch PROPERTIES COMPILE_DEFINITIONS TESTING)
target_link_libraries (test-degesch $<TARGET_PROPERTY:degesch,LINK_LIBRARIES>)
add_threads (test-degesch)
add_dependencies (test-degesch replies)
add_executable (test-xC $<TARGET_PROPERTY:xC,SOURCES>)
set_target_properties (test-xC PROPERTIES COMPILE_DEFINITIONS TESTING)
target_link_libraries (test-xC $<TARGET_PROPERTY:xC,LINK_LIBRARIES>)
add_threads (test-xC)
add_dependencies (test-xC replies)
add_test (NAME test-degesch COMMAND test-degesch)
add_test (NAME test-xC COMMAND test-xC)
add_test (NAME custom-static-analysis
COMMAND ${PROJECT_SOURCE_DIR}/test-static)
endif ()
@ -182,13 +182,13 @@ add_custom_target (clang-tidy
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
# Installation
install (TARGETS zyklonb degesch kike DESTINATION ${CMAKE_INSTALL_BINDIR})
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/zyklonb/
DESTINATION ${CMAKE_INSTALL_DATADIR}/zyklonb/plugins USE_SOURCE_PERMISSIONS)
install (DIRECTORY plugins/degesch/
DESTINATION ${CMAKE_INSTALL_DATADIR}/degesch/plugins)
install (DIRECTORY plugins/xB/
DESTINATION ${CMAKE_INSTALL_DATADIR}/xB/plugins USE_SOURCE_PERMISSIONS)
install (DIRECTORY plugins/xC/
DESTINATION ${CMAKE_INSTALL_DATADIR}/xC/plugins)
# Generate documentation from text markup
find_program (ASCIIDOCTOR_EXECUTABLE asciidoctor)
@ -196,7 +196,7 @@ if (NOT ASCIIDOCTOR_EXECUTABLE)
message (FATAL_ERROR "asciidoctor not found")
endif ()
foreach (page zyklonb degesch kike)
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}
@ -217,7 +217,7 @@ foreach (page ${project_MAN_PAGES})
endforeach ()
# CPack
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Unethical IRC client, daemon and bot")
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>")

192
NEWS
View File

@ -1,29 +1,31 @@
1.3.0 (20xx-xx-xx)
1.3.0 (2021-xx-xx)
* degesch: made nick autocompletion offer recent speakers first
* xC: made nick autocompletion offer recent speakers first
* All binaries have been renamed to something even sillier
1.2.0 (2021-07-08) "There Are Other Countries As Well"
* degesch: added a /squery command for IRCnet
* xC: added a /squery command for IRCnet
* degesch: added trivial support for SASL EXTERNAL, enabled by adding "sasl"
* xC: added trivial support for SASL EXTERNAL, enabled by adding "sasl"
to the respective server's "capabilities" list
* degesch: now supporting IRCv3.2 capability negotiation, including CAP DEL
* xC: now supporting IRCv3.2 capability negotiation, including CAP DEL
* degesch: added support for IRCv3 chghost
* xC: added support for IRCv3 chghost
* degesch: /deop and /devoice without arguments will use the client's user
* xC: /deop and /devoice without arguments will use the client's user
* degesch: /set +=/-= now treats its argument as a string array
* xC: /set +=/-= now treats its argument as a string array
* degesch: made "/help /command" work the same way as "/help command" does
* xC: made "/help /command" work the same way as "/help command" does
* degesch: /ban and /unban don't mangle extended bans anymore
* xC: /ban and /unban don't mangle extended bans anymore
* degesch: joining new channels no longer switches to their buffer
automatically if the current input line isn't empty
* xC: joining new channels no longer switches to their buffer automatically
if the current input line isn't empty
* censor.lua: now stripping colours from censored messages;
their attributes are also configurable rather than always black on black
@ -31,9 +33,9 @@
1.1.0 (2020-10-31) "What Do You Mean By 'This Isn't Germany'?"
* degesch: made fancy-prompt.lua work with libedit
* xC: made fancy-prompt.lua work with libedit
* kike: fixed a regression with an unspecified "bind_host"
* xD: fixed a regression with an unspecified "bind_host"
* Miscellaneous minor improvements
@ -42,55 +44,55 @@
* Coming with real manual pages instead of help2man-generated stubs
* degesch: added support for more IRC colours and strike-through text (M-m x)
* xC: added support for more IRC colours and strike-through text (M-m x)
* degesch: now tolerating all UTF-8 messages cut off by the server
* xC: now tolerating all UTF-8 messages cut off by the server
* degesch: disabled "behaviour.backlog_helper_strip_formatting" by default
* xC: disabled "behaviour.backlog_helper_strip_formatting" by default
since the relevant issue with ACS terminfo entries has been resolved
* degesch: enabled word wrapping in the backlog by default
* xC: enabled word wrapping in the backlog by default
* degesch: made the unread marker span the whole line, with a configurable
* xC: made the unread marker span the whole line, with a configurable
character; the previous behaviour can be obtained by setting it empty
* degesch: fixed the prompt not showing back up after exiting a backlog helper
* xC: fixed the prompt not showing back up after exiting a backlog helper
when an external event has provoked an attempt to change it
* degesch: now watching fellow channel users' away status when the server
* xC: now watching fellow channel users' away status when the server
supports the away-notify capability; indicated by italicised nicknames
* degesch: added a plugin to highlight prime numbers in incoming messages
* xC: added a plugin to highlight prime numbers in incoming messages
* kike: make sure an unspecified "bind_host" binds to both IPv4 and IPv6
* xD: make sure an unspecified "bind_host" binds to both IPv4 and IPv6
* ZyklonB: install plugins to /usr/share and look for them in XDG data dirs
* xB: install plugins to /usr/share and look for them in XDG data dirs
* Miscellaneous little fixes
0.9.8 (2020-09-02) "Yep, Still Using It"
* degesch: fixed a crash and prompt attribute output in libedit 20191231-3.1,
* xC: fixed a crash and prompt attribute output in libedit 20191231-3.1,
though users are officially discouraged from using this library
* degesch: fixed Lua 5.4 build, so far the support is experimental
* xC: fixed Lua 5.4 build, so far the support is experimental
* Miscellaneous little fixes
0.9.7 (2018-10-21) "Business as Usual"
* kike: fix wildcard handling in WHOIS
* xD: fix wildcard handling in WHOIS
* kike: properly handle STATS without parametetrs
* xD: properly handle STATS without parametetrs
* kike: abort earlier when an invalid mode character is detected while
* xD: abort earlier when an invalid mode character is detected while
processing channel MODE messages
* kike: do not send NICK notifications when the nickname doesn't really change
* xD: do not send NICK notifications when the nickname doesn't really change
* kike: fix hostname string verification (only used for "server_name")
* xD: fix hostname string verification (only used for "server_name")
0.9.6 (2018-06-22) "I've Been Sitting Here All This Time"
@ -99,108 +101,108 @@
* Fix LibreSSL compatibility
* degesch: a second /disconnect cuts the connection by force
* xC: a second /disconnect cuts the connection by force
* degesch: send a QUIT message to the IRC server on Ctrl-C
* xC: send a QUIT message to the IRC server on Ctrl-C
* degesch: add a Slack plugin (even though the gateway's now defunct)
* xC: add a Slack plugin (even though the gateway's now defunct)
* degesch: show an error message on log write failure
* xC: show an error message on log write failure
* degesch: fix parsing of literal IPv6 addresses with port numbers
* xC: fix parsing of literal IPv6 addresses with port numbers
* degesch: fix some error messages
* xC: fix some error messages
* degesch: workaround a Readline bug in the fancy-prompt.lua plugin
* xC: workaround a Readline bug in the fancy-prompt.lua plugin
* kike: fix two memory leaks
* xD: fix two memory leaks
* kike: improve error handling for incoming connections
* xD: improve error handling for incoming connections
* kike: disable TLS session reuse
* xD: disable TLS session reuse
0.9.5 (2016-12-30) "It's Time"
* Better support for the KILL command
* degesch: export many more fields to the Lua API, add a prompt hook
* xC: export many more fields to the Lua API, add a prompt hook
* degesch: show channel user count in the prompt
* xC: show channel user count in the prompt
* degesch: allow hiding join/part messages and other noise (Meta-Shift-H)
* xC: allow hiding join/part messages and other noise (Meta-Shift-H)
* degesch: allow autojoining channels with keys
* xC: allow autojoining channels with keys
* degesch: rejoin channels with keys on reconnect
* xC: rejoin channels with keys on reconnect
* degesch: make /query without arguments just open the buffer
* xC: make /query without arguments just open the buffer
* degesch: add a censor plugin
* xC: add a censor plugin
* degesch: die on configuration parse errors
* xC: die on configuration parse errors
* degesch: request channel modes also on rejoin
* xC: request channel modes also on rejoin
* degesch: don't show remembered channel modes on parted channels
* xC: don't show remembered channel modes on parted channels
* degesch: fix highlight detection in colored text
* xC: fix highlight detection in colored text
* degesch: fix CTCP handling for the real world and don't decode X-QUOTEs
* xC: fix CTCP handling for the real world and don't decode X-QUOTEs
* degesch: add support for OpenSSL 1.1.0
* xC: add support for OpenSSL 1.1.0
0.9.4 (2016-04-28) "Oops"
* degesch: fix crash on characters invalid in Windows-1252
* xC: fix crash on characters invalid in Windows-1252
* degesch: add an auto-rejoin plugin
* xC: add an auto-rejoin plugin
* degesch: better date change messages with customizable formatting;
* xC: better date change messages with customizable formatting;
now also used in the backlog, so it looks closer to regular output
* ZyklonB: add a calc plugin providing a basic Scheme REPL
* xB: add a calc plugin providing a basic Scheme REPL
* ZyklonB: add a seen plugin
* xB: add a seen plugin
* kike, ZyklonB: use pledge(2) on OpenBSD
* xD, xB: use pledge(2) on OpenBSD
0.9.3 (2016-03-27) "Doesn't Even Suck"
* Use TLS Server Name Indication when connecting to servers
* degesch: now we erase the screen before displaying buffers
* xC: now we erase the screen before displaying buffers
* degesch: implemented word wrapping in buffers
* xC: implemented word wrapping in buffers
* degesch: added autocomplete for /topic
* xC: added autocomplete for /topic
* degesch: Lua API was improved and extended
* xC: Lua API was improved and extended
* degesch: added a basic last.fm "now playing" plugin
* xC: added a basic last.fm "now playing" plugin
* degesch: backlog limit was made configurable
* xC: backlog limit was made configurable
* degesch: allow changing the list of IRC capabilities to use if available
* xC: allow changing the list of IRC capabilities to use if available
* degesch: optimize buffer memory usage
* xC: optimize buffer memory usage
* degesch: added logging of messages sent from /quote and plugins
* xC: added logging of messages sent from /quote and plugins
* degesch: M-! and M-a to go to the next buffer in order with
a highlight or new activity respectively
* xC: M-! and M-a to go to the next buffer in order with a highlight
or new activity respectively
* degesch: added --format for previewing things like MOTD files
* xC: added --format for previewing things like MOTD files
* degesch: added /buffer goto supporting case insensitive partial matches
* xC: added /buffer goto supporting case insensitive partial matches
* kike: add support for IRCv3.2 server-time
* xD: add support for IRCv3.2 server-time
* ZyklonB: plugins now run in a dedicated data directory
* xB: plugins now run in a dedicated data directory
* ZyklonB: added a factoids plugin
* xB: added a factoids plugin
* Remote addresses are now resolved asynchronously
@ -209,28 +211,28 @@
0.9.2 (2015-12-31)
* degesch: added rudimentary support for Lua scripting
* xC: added rudimentary support for Lua scripting
* degesch: added detection of pasting, so that it doesn't trigger other
* xC: added detection of pasting, so that it doesn't trigger other
keyboard shortcuts, such as for autocomplete
* degesch: added auto-away capability
* xC: added auto-away capability
* degesch: added an /oper command
* xC: added an /oper command
* degesch: libedit backend works again
* xC: libedit backend works again
* degesch: added capability to edit the input line using VISUAL/EDITOR
* xC: added capability to edit the input line using VISUAL/EDITOR
* degesch: added Meta-Tab to switch to the last used buffer
* xC: added Meta-Tab to switch to the last used buffer
* degesch: correctly respond to stopping and resuming (SIGTSTP)
* xC: correctly respond to stopping and resuming (SIGTSTP)
* degesch: fixed decoding of text formatting
* xC: fixed decoding of text formatting
* degesch: unseen PMs now show up as highlights
* xC: unseen PMs now show up as highlights
* degesch: various bugfixes
* xC: various bugfixes
0.9.1 (2015-09-25)
@ -241,23 +243,23 @@
* Pulled in kqueue support
* degesch: added backlog/scrollback functionality using less(1)
* xC: added backlog/scrollback functionality using less(1)
* degesch: made showing the entire set of channel mode user prefixes optional
* xC: made showing the entire set of channel mode user prefixes optional
* degesch: nicknames in /names are now ordered
* xC: nicknames in /names are now ordered
* degesch: nicknames now use the 256-color terminal palette if available
* xC: nicknames now use the 256-color terminal palette if available
* degesch: now we skip entries in the "addresses" list that can't be resolved
* xC: now we skip entries in the "addresses" list that can't be resolved
to an address, along with displaying a more helpful message
* degesch: joins, parts, nick changes and quits don't count as new buffer
* xC: joins, parts, nick changes and quits don't count as new buffer
activity anymore
* degesch: added Meta-H to open the full log file
* xC: added Meta-H to open the full log file
* degesch: various bugfixes and little improvements
* xC: various bugfixes and little improvements
0.9.0 (2015-07-23)

View File

@ -2,25 +2,25 @@ uirc3
=====
:compact-option:
The [line-through]#unethical# edgy 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.
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.
All of them have these potentially interesting properties:
- IPv6 support
- TLS support, including client certificates
- lean on dependencies (with the exception of 'degesch')
- lean on dependencies (with the exception of 'xC')
- compact and arguably easy to hack on
- very permissive license
degesch
-------
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.
image::degesch.png[align="center"]
image::xC.png[align="center"]
This is the largest application within the project. It has most of the stuff
you'd expect of an IRC client, such as being able to set up multiple servers,
@ -28,8 +28,8 @@ a powerful configuration system, integrated help, text formatting, CTCP queries,
automatic splitting of overlong messages, autocomplete, logging to file,
auto-away, command aliases and basic support for Lua scripting.
kike
----
xD
--
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
@ -48,7 +48,7 @@ Not supported:
- 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 degesch could
- 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`
@ -56,8 +56,8 @@ This program has been
https://git.janouch.name/p/haven/src/branch/master/hid[ported to Go],
and development continues over there.
ZyklonB
-------
xB
--
The IRC bot. It builds upon the concept of my other VitaminA IRC bot. The main
characteristic of these two bots is that they run plugins as coprocesses, which
allows for enhanced reliability and programming language freedom.
@ -78,8 +78,8 @@ Building
--------
Build dependencies: CMake, pkg-config, asciidoctor, awk, liberty (included) +
Runtime dependencies: openssl +
Additionally for degesch: curses, libffi, lua >= 5.3 (optional),
readline >= 6.0 or libedit >= 2013-07-12
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.
@ -102,49 +102,49 @@ Or you can try telling CMake to make a package for you. For Debian it is:
Usage
-----
'degesch' has in-program configuration. Just run it and read the instructions.
Consult its link:degesch.adoc[man page] for details about the interface.
'xC' has in-program configuration. Just run it and read the instructions.
Consult its link:xC.adoc[man page] for details about the interface.
For the rest you might want to generate a configuration file:
$ zyklonb --write-default-config
$ kike --write-default-config
$ xB --write-default-config
$ xD --write-default-config
After making any necessary edits to the file (there are comments to aid you in
doing that), simply run the appropriate program with no arguments:
$ zyklonb
$ kike
$ xB
$ xD
'ZyklonB' stays running in the foreground, therefore I recommend launching it
inside a Screen or tmux session.
'xB' stays running in the foreground, therefore I recommend launching it inside
a Screen or tmux session.
'kike', on the other hand, immediately forks into the background. Use the PID
'xD', on the other hand, immediately forks into the background. Use the PID
file or something like `killall` if you want to terminate it. You can run it
as a `forking` type systemd user service.
Client Certificates
-------------------
'degesch' 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.
'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.
'kike' uses SHA-1 fingerprints of TLS client certificates to authenticate users.
'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:
$ openssl x509 -in public.pem -outform DER | sha1sum
Custom Key Bindings in degesch
------------------------------
The default and preferred frontend used in 'degesch' is GNU Readline. This
means that you can change your bindings by editing '~/.inputrc'. For example:
Custom Key Bindings in xC
-------------------------
The default and preferred frontend used in 'xC' is GNU Readline. This means
that you can change your bindings by editing '~/.inputrc'. For example:
....
# Preload with system-wide settings
$include /etc/inputrc
# Make M-left and M-right reorder buffers
$if degesch
$if xC
"\e\e[C": move-buffer-right
"\e\e[D": move-buffer-left
$endif
@ -154,12 +154,12 @@ Consult the source code and the GNU Readline manual for a list of available
functions. Also refer to the latter for the exact syntax of this file.
Beware that you can easily break the program if you're not careful.
How do I make degesch look like the screenshot?
-----------------------------------------------
First of all, you must build it with Lua support. With the defaults, degesch
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.
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"
@ -195,5 +195,5 @@ License
This software is released under the terms of the 0BSD license, the text of which
is included within the package along with the list of authors.
Note that 'degesch' becomes GPL-licensed when you link it against GNU Readline
Note that 'xC' becomes GPL-licensed when you link it against GNU Readline,
but that is not a concern of this source package. The licenses are compatible.

View File

@ -1,6 +1,6 @@
#!/usr/bin/env guile
ZyklonB calc plugin, basic Scheme evaluator
xB calc plugin, basic Scheme evaluator
Copyright 2016 Přemysl Eric Janouch
See the file LICENSE for licensing information.

View File

@ -1,6 +1,6 @@
#!/usr/bin/env tclsh
#
# ZyklonB coin plugin, random number-based utilities
# xB coin plugin, random number-based utilities
#
# Copyright 2012, 2014 Přemysl Eric Janouch
# See the file LICENSE for licensing information.

View File

@ -1,6 +1,6 @@
#!/usr/bin/awk -f
#
# ZyklonB eval plugin, LISP-like expression evaluator
# xB eval plugin, LISP-like expression evaluator
#
# Copyright 2013, 2014 Přemysl Eric Janouch
# See the file LICENSE for licensing information.

View File

@ -1,6 +1,6 @@
#!/usr/bin/env perl
#
# ZyklonB factoids plugin
# xB factoids plugin
#
# Copyright 2016 Přemysl Eric Janouch <p@janouch.name>
# See the file LICENSE for licensing information.

View File

@ -1,7 +1,7 @@
#!/usr/bin/env ruby
# coding: utf-8
#
# ZyklonB pomodoro plugin
# xB pomodoro plugin
#
# Copyright 2015 Přemysl Eric Janouch
# See the file LICENSE for licensing information.

View File

@ -1,6 +1,6 @@
#!/usr/bin/tcc -run -lm
//
// ZyklonB scripting plugin, using a custom stack-based language
// xB scripting plugin, using a custom stack-based language
//
// Copyright 2014 Přemysl Eric Janouch
// See the file LICENSE for licensing information.

View File

@ -1,6 +1,6 @@
#!/usr/bin/env lua
--
-- ZyklonB seen plugin
-- xB seen plugin
--
-- Copyright 2016 Přemysl Eric Janouch <p@janouch.name>
-- See the file LICENSE for licensing information.

View File

@ -1,7 +1,7 @@
#!/usr/bin/env perl
# Creates a database for the "seen" plugin from logs for degesch.
# Creates a database for the "seen" plugin from logs for xC.
# The results may not be completely accurate but are good for jumpstarting.
# Usage: ./seen-import-degesch.pl LOG-FILE... > seen.db
# Usage: ./seen-import-xC.pl LOG-FILE... > seen.db
use strict;
use warnings;

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python3
#
# ZyklonB YouTube plugin, displaying info about YouTube links
# xB YouTube plugin, displaying info about YouTube links
#
# Copyright 2014 - 2015, Přemysl Eric Janouch <p@janouch.name>
# See the file LICENSE for licensing information.

View File

@ -16,7 +16,7 @@
--
local timeout
degesch.setup_config {
xC.setup_config {
timeout = {
type = "integer",
comment = "auto rejoin timeout",
@ -31,9 +31,9 @@ degesch.setup_config {
},
}
async, await = degesch.async, coroutine.yield
degesch.hook_irc (function (hook, server, line)
local msg = degesch.parse (line)
async, await = xC.async, coroutine.yield
xC.hook_irc (function (hook, server, line)
local msg = xC.parse (line)
if msg.command ~= "KICK" then return line end
local who = msg.prefix:match ("^[^!]*")

View File

@ -39,7 +39,7 @@ local read_masks = function (v)
end
local quote
degesch.setup_config {
xC.setup_config {
masks = {
type = "string_array",
default = "\"\"",
@ -72,8 +72,8 @@ local censor = function (line)
return start .. text
end
degesch.hook_irc (function (hook, server, line)
local msg = degesch.parse (line)
xC.hook_irc (function (hook, server, line)
local msg = xC.parse (line)
if msg.command ~= "PRIVMSG" then return line end
local channel = msg.params[1]:lower ()

View File

@ -28,15 +28,15 @@
-- background but to really fix that mode, we'd have to fully reimplement it
-- since its alternative prompt very often gets overriden by accident anyway.
degesch.hook_prompt (function (hook)
local current = degesch.current_buffer
xC.hook_prompt (function (hook)
local current = xC.current_buffer
local chan = current.channel
local s = current.server
local bg_color = "255"
local current_n = 0
local active = ""
for i, buffer in ipairs (degesch.buffers) do
for i, buffer in ipairs (xC.buffers) do
if buffer == current then
current_n = i
elseif buffer.new_messages_count ~= buffer.new_unimportant_count then
@ -61,7 +61,7 @@ degesch.hook_prompt (function (hook)
end
if current.hide_unimportant then x = x .. "<H>" end
local lines, cols = degesch.get_screen_size ()
local lines, cols = xC.get_screen_size ()
x = x .. " " .. active .. string.rep (" ", cols)
-- Readline 7.0.003 seems to be broken and completely corrupts the prompt.

View File

@ -23,7 +23,7 @@ local cjson = require "cjson"
-- Setup configuration to load last.fm API credentials from
local user, api_key
degesch.setup_config {
xC.setup_config {
user = {
type = "string",
comment = "last.fm username",
@ -117,7 +117,7 @@ end
local running
-- Initiate a connection to last.fm servers
async, await = degesch.async, coroutine.yield
async, await = xC.async, coroutine.yield
local make_request = function (buffer, action)
if not user or not api_key then
report_error (buffer, "configuration is incomplete")
@ -159,7 +159,7 @@ local send_song = function (buffer)
end
-- Hook input to simulate new commands
degesch.hook_input (function (hook, buffer, input)
xC.hook_input (function (hook, buffer, input)
if input == "/np" then
make_request (buffer, function (np)
now_playing = np

View File

@ -15,8 +15,8 @@
-- CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
--
degesch.hook_irc (function (hook, server, line)
local msg = degesch.parse (line)
xC.hook_irc (function (hook, server, line)
local msg = xC.parse (line)
local start, timeout = line:match ("^(.* :Ping timeout:) (%d+) seconds$")
if msg.command ~= "QUIT" or not start then
return line

View File

@ -16,7 +16,7 @@
--
local smallest, highlight = 0, "\x1f"
degesch.setup_config {
xC.setup_config {
smallest = {
type = "integer",
default = "0",
@ -62,7 +62,7 @@ end
-- XXX: sadly it won't typically highlight primes in our own messages,
-- unless IRCv3 echo-message is on
degesch.hook_irc (function (hook, server, line)
xC.hook_irc (function (hook, server, line)
local start, message = line:match ("^(.- PRIVMSG .- :)(.*)$")
return message and start .. do_message (message) or line
end)

View File

@ -51,7 +51,7 @@ local load_emoji = function (extra)
for k, v in extra:gmatch "([^,]+) ([^,]+)" do emoji[k] = v end
end
degesch.setup_config {
xC.setup_config {
servers = {
type = "string_array",
default = "\"\"",
@ -74,8 +74,8 @@ degesch.setup_config {
-- We can handle external messages about what we've supposedly sent just fine,
-- so let's get rid of that "[username] some message sent from the web UI" crap
degesch.hook_irc (function (hook, server, line)
local msg, us = degesch.parse (line), server.user
xC.hook_irc (function (hook, server, line)
local msg, us = xC.parse (line), server.user
if not servers[server.name] or msg.command ~= "PRIVMSG" or not us
or msg.params[1]:lower () ~= us.nickname:lower () then return line end
@ -88,7 +88,7 @@ degesch.hook_irc (function (hook, server, line)
end)
-- Unfuck emoji and :nick!nick@irc.tinyspeck.com MODE #channel +v nick : active
degesch.hook_irc (function (hook, server, line)
xC.hook_irc (function (hook, server, line)
if not servers[server.name] then return line end
if unemojify then
local start, text = line:match ("^(.- PRIVMSG .- :)(.*)$")
@ -101,7 +101,7 @@ degesch.hook_irc (function (hook, server, line)
end)
-- The gateway simply ignores the NAMES command altogether
degesch.hook_input (function (hook, buffer, input)
xC.hook_input (function (hook, buffer, input)
if not buffer.channel or not servers[buffer.server.name]
or not input:match "^/names%s*$" then return input end
@ -119,9 +119,9 @@ degesch.hook_input (function (hook, buffer, input)
buffer:log (names)
end)
degesch.hook_completion (function (hook, data, word)
local chan = degesch.current_buffer.channel
local server = degesch.current_buffer.server
xC.hook_completion (function (hook, data, word)
local chan = xC.current_buffer.channel
local server = xC.current_buffer.server
if not chan or not servers[server.name] then return end
-- In /commands there is typically no desire at all to add the at sign

View File

@ -52,11 +52,11 @@ local do_text = function (text)
return text:gsub ('%f[%g]https?://%g+', do_single_url)
end
degesch.hook_irc (function (hook, server, line)
xC.hook_irc (function (hook, server, line)
local start, message = line:match ("^(.* :)(.*)$")
return message and start .. do_text (message) or line
end)
degesch.hook_input (function (hook, buffer, input)
xC.hook_input (function (hook, buffer, input)
return do_text (input)
end)

6
test
View File

@ -2,13 +2,13 @@
# Very basic end-to-end testing for CI
# Run the daemon to test against
system ./kike --write-default-cfg
spawn ./kike -d
system ./xD --write-default-cfg
spawn ./xD -d
# 10 seconds is a bit too much
set timeout 5
spawn ./degesch
spawn ./xC
# Fuck this Tcl shit, I want the exit code
expect_after {

View File

@ -9,7 +9,7 @@ export example=$(
#define N_ELEMENTS(a) (sizeof (a) / sizeof ((a)[0]))
$(perl -0777 -ne 'print $& if /^.*?\nfilter_color(?s:.*?)^}$/m' \
"$(dirname "$0")"/degesch.c)
"$(dirname "$0")"/xC.c)
void main () {
size_t len = 0;

View File

@ -1,7 +1,7 @@
#!/bin/sh
# We don't use printf's percent notation with our custom logging mechanism,
# so the compiler cannot check it for us like it usually does
perl -n0777 - "$(dirname "$0")"/degesch.c <<-'END'
perl -n0777 - "$(dirname "$0")"/xC.c <<-'END'
while (/\blog_[^ ]+\s*\([^"()]*"[^"]*%[^%][^"]*"/gm) {
my ($p, $m) = ($`, $&);
printf "$ARGV:%d: suspicious log format string: %s...\n",

View File

@ -1,20 +1,20 @@
zyklonb(1)
==========
xB(1)
=====
:doctype: manpage
:manmanual: uirc3 Manual
:mansource: uirc3 {release-version}
Name
----
zyklonb - modular IRC bot
xB - modular IRC bot
Synopsis
--------
*zyklonb* [_OPTION_]...
*xB* [_OPTION_]...
Description
-----------
*zyklonb* is a modular IRC bot with a programming language-agnostic plugin
*xB* is a modular IRC bot with a programming language-agnostic plugin
architecture based on co-processes.
Options
@ -82,19 +82,19 @@ All other commands will be forwarded directly to the IRC server.
Files
-----
*zyklonb* follows the XDG Base Directory Specification.
*xB* follows the XDG Base Directory Specification.
_~/.config/zyklonb/zyklonb.conf_::
_~/.config/xB/xB.conf_::
The bot's configuration file. Use the *--write-default-cfg* option
to create a new one for editing.
_~/.local/share/zyklonb/_::
_~/.local/share/xB/_::
The initial working directory for plugins, in which they may create private
databases or other files as needed.
_~/.local/share/zyklonb/plugins/_::
_/usr/local/share/zyklonb/plugins/_::
_/usr/share/zyklonb/plugins/_::
_~/.local/share/xB/plugins/_::
_/usr/local/share/xB/plugins/_::
_/usr/share/xB/plugins/_::
Plugins are searched for in these directories, in order, unless
the *plugin_dir* configuration option overrides this.

View File

@ -1,5 +1,5 @@
/*
* zyklonb.c: a modular IRC bot
* xB.c: a modular IRC bot
*
* Copyright (c) 2014 - 2020, Přemysl Eric Janouch <p@janouch.name>
*
@ -17,7 +17,7 @@
*/
#include "config.h"
#define PROGRAM_NAME "ZyklonB"
#define PROGRAM_NAME "xB"
#include "common.c"
@ -25,9 +25,9 @@
static struct simple_config_item g_config_table[] =
{
{ "nickname", "ZyklonB", "IRC nickname" },
{ "nickname", "xB", "IRC nickname" },
{ "username", "bot", "IRC user name" },
{ "realname", "ZyklonB IRC bot", "IRC real name/e-mail" },
{ "realname", "xB IRC bot", "IRC real name/e-mail" },
{ "irc_host", NULL, "Address of the IRC server" },
{ "irc_port", "6667", "Port of the IRC server" },
@ -1860,7 +1860,7 @@ on_plugin_death (struct plugin *plugin, int status)
struct bot_context *ctx = plugin->ctx;
// TODO: callbacks on children death, so that we may tell the user
// "plugin `name' died like a dirty jewish pig"; use `status'
// "plugin `name' died"; use `status'
if (!plugin->is_zombie && WIFSIGNALED (status))
{
const char *notes = "";

View File

@ -1,22 +1,22 @@
degesch(1)
==========
xC(1)
=====
:doctype: manpage
:manmanual: uirc3 Manual
:mansource: uirc3 {release-version}
Name
----
degesch - terminal-based IRC client
xC - terminal-based IRC client
Synopsis
--------
*degesch* [_OPTION_]...
*xC* [_OPTION_]...
Description
-----------
*degesch* is a scriptable IRC client for the command line. On the first run
it will welcome you with an introductory message. Should you ever get lost,
use the */help* command to obtain more information on commands or options.
*xC* is a scriptable IRC client for the command line. On the first run it will
welcome you with an introductory message. Should you ever get lost, use the
*/help* command to obtain more information on commands or options.
Options
-------
@ -26,7 +26,7 @@ Options
database:
+
```
printf '\x02bold\x02\n' | degesch -f
printf '\x02bold\x02\n' | xC -f
```
+
This feature may be used to preview server MOTD files.
@ -98,18 +98,18 @@ Environment
Files
-----
*degesch* follows the XDG Base Directory Specification.
*xC* follows the XDG Base Directory Specification.
_~/.config/degesch/degesch.conf_::
_~/.config/xC/xC.conf_::
The program's configuration file. Preferrably use internal facilities, such
as the */set* command, to make changes in it.
_~/.local/share/degesch/logs/_::
_~/.local/share/xC/logs/_::
When enabled by *behaviour.logging*, log files are stored here.
_~/.local/share/degesch/plugins/_::
_/usr/local/share/degesch/plugins/_::
_/usr/share/degesch/plugins/_::
_~/.local/share/xC/plugins/_::
_/usr/local/share/xC/plugins/_::
_/usr/share/xC/plugins/_::
Plugins are searched for in these directories, in order.
Bugs

View File

@ -1,5 +1,5 @@
/*
* degesch.c: a terminal-based IRC client
* xC.c: a terminal-based IRC client
*
* Copyright (c) 2015 - 2021, Přemysl Eric Janouch <p@janouch.name>
*
@ -46,10 +46,10 @@ enum
#define print_warning_data ((void *) ATTR_WARNING)
#include "config.h"
#define PROGRAM_NAME "degesch"
#define PROGRAM_NAME "xC"
#include "common.c"
#include "kike-replies.c"
#include "xD-replies.c"
#include <math.h>
#include <langinfo.h>
@ -10699,7 +10699,7 @@ lua_plugin_load (struct app_context *ctx, const char *filename,
luaL_checkversion (L);
// Register the degesch library as a singleton with "plugin" as an upvalue
// Register the xC library as a singleton with "plugin" as an upvalue
// (mostly historical, but rather convenient)
luaL_newmetatable (L, lua_ctx_info.name);
lua_pushlightuserdata (L, plugin);
@ -13712,7 +13712,7 @@ app_editline_init (struct input_el *self)
static const char *g_first_time_help[] =
{
"",
"\x02Welcome to degesch!",
"\x02Welcome to xC!",
"",
"To get a list of all commands, type \x02/help\x02. To obtain",
"more information on a command or option, simply add it as",
@ -14346,13 +14346,9 @@ main (int argc, char *argv[])
static const char *g_logo[] =
{
" __ __ ",
" __/ /___________________/ / ",
" / / , / / , / __/ __/ _ \\ ",
"/ / / __/ / / __/_ / /_/ // / ",
"\\__/\\__/_ /\\__/___/\\__/_//_/ " PROGRAM_VERSION,
" /___/",
""
"",
"\x02" PROGRAM_NAME "\x02 " PROGRAM_VERSION,
"",
};
static void
@ -14379,7 +14375,7 @@ format_input_and_die (struct app_context *ctx)
int
main (int argc, char *argv[])
{
// We include a generated file from kike including this array we don't use;
// We include a generated file from xD including this array we don't use;
// let's just keep it there and silence the compiler warning instead
(void) g_default_replies;

View File

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

@ -2,7 +2,7 @@
LC_ALL=C exec awk '
BEGIN {
# The message catalog is a by-product
msg = "kike.msg"
msg = "xD.msg"
print "$quote \"" > msg;
print "$set 1" > msg;
}

View File

@ -1,20 +1,20 @@
kike(1)
=======
xD(1)
=====
:doctype: manpage
:manmanual: uirc3 Manual
:mansource: uirc3 {release-version}
Name
----
kike - IRC daemon
xD - IRC daemon
Synopsis
--------
*kike* [_OPTION_]...
*xD* [_OPTION_]...
Description
-----------
*kike* is a basic IRC daemon for single-server networks, suitable for testing
*xD* is a basic IRC daemon for single-server networks, suitable for testing
and private use. When run without a configuration file, it will start listening
on the standard port 6667 and the "any" address.
@ -40,10 +40,10 @@ contrary to what you might expect from a server.
Files
-----
*kike* follows the XDG Base Directory Specification.
*xD* follows the XDG Base Directory Specification.
_~/.config/kike/kike.conf_::
_/etc/xdg/kike/kike.conf_::
_~/.config/xD/xD.conf_::
_/etc/xdg/xD/xD.conf_::
The daemon's configuration file. Use the *--write-default-cfg* option
to create a new one for editing.

View File

@ -1,5 +1,5 @@
/*
* kike.c: an IRC daemon
* xD.c: an IRC daemon
*
* Copyright (c) 2014 - 2020, Přemysl Eric Janouch <p@janouch.name>
*
@ -17,11 +17,11 @@
*/
#include "config.h"
#define PROGRAM_NAME "kike"
#define PROGRAM_NAME "xD"
#define WANT_SYSLOG_LOGGING
#include "common.c"
#include "kike-replies.c"
#include "xD-replies.c"
#include <nl_types.h>
enum { PIPE_READ, PIPE_WRITE };