1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340
|
GLIRC - Advanced Console IRC Client
=============
<a href="https://repology.org/project/glirc/versions">
<img src="https://repology.org/badge/vertical-allrepos/glirc.svg?exclude_unsupported=1" alt="Packaging status" align="right">
</a>
* **glirc** [](https://hackage.haskell.org/package/glirc)
* **irc-core** [](https://hackage.haskell.org/package/irc-core)
* **hookup** [](https://hackage.haskell.org/package/hookup)
Client Features
---------------
* Support for [a wide variety of IRCv3 capabilities](https://ircv3.net/software/clients#desktop-clients).
* Joins, parts, and quits fold into one line to save space without sacrificing context.
Detailed view (F2) shows additional info, such as part/quit messages.
* Ignore support that folds ignored messages into the joins and parts. Detailed view shows the messages.
* Searchable channel list, who and names list, and list modes (beqI) views separate from chat messages.
* Dynamic, in-place message and list view searching using `/grep`.
* View and open long URLs with `/url`.
* Context-sensitive tab completion and command hints.
* WYSIWYG mIRC formatting input.
* Multi-line editing; Enter sends one line at a time.
* Atheme-flavored-ChanServ integration.
* Nicknames in chat messages are colored to match messages from that nickname.
* Correct handling of [STATUSMSG](https://modern.ircdocs.horse/#statusmsg-parameter), including CTCP ACTIONs.
* Command macros.
* Support for a wide variety of SASL authentication mechanisms, including `ECDSA-NIST256P-CHALLENGE`.
* Split-screen view.
* Configurable color palette.
* Desktop notifications on important messages while unfocused. Can run arbitrary commands instead (or turn them off).
* Extensions, a Lua plugin system, and trivial piping of IRC messages to arbitrary commands with `/exec`.
* Plenty more, but this list is getting a bit long.

Building
========
[](https://github.com/glguy/irc-core/actions/workflows/haskell-ci.yml)
glirc uses recent versions of packages, make sure your package databases are
up-to-date:
```
$ cabal update
```
To install the latest version from Hackage using cabal-install:
```
$ cabal install glirc
```
Building with cabal-install from source checkout
```
$ cabal install --dep
$ cabal build
```
Startup
=======
```
glirc [FLAGS] INITIAL_NETWORKS...
-c PATH --config=PATH Configuration file path
-! --noconnect Disable autoconnecting
-h --help Show help
--config-format Show configuration file format
-v --version Show version
--full-version Show version and versions of all linked Haskell libraries
```
Environment variables
```
USER=<default nickname and username>
IRCPASSWORD=<your irc password>
```
Configuration file
=================
Most of glirc's settings are specified using a configuration file.
The file format is [config-value](http://hackage.haskell.org/package/config-value),
an indentation-sensitive format that resembles YAML.
It has macros which are documented
[here](https://hackage.haskell.org/package/config-value/docs/Config-Macro.html).
The default configuration file path is `~/.config/glirc/config`.
Relative paths are relative to the home directory.
To view the full list of configuration variables,
run `glirc --config-format | less`.
If any variable is unspecified, a default value will be used instead.
```
-- vim: filetype=config-value
-- Grab the Vim syntax highlighting file from the config-value package
-- Defaults used when not specified on command line
defaults:
nick: "yournick"
username: "yourusername"
realname: "Your real name"
tls: yes -- or: no, or: starttls
-- enabling tls automatically uses port 6697
-- Override the defaults when connecting to specific servers
servers:
* name: "libera"
hostname: "irc.libera.chat"
sasl:
username: "someuser"
password: "somepass"
log-dir: "/home/myuser/ircLogs"
connect-cmds:
* "join #glirc,#someotherchannel"
* name: "znc"
hostname: "znc.example.com"
port: 7000 -- Override the default port
password: "IRC server password"
tls-verify: no
message-hooks: ["buffextras"] -- Use this when using ZNC's "buffextra" module to get correct playback
flood-penalty: -1 -- Disable flood controls
flood-threshold: -1
macros:
* name: "wipe"
commands:
* "clear"
* "znc *status clearbuffer $channel"
* name: "mysplits"
commands:
* "splits libera:#haskell libera:#haskell-offtopic"
-- Example use of macro in combination with an extension
* name: "extra"
commands:
* "extension Lua somecommand $network $channel"
extra-highlights: ["glirc", "hello"]
nick-padding:
side: left -- Try "right" if you don't like left padding
width: 13
url-opener: "open" -- This works on macOS; use "xdg-open" for most Linuxes
key-bindings:
* bind: "C-M-b"
command: "masks b"
palette:
line-marker: yellow
time:
fg: [10,10,10] -- RGB values for color for timestamps
bg: blue
identifier-colors: -- Used for nicknames and channel names
[ cyan, magenta, green, yellow, blue
, bright-cyan, bright-magenta, bright-green, bright-blue
, 218, 88, 89, 124, 160, 205, 212, 224 -- reds
, 94, 130, 166, 172, 208, 214, 216, 180 -- oranges
, 58, 226, 229, 184, 187, 100, 142, 220 -- yellows
, 22, 34, 40, 82, 70, 64, 48, 85 -- greens
, 25, 27, 33, 39, 51, 80, 81, 75 -- blues
, 69, 61, 56, 54, 129, 93, 99, 147 -- purples
]
notifications: terminal-notifier -- Use terminal-notifier for nicer notifications (macOS only)
```
Commands
========
glirc has built-in documentation for all of its commands.
To view the full list of commands and what they do, use `/help`.
To view help on a specific command, use `/help <command>`.
Unlike some other clients, glirc does not send unknown commands to the server.
Use `/quote` to send arbitrary IRC commands.
The following is a curated list of commands for basic use:
* `/help [command]` - Show in-client help
* `/exit` - Terminate the client
* `/reload [path]` - Load a new configuration file (optional path)
* `/palette` - Show the client palette
* `/url [n]` - Execute url-opener on the nth URL in the current window (defaults to first)
* `/toggle-activity-bar` - toggle channel names in activity bar
* `/toggle-detail` - toggle full detail view of messages
* `/toggle-metadata` - toggle visibility of channel metadata (joins, parts, quits, nick changes, etc)
Connection
* `/connect <name>` - Connect to the given server
* `/quit [message]` - Gracefully terminate connection to the current server
* `/reconnect` - Reconnect to the current server
* `/nick <nick>` - Change nickname
* `/away [message]` - Set away status; no message removes away status
Window management
* `/windows [filter]` - List all open windows (filters: networks, channels, users)
* `/setname [letter]` - Assign a one-letter name to the given window.
* `/channel <channel>` - Change focus to channel/user on current network (alias: `/c`)
* `/channel <network>:[channel]` - Change focus to channel/user on the specified network (alias: `/c`)
* `/clear [network] [channel]` - Clear contents of current or specified window
* `/splits [focuses...]` - Enable split-screen view. Focuses should be space delimited list of NETWORK:CHANNEL
* `/splits+ [focuses...]` - Incremental addition to splits
* `/splits- [focuses...]` - Incremental removal from splits
* `/toggle-layout` - toggle split-screen layout between 1 and 2 column view
Chat commands
* `/join <channel>` - Join a channel (alias: `/j`)
* `/part [msg]` - Part from current channel
* `/query <target> [msg]` - Switch focus to target window on current server, optionally send message (alias: `/q`)
* `/msg <target> <msg>` - Send a message on the current server to target
* `/me <msg>` - Send action message to channel
* `/say <msg>` - Send normal message to channel; useful for macros and messages starting with a slash
* `/ignore <mask>...` - Toggle ignore status on a list of masks
* `/topic [msg]` - Display or set the current topic of a channel
Views
* `/channelinfo` - Show channel topic, creation, url
* `/grep [flags] <regex>` - Filter using a regular expression
* `/ignore` - Show all ignore masks
* `/list` - View the list of public channels on the network
* `/masks <mode>` - Show channel bans(b), quiets(q), exempts(e), or invex(I)
* `/mentions` - Show all the highlighted lines across all windows
* `/names` - Show the user list for the current channel
* `/who [channel] [options]` - Perform WHO query, sending options to the server, or show the results of the previous query.
ZNC-specific
* `/znc <module> <parameters>` - send command to ZNC module without echoing to all clients
* `/znc-playback` - ZNC playback module - play everything
* `/znc-playback <time>` - ZNC playback module - play everything start at the given time today
* `/znc-playback <date> <time>` - ZNC playback module - play everything start at the given time
Miscellaneous
* `/dump <filename>` - Dump current window to file
* `/extension <extension name> <params...>` - Send the given params to the named extension
* `/exec [-n network] [-c channel] <command> <arguments...>` - Execute a command; if no network or channel are provided send output to client window, if network and channel are provided send output as messages, if network is provided send output as raw IRC messages.
* `/quote <raw command>` - Send a raw IRC command to the server
Keyboard Shortcuts
==================
Note that these keybindings are using *Emacs* syntax. `C-a` means "hold
control and press A". `M-a` means "hold meta key and press A". On most
modern keyboards the *Meta* key is labeled *Alt* or *Option*.
To view the full list of keybindings and what they do,
use `/keymap` from within glirc.
The following is a curated list of default keybinds for basic use:
Navigation
* `Page Up` scroll up
* `Page Down` scroll down
* `C-n` next window
* `C-p` previous window
* `C-x` next network window
* `M-<name>` jump to window with the given one-letter name
* `M-a` jump to activity
* `M-s` jump to previous window
* `ESC` return to messages view (from userlist, masklist, help, etc)
Editing
* `C-b` bold
* `C-c` color
* `C-v` invert foreground/background
* `C-_` underline
* `C-]` italic
* `C-o` reset formatting
* `Tab` autocompletion
* `M-k` replace 2 characters before the cursor with a character specified in `/digraphs`
* `C-a` beginning of line
* `C-e` end of line
* `C-k` delete to end
* `C-u` delete to beginning
* `C-d` delete at cursor
* `C-w` delete word backwards
* `C-y` paste from yank buffer
* `C-t` swap characters at cursor
* `M-f` forward word
* `M-b` backward word
* `M-Right` forward word
* `M-Left` backward word
* `M-Backspace` delete word backwards
* `M-d` delete word forwards
* `M-Enter` insert newline
Client settings
* `F2` toggle detailed view
* `F3` toggle detailed activity bar
* `F4` toggle metadata visibility
* `F7` toggle Enter key lock
Macros
======
The `macros` configuration section allows you to define
sequences of commands. These commands can contain expansions.
Configuration
-------------
* `name` - text - name of macro
* `arguments` - text - space separated list of argument names (suffix name with `?` when optional)
* `commands` - list of text - commands to send after expansion
Macro Expansions
----------------
Variable names and integer indexes can be used when defining commands.
Variables are specified with a leading `$`. For disambiguation a variable
name can be surrounded by `{}`. `$channel` and `${channel}` are
equivalent. Default values can be provided following a pipe: `${var|default}`.
* `channel` - current channel
* `network` - current network name
* `nick` - current nickname
The arguments to a command will be mapped to integer indexes.
* `0` - first argument
* `1` - second argument (etc.)
|