Skip to content
This repository

A terminal-based IRC client

Octocat-spinner-32 dist osconf: INTMAX_BUG to workaround a gcc/musl issue with %jd. July 13, 2012
Octocat-spinner-32 .gitignore More Makefile rework, using .d files for dependencies June 05, 2013
Octocat-spinner-32 COPYING Initial commit. July 26, 2010
Octocat-spinner-32 Makefile Make dists: remove compiled gen* programs June 20, 2013
Octocat-spinner-32 README cleanup: fix some memory leaks. There's still something in getaddrinf… May 25, 2013
Octocat-spinner-32 bits.c Improved handling of mirc formatting codes; we now recognise ^B ^O ^R ^U August 04, 2013
Octocat-spinner-32 bits.h Rejiggered many #includes and the Makefile June 05, 2013
Octocat-spinner-32 buffer.c Rejiggered many #includes and the Makefile June 05, 2013
Octocat-spinner-32 buffer.h Rejiggered many #includes and the Makefile June 05, 2013
Octocat-spinner-32 c_init.awk Add copyright messages to source files that lacked them May 24, 2013
Octocat-spinner-32 colour.c Improved handling of mirc formatting codes; we now recognise ^B ^O ^R ^U August 04, 2013
Octocat-spinner-32 colour.def More Makefile rework, using .d files for dependencies June 05, 2013
Octocat-spinner-32 colour.h Improved handling of mirc formatting codes; we now recognise ^B ^O ^R ^U August 04, 2013
Octocat-spinner-32 config.c Rejiggered many #includes and the Makefile June 05, 2013
Octocat-spinner-32 config.cdl Remove obsolete 'force_redraw' option. May 24, 2013
Octocat-spinner-32 config.h Rejiggered many #includes and the Makefile June 05, 2013
Octocat-spinner-32 ctbuf.c Add copyright messages to source files that lacked them May 24, 2013
Octocat-spinner-32 ctbuf.h Add copyright messages to source files that lacked them May 24, 2013
Octocat-spinner-32 ctcp.c Rejiggered many #includes and the Makefile June 05, 2013
Octocat-spinner-32 ctcp.h Nudge copyright year to 2013 May 24, 2013
Octocat-spinner-32 distMakefile Makefile: remove script.o deps; should only ever have been on 'script… June 06, 2013
Octocat-spinner-32 gen_numerics.py Generate numeric.h from a master data list (in Python) June 05, 2013
Octocat-spinner-32 gen_numerics_text.py Give names for recognised but unhandled numerics June 05, 2013
Octocat-spinner-32 genconfig.c Try again with Issue #20; we need to handle the _c.d as well January 26, 2014
Octocat-spinner-32 genkeymap.c genkeymap: fix allocation: strdup the "" when termcap missing June 06, 2013
Octocat-spinner-32 gitversion More gitversion fixes July 23, 2012
Octocat-spinner-32 input.c Rejiggered many #includes and the Makefile June 05, 2013
Octocat-spinner-32 input.h Rejiggered many #includes and the Makefile June 05, 2013
Octocat-spinner-32 irc.c Remove debugging code from rx_nick June 07, 2013
Octocat-spinner-32 irc.h Rejiggered many #includes and the Makefile June 05, 2013
Octocat-spinner-32 keys Keymapping: fix F-keys March 01, 2012
Octocat-spinner-32 logging.c Rejiggered many #includes and the Makefile June 05, 2013
Octocat-spinner-32 logging.h Add copyright messages to source files that lacked them May 24, 2013
Octocat-spinner-32 man.in Doc updates May 24, 2013
Octocat-spinner-32 names.c Rejiggered many #includes and the Makefile June 05, 2013
Octocat-spinner-32 names.h Nudge copyright year to 2013 May 24, 2013
Octocat-spinner-32 numeric.h Generate numeric.h from a master data list (in Python) June 05, 2013
Octocat-spinner-32 numeric_text.c Give names for recognised but unhandled numerics June 05, 2013
Octocat-spinner-32 numeric_text.h Give names for recognised but unhandled numerics June 05, 2013
Octocat-spinner-32 numerics.py numerics.py: add some error checking January 26, 2014
Octocat-spinner-32 osconf.h Nudge copyright year to 2013 May 24, 2013
Octocat-spinner-32 plans plans: /join 0 is weird January 04, 2014
Octocat-spinner-32 quirc.c More Makefile rework, using .d files for dependencies June 05, 2013
Octocat-spinner-32 readme.css Doc updates September 01, 2010
Octocat-spinner-32 readme.htm Remember channel key for /rejoin (can get from /join, auto-join) May 25, 2013
Octocat-spinner-32 spec-cdl config: generate much of the config code from a concise descriptions … April 06, 2011
Octocat-spinner-32 strbuf.c Nudge copyright year to 2013 May 24, 2013
Octocat-spinner-32 strbuf.h Nudge copyright year to 2013 May 24, 2013
Octocat-spinner-32 text.h Nudge copyright year to 2013 May 24, 2013
Octocat-spinner-32 ttyesc.c Rejiggered many #includes and the Makefile June 05, 2013
Octocat-spinner-32 ttyesc.h Rejiggered many #includes and the Makefile June 05, 2013
Octocat-spinner-32 ttyraw.c Add copyright messages to source files that lacked them May 24, 2013
Octocat-spinner-32 ttyraw.h Add copyright messages to source files that lacked them May 24, 2013
Octocat-spinner-32 tutorial.htm tutorial: update the explanation of osconf stuff (use config.mak) October 08, 2012
Octocat-spinner-32 types.c Nudge copyright year to 2013 May 24, 2013
Octocat-spinner-32 types.h Nudge copyright year to 2013 May 24, 2013
README
****** quIRC: readme ******
** quIRC is a lightweight terminal-based IRC client. It is written in C. **
***** Contents *****
    * Foreword
    * Further_Help
    * Commands
    * Configuration
    * Input_Controls
    * Other_Controls
    * Keymapping
    * Tab_strip
    * Troubleshooting
***** Foreword *****
I like to engage with my user population. I welcome bug reports, feature
requests, patches, and even undirected rambling musings about what direction
quIRC should take in the future. If you use (or are considering using) quIRC,
please drop into #quirc on irc.newnet.net for a chat.
***** Further Help *****
If this file doesn't answer your question, you can find help from several other
places.
First port of call is the website, http://jttlov.no-ip.org.
Then there's the github page, http://github.com/ec429/quIRC.
Or try our IRC channel, #quirc on irc.newnet.net (if your problem doesn't
prevent you from joining us there!)
***** Commands *****
All commands are prefixed with a '/'. Anything else is a message to be sent to
the channel (or nick if current tab is a private messaging tab).
  /server url
      Connects to the given server (will open in a new tab).
  /nick nickname
      Sets your nickname. Scope is server-wide (or, in (status) tab, sets
      default for new /servers).
  /join channel [key]
      Joins the given channel (will open in a new tab).
  /me action
      Sends an 'action' to the channel.
  /msg [-n] recipient [message]
      Private message; sends the message to the given recipient. Will open a
      private messaging tab if one is not already open for that recipient
      (suppress with -n). If message is omitted, just opens the tab.
  /amsg message
      Send message to all attached channels on this server.
  /ping [recipient]
      Send a CTCP ping to recipient. If used in a private messaging tab,
      recipient may be omitted.
  /topic [message]
      Sets or gets the channel topic.
  /mode [nick [{+|-}mode]]
      Without a {+|-}mode, queries your mode, or the mode of nick if given.
      /mode nick +mode sets mode mode on nick; /mode nick -mode unsets it.
  /away [msg]
  /unaway
  /away -
      Indicates that you are away, by storing an away message (msg) on the
      server; it will be sent to anyone who private-messages you. /away - or /
      unaway removes any away message you have set.
  /afk [msg]
  /afk -
      Indicates that you are 'away from keyboard' ('afk') by appending |afk (or
      |msg) to your nick. /afk - removes any such indications.
  /set option [value]
      Sets configuration options; the options are analogous to those in .quirc,
      with one or two extras.
          * The options 'height' and 'width' are used to tell quIRC how many
            rows and columns your terminal has (for cursor-positioning). quIRC
            will try to deduce these values (from environment variables $LINES
            and $COLUMNS, using defaults of 80x24 if these env vars are not
            found), but you can override those guesses here or on the command
            line.
          * The option 'conf' can be /set for each channel (the rc and cmdline
            versions control the default setting). In Conference Mode (/set
            conf +), joins, parts, quits, nick changes etc. will not be
            displayed. This can be useful in busy channels.
          * The options 'uname', 'fname' and 'pass' are analogous to the --
            uname, --fname and --pass commandline options.
      For full details see config_ref.htm.
  /log logtype file
  /log -
      Starts logging the current buffer to file (relative to ~/.quirc/), using
      a format specified by logtype. This may be plain (human-readable output
      similar to normal display) or symbolic (machine-readable, though still
      textual, format).
      /log - disables logging for the current buffer.
  /ignore [-ipd] nick[!user[@host]]
  /ignore [-ipd] -r regex
  /ignore -l
      Adds a nick to your "ignore list", thus preventing messages from that
      nick from appearing.
        -i
            Match will be case-insensitive
        -p
            Will also ignore matching private messages
        -d
            Instead of adding a rule, remove all rules matching the given
            nick!user@host
        -r
            Supply a regular expression match. The usual form (without -r)
            generates the regular expression ^nick[_~]*!user@host$; if user or
            host are not given (or begin with *), they are replaced with [^!@]*
            resp. [^@]
        -l
            Instead of adding a rule, list rules which apply to this tab
  /rejoin [key]
      Rejoins a channel tab which is dead (eg after losing server connection).
      If key is not specified, the previous key (if any) will be used.
  /reconnect
      Reconnects to a server from which you have become disconnected.
  /realsname
      Displays the hostname of the server you are connected to.
  /part channel
  /leave channel
      Leaves (departs) the given channel.
  /disconnect [message]
      Disconnects from the server, optionally sending a 'quit message'.
  /close
      Closes the current tab. In addition, has an effect which depends on the
      tab type:
        (status)
            Disconnects from all servers and quits quIRC
        {server}
            Disconnects from the server and all channels on that server
        [channel]
            Leaves the channel
  /quit [message]
  /exit [message]
      Quits quIRC, optionally sending a 'quit message' to the server.
  /cmd command
      Allows you to send a raw command to the server; not recommended.
  /tab n
      Switches to tab number n; (status) is tab 0.
  /left
  /right
      Swaps the current tab with the tab on its left (or right); tab 0 (status)
      cannot be moved.
  /sort
      Sorts the tab list into an intuitive order (grouping channels after their
      parent servers; maintaining the order of the servers and of each server's
      channels).
  //[msg]
      Sends /msg to the channel.
***** Configuration *****
quIRC can be configured through an "rc file" as follows. (For a compact
reference table see config_ref.htm)
In your home directory (/home/username), create a folder called ".quirc", a
file within that folder called "rc", and open it in your editor.
In this file you can set servers, nick and channels to automatically use:
nick global-nickname
pass global-password
ignore -options global-ignore
server url
*chan channel-on-that-server
>log logtype-for-that-channel logfile-for-that-channel
*nick nick-on-that-server
*pass password-for-that-server
*ignore -options ignore-on-that-server
where the options to [*]ignore are those for the /ignore command (except for l
and d), and must not be separated by whitespace. You can however combine
options, like -ipr. The options may not be omitted; if none are required, use -
(dash).
The logfile (for >log) is relative to ~/.quirc/, as with the /log command.
Set the maximum length of nick that will be displayed, with lines
mnln maxnicklen
You can also set mirc-colour-compatibility, with
mcc mcc-level
where 0 doesn't scan for mirc-colours, 1 silently strips them out, and 2
displays the appropriate colour. The default is mcc 1.
The size of each scrollback buffer, in lines, can be set with
buf buf-lines
the default being 1024. Larger values will, of course, increase memory
consumption.
You can turn on a few display options too;
fwc
hts
tsb
quiet
will turn on Full-Width-Colour (makes coloured backgrounds for lines (eg. /me)
run all the way across the terminal), Highlight-Tab-Strip (gives the tab strip
a magenta background, to make it more visible), Top-Status-Bar (uses the top
line of the terminal for some status information), and Quiet Mode (many
informational messages, including unrecognised IRC traffic, are suppressed). To
turn them off prefix them with no-, like
no-hts
By default fwc, hts and quiet are turned off; tsb is turned on.
You can control the timestamping settings:
ts ts-level
utc
its
The timestamping levels are:
ts-level Meaning
0        No timestamps will be displayed
1        Display timestamps in the form [HH:MM]
2        Display timestamps in the form [HH:MM:SS]
3        Display timestamps in the form [HH:MM:SS +hhmm], where +hhmm is the
         time zone offset
4        Display timestamps in the form [Day. HH:MM:SS], where Day is the day
         of the week
5        Display timestamps in the form [Day. HH:MM:SS +hhmm]
6        Pointlessly, display timestamps as seconds since the Epoch
If utc is enabled, timestamps will be displayed as UTC instead of local time,
and +hhmm will be replaced by UTC.
If its is enabled, a clock will be displayed at the left-hand end of the input
line, using the format specified by the current ts setting.
The default setting is ts-level 1, no-utc, no-its.
These settings and others can be overridden at runtime with commandline
options. For details run "quirc --help".
You can also customise the colours quIRC uses. A custom colour line starts with
'%', followed optionally by 'S' or 'R' (only use this colour when Sending or
Receiving respectively), followed by an identifier, then space or tab, then
four space-separated numbers. Like this:
%[S|R]identfore back hi ul
Fore and Back set the foreground and background colours (8 colours each, red=4
green=2 blue=1, add for mixtures, eg white=7). Hi sets bright, Ul sets
underline; both are true if nonzero.
ident can be any of
  msg
      Ordinary messages
  notice
      Notices
  join
      Channel-Join notifications
  part
      Channel-Leave notifications
  quit
      Quit-messages
  nick
      Nick-change notifications
  act
      Actions ('/me does something')
  status
      status messages
  err
      error messages
  unk
      Unknown commands (splurged to output)
  unn
      Unknown numerics (splurged to output)
***** Input controls *****
These are based, broadly, on bash's controls.
  Up/Down/PgUp/PgDn
      Read lines from the input history. History is local to the current tab.
  Left/Right
      Move the cursor within the current input line.
  Home
  Ctrl-A
      Move the cursor to the beginning of the input line.
  End
  Ctrl-E
      Move the cursor to the end of the input line.
  Ctrl-C
      Clear the input line.
  Ctrl-X
      Clear everything to the left of the cursor.
  Ctrl-K
      Clear everything to the right of the cursor.
  Tab
  Ctrl-I
      Autocomplete the nickname to the left of the cursor.
  Ctrl-H
  Backspace
      Delete the character to the left of the cursor.
  Ctrl-W
      Delete the word to the left of the cursor. Words are delimited only by
      spaces.
***** Other controls *****
  Ctrl-Up
  Ctrl-Down
      Scroll the current buffer a line at a time.
  Ctrl-PgUp
  Ctrl-PgDn
      Scroll the current buffer a page at a time.
  Ctrl-Home
      Scroll to the top of the current buffer.
  Ctrl-End
      Scroll to the bottom of the current buffer.
  Ctrl-left
  Ctrl-right
      Change tab.
  F1 through F12
      Equivalent to /tab #, except that F12 is /tab 0.
***** Keymapping *****
quIRC's mapping of function and other special keys is derived from terminfo, so
it's important to set your $TERM correctly. For a few key chords that don't
have terminfo bindings, it defaults to a VT100 mapping, such as used by xterm
and rxvt. However, this mapping can be changed with a file /home/
username/.quirc/keys.
To change key mappings, add lines of the form MODNAME hex. The MODNAMEs
expected are those which appear in the "keys" file in the quIRC source
directory.
The prefix 'C' refers to Ctrl, 'S' to Shift, and 'A' to Alt.
If, for instance, your terminal sends Ctrl-Left as ^[OD, you would add the
following line:
CLEFT 1b4f44
Similarly, if your terminal sends backspace as ^H, you would add:
BS 08
You can find out what sequences your terminal sends for various keys by running
a hex-dump program such as xxd or hd, pressing the key, and noting the output.
(You will usually need to press first the key, then enter/return, then ^D)
***** Tab strip *****
The strip of tabs along the bottom of the screen has various indicators.
The parens bracketing the name tell you what kind of tab it is:
  ()
      status
  {}
      server
  []
      channel
  <>
      nick (private messaging)
The background colour is green for the current tab, and blue for the current
tab's parent server (if applicable).
The foreground colour of tabs other than the current tab will turn red to
indicate that there are new messages on that tab (and flash cyan if a message
contains your nick). If a tab is 'dead' (eg. disconnected from server), it
turns yellow.
***** Troubleshooting *****
  I get several copies of the status line scrolling up my screen!
      One possible cause of this is that your terminal size is not what quIRC
      thinks it is. You may need to /set height and width, or export the
      environment variables $LINES and $COLUMNS from your shell (typically you
      would also add this to your shell's .rc file), or as a last resort resize
      your terminal to 80x24.
      Another possibility is that your terminal emulator isn't recognising
      terminal escape sequences (which quIRC uses heavily for eg. cursor
      positioning). For details see your terminal emulator's documentation; it
      is known that xterm works out-of-the-box. In general quIRC relies on your
      system's terminfo database; if this is inaccurate, or your $TERM is set
      incorrectly, quIRC will be sending the wrong escape sequences.
  The control keys/cursor keys/function keys don't do anything!
      This probably means your terminal isn't sending VT100 (ANSI) escape
      sequences, but rather some other set of sequences. See the section
      "Keymapping", above.
  I can't build it! My libc doesn't support getaddrinfo_a()!
      You need to disable ASYNCH_NL; cp dist/config.mak . (unless you already
      have a config.mak) and then uncomment the relevant lines.
      This should disable asynchronous name lookups, instead using code which
      will block while performing the DNS lookup.
  I can't build it! My compiler complains about %jd and intmax_t!
      This is a known bug in some compiler/libc combinations; to work around it
      you need to define INTMAX_BUG to 1. cp dist/config.mak . (unless you
      already have a config.mak) and then uncomment the relevant lines.
      This should work around the bug by using %lld and (long long int) instead
      of %jd and (intmax_t). Since what we're actually printing is a time_t,
      this ought to work.
Something went wrong with that request. Please try again.