Files
holckmirk/README.md
T
anders fe75236fad Add /me, /slap, /q, /topic, tab completion, bold events
- /me <action> sends CTCP ACTION
- /slap <nick> slaps with a large trout
- /q <nick> sets query target, /q clears it
- /topic to view/set channel topic
- Tab completion for nicks (cycling, : suffix at line start)
- Nick list tracking via NAMES/JOIN/PART/QUIT/NICK
- Bold formatting for joins, parts, quits, mode changes
- Incoming CTCP ACTION displayed as * nick action
- Updated README with all commands and features
2026-04-30 08:05:35 +02:00

94 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 (@/+), channel modes, and activity indicator
- **UTF-8 terminal support** — full multi-byte input editing
- **Tab completion** — nick completion with cycling (`: ` suffix at line start, space mid-line)
- **Query mode** — `/q nick` to set a default PM target
- **CTCP VERSION** reply with OS info
- **SIGWINCH** handling (terminal resize)
- **Ident** — works with system identd on port 113
- **Real name** from passwd GECOS field
- **Charset logger** — logs raw incoming bytes with hex dump and detected encoding to `irc.log`
## 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 |
| Tab | Nick completion (cycle with repeated Tab) |
| 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-P | Page up (scroll back in history) |
| Ctrl-N | Page down (scroll forward) |
| 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 |
| `/q <nick>` | Set query target (type text to send to them) |
| `/q` | Clear query target |
| `/me <action>` | Send action to channel/query |
| `/slap <nick>` | Slap with a large trout |
| `/nick <newnick>` | Change nickname |
| `/mode <target> <modes>` | Set mode |
| `/topic [#channel]` | View topic |
| `/topic #channel <text>` | Set topic |
| `/names [#channel]` | List users in channel |
| `/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 (or query target on window 1).
## 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.