GithubHelp home page GithubHelp logo

glguy / irc-core Goto Github PK

View Code? Open in Web Editor NEW
155.0 12.0 29.0 6.22 MB

Haskell IRC library and console client - Join us on libera.chat #glirc

License: ISC License

Haskell 89.92% C 5.11% Makefile 0.05% Lua 0.67% Rust 0.81% C++ 3.10% Meson 0.13% Dockerfile 0.06% Roff 0.15%
haskell irc znc

irc-core's Introduction

GLIRC - Advanced Console IRC Client

Packaging status
  • glirc Hackage
  • irc-core Hackage
  • hookup Hackage

Client Features

  • Support for a wide variety of IRCv3 capabilities.
  • 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, 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

Build Status

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, an indentation-sensitive format that resembles YAML. It has macros which are documented here.

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.)

irc-core's People

Contributors

aforemny avatar cocreature avatar dolio avatar felixphew avatar glguy avatar hvr avatar iliastsi avatar rubenastudillo avatar solpeth avatar thedaemoness avatar thurin avatar vekhir avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

irc-core's Issues

Mouse support

Would be cool to be able to use the mouse to scroll windows line by line (possibly even windows that aren't focused)
Would also be cool to have mouse support in the input to move the cursor

Mark the last displayed line when coming back to channel

When a channel had activity in the background, and is switched to, it would be nice to have an indicator, what is "new".
E.g. weechat displays a horizontal line right under the last line that got displayed the last time the channel was shown.

Set max line of text allowed

Most channel don't like it when you post something that have 2 to 3 lines of text at a time. Setting a max line cap or having to set the max line cap in the 'config'. Or have it set on hold. Showing number of line that going be sent. "Do you wish to send $number line text: yes/no"

Enhanced ignore features

  • Add command for toggling view of ignored messages without clearing ignore list
  • Add window for viewing ignore list

Add keybindings inspired from weechat

Hello,

I'm currently using weechat, but have been told that glirc might be a nice replacement. Having skimmed the wiki, here are the things that are blocking me from trying it, hoping you would find them useful too:

  • The go.py plugin for weechat, plugged on Alt-G (or whatever), that starts fuzzy-matching the buffer list looking for a buffer to jump into
  • Alt-U, that jumps to the last message not yet seen (marked by a bar in weechat, can't see it in the screenshot but I guess there's one in glirc too)
  • Alt-N and Alt-P, which jump to next/previous highlight in the current buffer

In addition, something that would be nice to have (but which weechat doesn't have) and that I can't find in the docs either is a way to reset the “last read message” bar to some other position, if one wants to mark a message as unread to come back to it later.

What do you think about these? :)

custom command instead of bell

Would be neat to be able to set a custom command or something similar instead of the bell, would possibly require something to reduce duplicates or batch messages. could then be used with notify-send or in WSL powershell.exe "New-BurntToastNotification"

Missing exit implementation for ESC

Hi, this probably is trivial.

On the README.md says that ESC quits the client. Yet on commit 747e9c7 this was removed and the /exit command was added to commandEvent. At the same time the datatype

data EventResult
  = KeepGoing ClientState
  | Exit

was added to driver/Main.hs and it was made that the keyEvent function decided how to handle it. The problem is that this function never returns the Exit constructor. All the branches in the case statement are enclosed on a more function (which returns a KeepGoing) or passed to the inputLogic.

So either the EventResult is removed and keyEvent is cleaned up a little, only /exit remaining as the sole method of quitting or the exit constructor is added to the results of keyEvent. Both solutions are trivial and I myself can do them, but I would like to know what do you think.

Support a list of servers that are cycled on reconnect

This would lead to bundling the hostname, port, tls settings so that each entry in the list could have a different setting.

servers:
  * name: "example"

    remotes:
      * hostname: "this.chat.net"
        port: 6667

      * hostname: "that.chat.net"
        port: 7000
        tls: yes

I'm not sold on what remotes should actually be, however. Perhaps servers becomes networks and then remotes could be servers

Nick tab completion after non-space character

It would be great if the nick tab completion worked even without having a space (or start of line) before the nick, perhaps by treating any character not allowed in a nick as a space. this would solve for example (SwanTab ↹ or /mode #channel +b $a:SwaTab ↹

"Undefined symbols for architecture x86_64" on mac

I'm trying to build glirc2 on a mac and I'm getting this error:

Undefined symbols for architecture x86_64:
  "_DHparams_dup", referenced from:
      _HsOpenSSL_DHparams_dup in libHSHsOpenSSL-0.11.4.9-GYgoofdLymiK7WlLuuaqOB.a(HsOpenSSL.o)
     (maybe you meant: _HsOpenSSL_DHparams_dup)
  "_SSL_CTX_get0_param", referenced from:
      _c6jw_info in libHShookup-0.1.1.0-1s9nHEtZKbxIfE8su7gzAQ.a(OpenSSL.o)
  "_X509_CRL_get0_by_serial", referenced from:
      _c16Cf_info in libHSHsOpenSSL-0.11.4.9-GYgoofdLymiK7WlLuuaqOB.a(Revocation.o)
  "_X509_STORE_CTX_get0_current_crl", referenced from:
      _HsOpenSSL_X509_STORE_CTX_get0_current_crl in libHSHsOpenSSL-0.11.4.9-GYgoofdLymiK7WlLuuaqOB.a(HsOpenSSL.o)
     (maybe you meant: _HsOpenSSL_X509_STORE_CTX_get0_current_crl)
  "_X509_STORE_CTX_get0_current_issuer", referenced from:
      _HsOpenSSL_X509_STORE_CTX_get0_current_issuer in libHSHsOpenSSL-0.11.4.9-GYgoofdLymiK7WlLuuaqOB.a(HsOpenSSL.o)
     (maybe you meant: _HsOpenSSL_X509_STORE_CTX_get0_current_issuer)
  "_X509_VERIFY_PARAM_set1_host", referenced from:
      _c6jL_info in libHShookup-0.1.1.0-1s9nHEtZKbxIfE8su7gzAQ.a(OpenSSL.o)
  "_X509_VERIFY_PARAM_set_hostflags", referenced from:
      _c6jw_info in libHShookup-0.1.1.0-1s9nHEtZKbxIfE8su7gzAQ.a(OpenSSL.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
`gcc' failed in phase `Linker'. (Exit code: 1)

These seem to be openssl-related, but HsOpenSSL compiled fine.

Build failing on NixOS 18.03pre116432.263185aa68 (Impala)

Running nix-shell -p haskellPackages.glirc fails with:

[…]
[58 of 63] Compiling Client.View      ( src/Client/View.hs, dist/build/Client/View.o )
[59 of 63] Compiling Client.Image.Layout ( src/Client/Image/Layout.hs, dist/build/Client/Image/Layout.o )
[60 of 63] Compiling Client.Image     ( src/Client/Image.hs, dist/build/Client/Image.o )
[61 of 63] Compiling Client.EventLoop ( src/Client/EventLoop.hs, dist/build/Client/EventLoop.o )
[62 of 63] Compiling Build_glirc      ( dist/build/autogen/Build_glirc.hs, dist/build/Build_glirc.o )
[63 of 63] Compiling Client.Options   ( src/Client/Options.hs, dist/build/Client/Options.o )
Preprocessing executable 'glirc2' for glirc-2.23...
[1 of 2] Compiling Exports          ( exec/Exports.hs, dist/build/glirc2/glirc2-tmp/Exports.dyn_o )
[2 of 2] Compiling Main             ( exec/Main.hs, dist/build/glirc2/glirc2-tmp/Main.dyn_o )
Linking dist/build/glirc2/glirc2 ...
Preprocessing test suite 'test' for glirc-2.23...
[1 of 1] Compiling Main             ( test/Main.hs, dist/build/test/test-tmp/Main.dyn_o )

test/Main.hs:14:1: error:
    Failed to load interface for ‘Client.Commands.Arguments’
    Perhaps you meant Client.Commands.Arguments.Spec (from glirc-2.23)
    Use -v to see a list of the files searched for.
builder for ‘/nix/store/51ai6xrcp5gz11af9scicd38mq62hvna-glirc-2.23.drv’ failed with exit code 1
error: build of ‘/nix/store/51ai6xrcp5gz11af9scicd38mq62hvna-glirc-2.23.drv’ failed
/run/current-system/sw/bin/nix-shell: failed to build all dependencies

Poll for buddy list

Periodically poll with ISON to check if a configured list of nicks joins or parts

Concerns: Maximum ISON has room for about 460 characters of response, if nick list is long we'll need to spread over multiple messages.

reopen log tail / playback

When I re-open the client I'd like to also re-attach to my log files/scrollback then replay znc playback since I disconnected so it appears to me as if I never closed or left the channel/client

I also want this functionality when I join a znc detached a channel, or when I've left a channel completely. (this would kinda require a way to /close a channel or window without /clear'ing it)

This scrollback could be limited to X lines, that's fine with me

So on /join or on client start I'd like if it did this:

  1. Open the channel window
  2. Attach the tail of the log files for that channel so I can Pg Up/Pg Down in it
  3. Send JOIN to server
  4. replay znc playback (I think that's automatic)

Why? Well I want to use /grep rather than having to go dig in my logs dir just because the message is a day old

Make split layout more dynamic

Currently the splits are displayed on top of each other.
For wide (16:9) screens, I think it would be nicer to display them next to each other.
Or even have a way to specify split lines, where a window should be split for the next window to be displayed in, so we can get a layout like:


|-----|----|
|  M  |    |
|  ai |----|
|  n  |    |
|-----|----|

Spellcheck

Here's the thing, I'm apparently terrible at clicking keyboards in the right order, some sort of way to highlight when I make mistakes would be fantastic

Tracking away

Would be helpful to be able to visually see if you are away or not, I'd suggest changing the colour of your own nickname to the left in the action bar. but a simple (away) could also work

per-window drafts

Sometimes when I'm in the middle of typing a longer message something urgent shows up in another channel that I'd like to M-# switch to, write a quick response and then switch back to the message I was composing. but if I M-# switch the input bar isn't cleared

Customizable windowNames

Probably an easy thing to do. Just extend the config by a controls section or something like that and add a field called window-names. I started working on it but I need a bit more time to figure out the config parser.

Unhandled IRC line, Slack server greeting

[23:20] Error: Unhandled IRC line: RawIrcMsg {msgTime = Nothing, msgPrefix = Just (UserInfo {userNick = Identifier "irc.tinyspeck.com"
 "IRC.TINYSPECK.COM", userName = Nothing, userHost = Nothing}), msgCommand = "001", msgParams = ["bitemyapp","Welcome","to","Slack","I
RC","Gateway","server","[email protected]"]}

Stack Install Build Errors

I'm trying to package glirc for a linux distribution. Is there a recommended way to build this with stack install? config-schema and config-value don't seem to be on stackage, and I haven't delved deeply into the Haskell world to be honest.

Also, HSOpenSSL doesn't seem to build with libressl headers. I would think that there is a safer Haskell SSL library than openssl bindings?

Inconsistent rendering and syntax for optional arguments

In the config for macros, you can mark optional arguments with the suffix ?, this is in no way rendered in the client. It is also inconsistent with the inbuild commands where optional arguments are rendered within brackets. I prefer the brackets version personally and would appreciate if it's consistent at least in rendering

For example, if i type /clear it shows /clear [network] [channel]

If I want to create a macro for /clear to /cl I would specify the arguments with ? like below

* name: "cl"
  arguments: "network? channel?"
  commands: "clear ${0|} ${1|}"

If I then type /cl it renders as /cl network channel

Improve activity bar

  • Activity bar could benefit from being multi-line with proper line wrapping.
  • Show network name either conditionally or configurably
  • Allow showing all channels or only active channels

Permanent logs

It would be nice to have logs that are written to a file somewhere. This would also allow to request only new messages from bouncers such as ZNC by looking at the last timestamp which can make it a lot easier to see which messages are new.

Multiple servers with the same hostname

I proxy all my IRC communication via ZNC. I have a separate ZNC network for each server that I connect to (the network is expressed in the username). However, the hostname still stays the same. It would probably make sense to introduce some (optional?) server-name field to decouple the hostname from the name used in commands like connect.

Statically and dynamically remove channels from M-# shortcut

I'd like a way to remove a channel from the M-# shortcuts, both in config but preferably also via a command (that would preferably write to config so it's persisted) to re-add it to the shortcuts. I'd prefer to have to remove it from config/re-run that command

Slack IRC pong noise

Server
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
[22:13] Pong: 1452291213.781862 
[22:14] Pong: 1452291274.275285 
[22:15] Pong: 1452291334.747866 
[22:16] Pong: 1452291395.174491 
[22:17] Pong: 1452291455.614404 
[22:18] Pong: 1452291516.067699 
[22:19] Pong: 1452291576.505944 
[22:20] Pong: 1452291636.961205 
[22:21] Pong: 1452291697.394938 
[22:22] Pong: 1452291757.853501 
[22:23] Pong: 1452291818.279424 
[22:24] Pong: 1452291878.721128 
[22:25] Pong: 1452291939.210567 
[22:26] Pong: 1452291999.664371 
[22:27] Pong: 1452292060.119474 
[22:28] Pong: 1452292120.541495 
[22:29] Pong: 1452292180.97865  
[22:30] Pong: 1452292241.40184  
[22:31] Pong: 1452292302.079368 
[22:32] Pong: 1452292362.861311 
[22:33] Pong: 1452292423.298604 
[22:34] Pong: 1452292483.719994 
[22:35] Pong: 1452292544.141787 
[22:36] Pong: 1452292604.625571 
[22:37] Pong: 1452292665.069012 
[22:38] Pong: 1452292725.535017 
[22:39] Pong: 1452292785.963146 
[22:40] Pong: 1452292846.377331 
[22:41] Pong: 1452292906.809573 
[22:42] Pong: 1452292967.245895 
[22:43] Pong: 1452293027.661967 
[22:44] Pong: 1452293088.098783 
[22:45] Pong: 1452293148.515099 
[22:46] Pong: 1452293208.961015 
[22:47] Pong: 1452293269.393817 
[22:48] Pong: 1452293329.815354 
[22:49] Pong: 1452293390.245694 
[22:50] Pong: 1452293450.659504 
[22:51] Pong: 1452293511.085121 
[22:52] Pong: 1452293571.510839 
[22:53] Pong: 1452293631.938241 
[22:54] Pong: 1452293692.365111 
[22:55] Pong: 1452293752.915159 
[22:56] Pong: 1452293813.384587 
[22:57] Pong: 1452293873.793515 
[22:58] Pong: 1452293934.197721 
[22:59] Pong: 1452293994.632904 
[23:00] Pong: 1452294055.103292 
[23:01] Pong: 1452294115.54768  
[23:02] Pong: 1452294175.97242  
[23:03] Pong: 1452294236.429717 
[23:04] Pong: 1452294296.853414 
chris.allen(+)─(server)─o─o─o─o─o─────────────────────────────────────────────────────────────────────────────────────────────────────
^$

Document log format

Everything is in the title, I think a mention of what the logs are stored as would be helpful for people evaluating glirc from afar to know if it fits their needs :) (example in case: me)

glirc2 seems to fail to recover from connection timeouts

This is the only thing I have in the freenode server window:

20:36 error connection killed due to ping timeout                   
20:36 error IO error: sendBuf: resource vanished (Broken pipe)      
20:56 error IO error: sendBuf: resource vanished (Broken pipe)      
20:59 error Connection closed due to handshake failure in TLS layer 
20:59 error ⋯ Unexpected end of connection

and it's been like that for 20 minutes now; I had to /reconnect a couple of times manually to get connected to a working irc server in the freenode round-robin DNS (one server was unreachable, while another one kicked me out because it was full)

Word wrapping

When a chat message is too long to fit on one line, it is wrapped on per-character basis (by the terminal emulator, I assume -- correct me if it's glirc that does the wrapping). This frequently breaks words across lines and makes reading harder. Would it be possible to wrap chat messages kind of like how irssi does it? Specifically, a line break is inserted only when there is whitespace in the message, so that word boundaries are preserved, and when a line is broken, padding is added to the new line so that its text is aligned with the previous line's?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.