Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

314 lines (313 sloc) 19.807 kb
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "">
<html xmlns="">
<title>quIRC: README</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8;" />
<link rel="stylesheet" href="readme.css" />
<style type="text/css">
tt {margin-left:4em;}
<div id="title">
<h1>quIRC: readme</h1>
<h5>quIRC is a lightweight terminal-based <acronym title="Internet Relay Chat">IRC</acronym> client. It is written in C.</h5>
<div id="contents">
<li><a href="#foreword">Foreword</a></li>
<li><a href="#furtherhelp">Further Help</a></li>
<li><a href="#commands">Commands</a></li>
<li><a href="#configuration">Configuration</a></li>
<li><a href="#inputcontrols">Input Controls</a></li>
<li><a href="#othercontrols">Other Controls</a></li>
<li><a href="#keymapping">Keymapping</a></li>
<li><a href="#tabstrip">Tab strip</a></li>
<li><a href="#trouble">Troubleshooting</a></li>
<div id="foreword">
<p>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 for a chat.</p>
<div id="furtherhelp">
<h2>Further Help</h2>
<p>If this file doesn&apos;t answer your question, you can find help from several other places.</p>
<p>First port of call is the website, <a href=""></a>.<br />
Then there&apos;s the github page, <a href=""></a>.</p>
<p>Or try our IRC channel, #quirc on (if your problem doesn&apos;t prevent you from joining us there!)</p>
<p>Note: before reporting a bug, check the file <small>wontfix</small>, which lists things which are known to be wrong but whose fixes would be unacceptably crocky.</p>
<div id="commands">
<p>All commands are prefixed with a &apos;/&apos;. Anything else is a message to be sent to the channel (or nick if current tab is a private messaging tab).</p>
<dt>/server <em>url</em></dt>
<dd>Connects to the given server (will open in a new tab).</dd>
<dt>/nick <em>nickname</em></dt>
<dd>Sets your nickname. Scope is server-wide (or, in (status) tab, sets default for new /servers).</dd>
<dt>/join <em>channel</em> [<em>key</em>]</dt>
<dd>Joins the given channel (will open in a new tab).</dd>
<dt>/me <em>action</em></dt>
<dd>Sends an &apos;action&apos; to the channel.</dd>
<dt>/msg [-n] <em>recipient</em> [<em>message</em>]</dt>
<dd>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 <em>message</em> is omitted, just opens the tab.</dd>
<dt>/amsg <em>message</em></dt>
<dd>Send message to all attached channels on this server.</dd>
<dt>/ping [<em>recipient</em>]</dt>
<dd>Send a CTCP ping to <em>recipient</em>. If used in a private messaging tab, <em>recipient</em> may be omitted.</dd>
<dt>/topic [<em>message</em>]</dt>
<dd>Sets or gets the channel topic.</dd>
<dt>/mode [<em>nick</em> [{+|-}<em>mode</em>]]</dt>
<dd>Without a {+|-}<em>mode</em>, queries your mode, or the mode of <em>nick</em> if given.<br />
<small>/mode <em>nick</em> +<em>mode</em></small> sets mode <em>mode</em> on <em>nick</em>; <small>/mode <em>nick</em> -<em>mode</em></small> unsets it.</dd>
<dt>/away [<em>msg</em>]</dt>
<dt>/away -</dt>
<dd>Indicates that you are away, by storing an away message (<em>msg</em>) on the server; it will be sent to anyone who private-messages you. <small>/away -</small> or <small>/unaway</small> removes any away message you have set.</dd>
<dt>/afk [<em>msg</em>]</dt>
<dt>/afk -</dt>
<dd>Indicates that you are &apos;away from keyboard&apos; (&apos;afk&apos;) by appending <small>|afk</small> (or <small>|<em>msg</em></small>) to your nick. <small>/afk -</small> removes any such indications.</dd>
<dt>/set <em>option</em> [<em>value</em>]</dt>
<dd>Sets configuration options; the options are analogous to those in .quirc, with one or two extras.
<li>The options &apos;height&apos; and &apos;width&apos; 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.</li>
<li>The option &apos;conf&apos; can be /set for each channel (the rc and cmdline versions control the default setting). In Conference Mode (<small>/set conf +</small>), joins, parts, quits, nick changes etc. will not be displayed. This can be useful in busy channels.</li>
<li>The options &apos;uname&apos;, &apos;fname&apos; and &apos;pass&apos; are analogous to the --uname, --fname and --pass commandline options.</li>
For full details see <a href="config_ref.htm">config_ref.htm</a>.
<dt>/log <em>logtype</em> <em>file</em></dt>
<dt>/log -</dt>
<dd>Starts logging the current buffer to <em>file</em> (relative to <small>~/.quirc/</small>), using a format specified by <em>logtype</em>. This may be <small>plain</small> (human-readable output similar to normal display) or <small>symbolic</small> (machine-readable, though still textual, format).<br />
<small>/log -</small> disables logging for the current buffer.</dd>
<dt>/ignore [-ipd] <em>nick</em>[!<em>user</em>[@<em>host</em>]]</dt>
<dt>/ignore [-ipd] -r <em>regex</em></dt>
<dt>/ignore -l</dt>
<dd>Adds a nick to your &quot;ignore list&quot;, thus preventing messages from that nick from appearing.
<dd>Match will be case-insensitive</dd>
<dd>Will also ignore matching <em>private</em> messages</dd>
<dd>Instead of adding a rule, remove all rules matching the given nick!user@host</dd>
<dd>Supply a regular expression match. The usual form (without -r) generates the regular expression <small>^<em>nick</em>[_~]*!<em>user</em>@<em>host</em>$</small>; if <em>user</em> or <em>host</em> are not given (or begin with *), they are replaced with <small>[^!@]*</small> resp. <small>[^@]</small></dd>
<dd>Instead of adding a rule, list rules which apply to this tab</dd>
<dt>/rejoin [<em>key</em>]</dt>
<dd>Rejoins a channel tab which is dead (eg after losing server connection).</dd>
<dd>Reconnects to a server from which you have become disconnected.</dd>
<dd>Displays the hostname of the server you are connected to.</dd>
<dt>/part <em>channel</em></dt>
<dt>/leave <em>channel</em></dt>
<dd>Leaves (departs) the given channel.</dd>
<dt>/disconnect [<em>message</em>]</dt>
<dd>Disconnects from the server, optionally sending a &apos;quit message&apos;.</dd>
<dd>Closes the current tab. In addition, has an effect which depends on the tab type:
<dd>Disconnects from all servers and quits quIRC</dd>
<dd>Disconnects from the server and all channels on that server</dd>
<dd>Leaves the channel</dd>
<dt>/quit [<em>message</em>]</dt>
<dt>/exit [<em>message</em>]</dt>
<dd>Quits quIRC, optionally sending a &apos;quit message&apos; to the server.</dd>
<dt>/cmd <em>command</em></dt>
<dd>Allows you to send a raw command to the server; not recommended.</dd>
<dt>/tab <em>n</em></dt>
<dd>Switches to tab number <em>n</em>; (status) is tab 0.</dd>
<dd>Swaps the current tab with the tab on its left (or right); tab 0 (status) cannot be moved.</dd>
<dd>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).</dd>
<dd>Sends /<em>msg</em> to the channel.</dd>
<div id="configuration">
<p>quIRC can be configured through an &quot;rc file&quot; as follows. (For a compact reference table see <a href="config_ref.htm">config_ref.htm</a>)</p>
<p>In your home directory (/home/<em>username</em>), create a folder called &quot;.quirc&quot;, a file within that folder called &quot;rc&quot;, and open it in your editor.</p>
<p>In this file you can set servers, nick and channels to automatically use:<br />
<tt>nick <em>global-nickname</em></tt><br />
<tt>pass <em>global-password</em></tt><br />
<tt>ignore -<em>options</em> <em>global-ignore</em></tt><br />
<tt>server <em>url</em></tt><br />
<tt>*chan <em>channel-on-that-server</em></tt><br />
<tt>&gt;log <em>logtype-for-that-channel</em> <em>logfile-for-that-channel</em></tt><br />
<tt>*nick <em>nick-on-that-server</em></tt><br />
<tt>*pass <em>password-for-that-server</em></tt><br />
<tt>*ignore -<em>options</em> <em>ignore-on-that-server</em></tt><br />
where the <em>options</em> 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 <small>-ipr</small>. The <em>options</em> may not be omitted; if none are required, use <small>-</small> (dash).<br />
The logfile (for &gt;log) is relative to <small>~/.quirc/</small>, as with the /log command.</p>
<p>Set the maximum length of nick that will be displayed, with lines<br />
<tt>mnln <em>maxnicklen</em></tt></p>
<p>You can also set mirc-colour-compatibility, with<br />
<tt>mcc <em>mcc-level</em></tt><br />
where 0 doesn&apos;t scan for mirc-colours, 1 silently strips them out, and 2 displays the appropriate colour. The default is mcc 1.</p>
<p>Another setting here is force-redraw, with<br />
<tt>fred <em>force-redraw</em></tt><br />
which will redraw the whole screen when things change; the number controls how often.<br />
0 won't redraw at all, while 3 will redraw every 0.25 seconds. The default is now 0 (it used to be 2, which redraws whenever any buffer is written to or input is entered). Since some improvements were made to the drawing code, fred's assistance should no longer be needed, but we've kept him around just in case.</p>
<p>The size of each scrollback buffer, in lines, can be set with<br />
<tt>buf <em>buf-lines</em></tt><br />
the default being 1024. Larger values will, of course, increase memory consumption.</p>
<p>You can turn on a few display options too;<br />
<tt>fwc</tt><br />
<tt>hts</tt><br />
<tt>tsb</tt><br />
<tt>quiet</tt><br />
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 <small>no-</small>, like<br />
<tt>no-hts</tt><br />
By default fwc, hts and quiet are turned off; tsb is turned on.</p>
<p>You can control the timestamping settings:<br />
<tt>ts <em>ts-level</em></tt><br />
<tt>utc</tt><br />
<tt>its</tt><br />
The timestamping levels are:
<table><tr><td style="padding-left:1em;padding-right:1em;">ts-level</td><td>Meaning</td></tr>
<tr><td style="text-align:center;">0</td><td>No timestamps will be displayed</td></tr>
<tr><td style="text-align:center;">1</td><td>Display timestamps in the form [HH:MM]</td></tr>
<tr><td style="text-align:center;">2</td><td>Display timestamps in the form [HH:MM:SS]</td></tr>
<tr><td style="text-align:center;">3</td><td>Display timestamps in the form [HH:MM:SS +hhmm], where <em>+hhmm</em> is the time zone offset</td></tr>
<tr><td style="text-align:center;">4</td><td>Display timestamps in the form [Day. HH:MM:SS], where <em>Day</em> is the day of the week</td></tr>
<tr><td style="text-align:center;">5</td><td>Display timestamps in the form [Day. HH:MM:SS +hhmm]</td></tr>
<tr><td style="text-align:center;">6</td><td>Pointlessly, display timestamps as seconds since the Epoch</td></tr>
If <small>utc</small> is enabled, timestamps will be displayed as UTC instead of local time, and <em>+hhmm</em> will be replaced by <em>UTC</em>.<br>
If <small>its</small> is enabled, a clock will be displayed at the left-hand end of the input line, using the format specified by the current <small>ts</small> setting.<br>
The default setting is ts-level 1, no-utc, no-its.</p>
<p>These settings and others can be overridden at runtime with commandline options. For details run &quot;quirc --help&quot;.</p>
<p>You can also customise the colours quIRC uses. A custom colour line starts with &apos;%&apos;, followed optionally by &apos;S&apos; or &apos;R&apos; (only use this colour when Sending or Receiving respectively), followed by an identifier, then space or tab, then four space-separated numbers. Like this:<br />
<tt>%[S|R]<em>ident</em> <em>fore</em> <em>back</em> <em>hi</em> <em>ul</em></tt></p>
<p>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.</p>
<p><em>ident</em> can be any of</p>
<dd>Ordinary messages</dd>
<dd>Channel-Join notifications</dd>
<dd>Channel-Leave notifications</dd>
<dd>Nick-change notifications</dd>
<dd>Actions (&apos;/me does something&apos;)</dd>
<dd>status messages</dd>
<dd>error messages</dd>
<dd>Unknown commands (splurged to output)</dd>
<dd>Unknown numerics (splurged to output)</dd>
<div id="inputcontrols">
<h2>Input controls</h2>
<p>These are based, broadly, on <small>bash</small>'s controls.</p>
<dd>Read lines from the input history. History is local to the current tab.</dd>
<dd>Move the cursor within the current input line.</dd>
<dd>Move the cursor to the beginning of the input line.</dd>
<dd>Move the cursor to the end of the input line.</dd>
<dd>Clear the input line.</dd>
<dd>Clear everything to the left of the cursor.</dd>
<dd>Clear everything to the right of the cursor.</dd>
<dd>Autocomplete the nickname to the left of the cursor.</dd>
<dd>Delete the character to the left of the cursor.</dd>
<dd>Delete the word to the left of the cursor. Words are delimited only by spaces.</dd>
<div id="othercontrols">
<h2>Other controls</h2>
<dd>Scroll the current buffer a line at a time.</dd>
<dd>Scroll the current buffer a page at a time.</dd>
<dd>Scroll to the top of the current buffer.</dd>
<dd>Scroll to the bottom of the current buffer.</dd>
<dd>Change tab.</dd>
<dt>F1 through F12</dt>
<dd>Equivalent to <small>/tab <em>#</em></small>, except that F12 is /tab 0.</dd>
<div id="keymapping">
<p>quIRC's mapping of function and other special keys is derived from <strong>terminfo</strong>, so it&apos;s important to set your <small>$TERM</small> correctly. For a few key chords that don't have <strong>terminfo</strong> bindings, it defaults to a VT100 mapping, such as used by <small>xterm</small> and <small>rxvt</small>. However, this mapping can be changed with a file <small>/home/<em>username</em>/.quirc/keys</small>.</p>
<p>To change key mappings, add lines of the form <small><em>MODNAME</em> <em>hex</em></small>. The <em>MODNAME</em>s expected are those which appear in the &quot;<small>keys</small>&quot; file in the quIRC source directory.<br />
The prefix &apos;C&apos; refers to Ctrl, &apos;S&apos; to Shift, and &apos;A&apos; to Alt.</p>
<p>If, for instance, your terminal sends Ctrl-Left as ^[OD, you would add the following line:<br />
<tt>CLEFT 1b4f44</tt><br />
Similarly, if your terminal sends backspace as ^H, you would add:<br />
<tt>BS 08</tt></p>
<p>You can find out what sequences your terminal sends for various keys by running a hex-dump program such as <small>xxd</small> or <small>hd</small>, pressing the key, and noting the output. <em>(You will usually need to press first the key, then enter/return, then ^D)</em></p>
<div id="tabstrip">
<h2>Tab strip</h2>
<p>The strip of tabs along the bottom of the screen has various indicators.</p>
<p>The parens bracketing the name tell you what kind of tab it is:</p>
<dt>&lt;&gt;</dt><dd>nick (private messaging)</dd>
<p>The background colour is green for the current tab, and blue for the current tab&apos;s parent server (if applicable).</p>
<p>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.</p>
<div id="trouble">
<dt>I get several copies of the status line scrolling up my screen!</dt>
<dd><p>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.</p><p>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&apos;s <strong>terminfo</strong> database; if this is inaccurate, or your <small>$TERM</small> is set incorrectly, quIRC will be sending the wrong escape sequences.</p></dd>
<dt>The control keys/cursor keys/function keys don't do anything!</dt>
<dd>This probably means your terminal isn't sending VT100 (ANSI) escape sequences, but rather some other set of sequences. See the section &quot;<a href="#keymapping">Keymapping</a>&quot;, above.</dd>
<dt>I can't build it! My libc doesn't support getaddrinfo_a()!</dt>
<dd><p>You need to disable ASYNCH_NL; <small>cp dist/config.mak .</small> (unless you already have a config.mak) and then uncomment the relevant lines.</p>
<p>This should disable asynchronous name lookups, instead using code which will block while performing the DNS lookup.</p></dd>
<dt>I can't build it! My compiler complains about %jd and intmax_t!</dt>
<dd><p>This is a known bug in some compiler/libc combinations; to work around it you need to define INTMAX_BUG to 1. <small>cp dist/config.mak .</small> (unless you already have a config.mak) and then uncomment the relevant lines.</p>
<p>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.</p></dd>
Jump to Line
Something went wrong with that request. Please try again.