about summary refs log tree commit diff
README(7) Miscellaneous Information Manual README(7)

catgirlIRC client

catgirl(1) is a terminal IRC client.

Screenshot: imagine, if you will, text on a screen, next to names in a selection of colours.

  • Tab complete: most recently seen or mentioned nicks are completed first. Commas are inserted between multiple nicks.
  • Prompt: the prompt clearly shows whether input will be interpreted as a command or sent as a message.
  • Split scroll: keeps the latest messages in view while scrolling.
  • URL detection: recent URLs from a particular user or matching a substring can be opened or copied.
  • Nick coloring: color generation based on usernames remains stable across nick changes. Mentions of users in messages are colored.
  • Topic diffing: the modified portion of a channel topic change is highlighted.
  • Ignore: visibility of filtered messages can be toggled.
  • Security: on FreeBSD and OpenBSD, the restrict option enables tight sandboxing. Sandboxing is always used on OpenBSD.

  • Dynamic configuration: all configuration happens in a simple text file or on the command line.
  • Multi-network: a terminal multiplexer such as screen(1) or tmux(1) (or just your regular terminal emulator tabs) can be used to connect catgirl to multiple networks.
  • Reconnection: when the connection to the server is lost, catgirl exits. She can be run in a loop or connected to a bouncer, such as pounce.
  • CTCP: apart from , this protocol is useless at best and enables abuse at worst.
  • Protocol coverage: IRCv3 extensions are implemented only where they contribute to the intended user experience.
  • Cleartext IRC: TLS is now ubiquitous and certificates are easy to obtain.

catgirl requires ncurses and libtls, provided by either LibreTLS (for OpenSSL) or by LibreSSL. It targets FreeBSD, OpenBSD, macOS and Linux. catgirl and libtls may be packaged for your system. Check the Repology pages for catgirl and libretls.

$ ./configure
$ make all
# make install

Packagers are encouraged to patch in their own text macros in input.c.

If installing libtls manually to /usr/local, for example, make sure /usr/local/lib appears in /etc/ld.so.conf or /etc/ld.so.conf.d/* and be sure to run ldconfig(8) once the library is installed. Set PKG_CONFIG_PATH for ./configure to find it.

$ PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure

The sandman wrapper is provided for macOS to stop and start catgirl on system sleep and wake. To enable him, configure with:

$ ./configure --enable-sandman

chat.h
global state and declarations
chat.c
startup and event loop
irc.c
IRC connection and parsing
ui.c
curses interface
window.c
window management
input.c
input handling
handle.c
IRC message handling
command.c
command handling
buffer.c
line wrapping
edit.c
line editing
complete.c
tab complete
url.c
URL detection
filter.c
message filtering
log.c
chat logging
config.c
configuration parsing
xdg.c
XDG base directories
sandman.m
sleep/wake wrapper for macOS

scripts/chat.tmux.conf
example tmux(1) configuration for multiple networks and automatic reconnects
scripts/reconnect.sh
example script to restart catgirl(1) when she gets disconnected
scripts/notify-send.scpt
notify-send(1) in AppleScript

The upstream URL of this project is ⟨https://git.causal.agency/catgirl⟩. Contributions in any form can be sent to <list+catgirl@causal.agency>. For sending patches by email, see ⟨https://git-send-email.io⟩. Mailing list archives are available at ⟨https://causal.agency/list/catgirl.html⟩.

catgirl(1), sandman(1)

IRC bouncer: pounce

June McEnroe, IRC Suite, https://text.causal.agency/010-irc-suite.txt, June 19, 2020.

May 22, 2024 Causal Agency
>2021-02-07Set colours for Xt and cwmJune McEnroe And increase XTerm internalBorder. 2021-02-07Set urgency on bell in xtermJune McEnroe 2021-02-07Add bindings for brightness controlJune McEnroe Weirdly the Fn key doesn't change how the F row registers... I wonder if I can do something about that. 2021-02-07Set X key repeat rateJune McEnroe 2021-02-07Bump font size to 12June McEnroe 11 is what I use on macOS, but I feel like my eyes are working harder here. 2021-02-07Fully configure and rebind cwmJune McEnroe This is sort of a mix of trying to emulate macOS somewhat for my muscle memory and just rebinding some of the cwm defaults to use 4- rather than M-. 2021-02-07Add BintiJune McEnroe 2021-02-07Finish configuring xtermJune McEnroe 2021-02-06Enable tapping, reverse scroll, set scaling in wsconsctlJune McEnroe 2021-02-06Set root window to black on purple snowJune McEnroe 2021-02-06Add xmodmap configurationJune McEnroe 2021-02-06Add initial OpenBSD X configurationJune McEnroe cwm still needs a lot more rebinding, and I need to actually look at its other options. xterm definitely still needs some configuration, but I at least managed to get it to use a decent looking font. Very happy that OpenBSD includes Luxi Mono, which is what my usual font, Go Mono, is based on anyway. Still missing is xmodmap and such. 2021-02-06Add xterm output to schemeJune McEnroe