anders 71f6699aa9 Add window levels, status bar, UTF-8 input, charset conversion
- Isolated window levels with 500-line scrollback per window
  - Window 1: status + private messages
  - Windows 2-9: channels
- Status bar showing window, channel, nick prefix, channel modes
- Automatic charset conversion (UTF-8/UTF-16 -> ISO-8859-1 on wire)
- UTF-8 aware input editing with Ctrl-A/E/U/K/Y
- CTCP VERSION reply with real OS info from uname()
- Real name from passwd GECOS field
- SIGWINCH handling for terminal resize
- Ctrl-C quit confirmation (y + Enter)
- /whois, /wii, /mode, /quit with default reason
- Green prompt, timestamps on all messages
2026-04-29 12:03:57 +02:00
2026-04-29 11:44:36 +02:00
2026-04-29 11:44:36 +02:00
2026-04-29 11:44:36 +02:00

Mirk — Holck's IRC Client

A lightweight terminal IRC client written in C with automatic charset conversion and ircII-style window levels.

Features

  • Automatic charset conversion — detects UTF-8, UTF-16 (BOM), and ISO-8859-1 input; always sends ISO-8859-1 on the wire
  • Window levels — isolated windows with independent 500-line scrollback:
    • Window 1: Status and private messages
    • Windows 29: Channels
  • Status bar — shows current window, channel, nick prefix (@/+), and channel modes
  • UTF-8 terminal support — full multi-byte input editing
  • CTCP VERSION reply with OS info
  • SIGWINCH handling (terminal resize)
  • Ident — works with system identd on port 113
  • Real name from passwd GECOS field

Building

make

Requires only a C compiler and POSIX headers. No external dependencies.

Usage

./irc <nick> <server> [port]

Port defaults to 6667.

Key Bindings

Key Action
ESC+19 Switch window
Ctrl-A Beginning of line
Ctrl-E End of line
Ctrl-U Kill to beginning (yank buffer)
Ctrl-K Kill to end (yank buffer)
Ctrl-Y Yank (paste)
Ctrl-D Quit (EOF)
Ctrl-C Quit prompt (Y/N, default N)

Commands

Command Description
/join #channel Join channel (assigned to current window)
/part [#channel] Part channel (defaults to current)
/msg <target> <text> Send private message
/nick <newnick> Change nickname
/mode <target> <modes> Set mode
/whois <nick> WHOIS query
/wii <nick> Extended WHOIS (queries remote server)
/quit [reason] Quit (default: "See you later")
/raw <line> Send raw IRC command

Typing text without a / prefix sends to the channel on the current window.

Window Workflow

  1. Press ESC+2 to switch to window 2
  2. /join #channel — the channel is bound to that window
  3. Press ESC+3, /join #other — second channel on window 3
  4. ESC+1 to check status and private messages

Each window maintains its own scrollback. Switching redraws the full history.

CTCP VERSION Reply

Holck's Mirk, OS: Linux 6.x.x x86_64 :: This space available for rent

License

Public domain.

S
Description
Simple irc client the way I want it.
Readme 548 KiB
Languages
C 99.6%
Makefile 0.4%