MCABBER(1)
===========
Mikael BERTHE <mcabber@lilotux.net>
v0.8.3, November 2006

NAME
----
mcabber - a simple Jabber console client

SYNOPSIS
--------
'mcabber' [ -f configfile ] [ --help | -h ]

DESCRIPTION
-----------
`mcabber(1)` is a small Jabber console client. +
For now it needs a configuration file to start, so please copy the sample
mcabberrc file and adapt your connection settings.

You also need to have an existing Jabber account to use this software, as
it cannot (un)register accounts yet.

Here are some of the features of `mcabber`:

- 'SSL support'.
- 'MUC support' (Multi-User Chat).
- 'History logging:'  If enabled (see the CONFIGURATION FILE section),
  `mcabber` can save discussions to history log files.
- 'Commands completion:'  If possible, `mcabber` will try to complete your
  command line if you hit the Tab key.
- 'Input line history:'  Any message or command entered is in the input line
  history and can be reused easily.
- 'External actions:'  Some events (like receiving a message) can trigger an
  external action such as a shell script if you enable it in your
  configuration file.  A sample events script ("eventcmd") is provided with
  `mcabber` source code, in the contrib directory.

OPTIONS
-------
--help, -h::
        Quick help usage message

-f configfile::
        Use configuration file 'configfile'

WINDOWS/PANES
-------------
The `mcabber(1)` screen is divided into 4 regions.
The 'roster', alias 'buddylist', is on the left.  The 'chat window', or chat
buffer, is on the right.  The 'input line' lies at the bottom of the screen,
under a small 'log window'.

Two status lines surround the log window.  The bottom status line is the
"main status line" and reflects mcabber general status.  The other line
is the "chat status line" and shows the status of the currently selected
buddy.

To display buddies chat buffers, you will have to enter 'chat mode'.
You can enter chat mode by pressing enter, and leave chat mode with the ESC
key.  Simply sending a message will also enable chat mode.

There are several advantages to the two-mode implementation: first, it allows
accurate "unread" message functionality, as described in the next section;
without this, merely scrolling to a specific buddy will "read" the new
messages of all buddies in-between.  Second, it allows quickly hiding the
conversation with a single keystroke.  Third, it allows jumping between
the few buddies with whom you are conversing with the '/roster alternate'
command described in another section, without having to manually scroll
back and forth.

KEYS
----
Text typing occurs in the 'input line'; basic operations are supported
(left arrow, right arrow, home/end keys, insert, delete, backspace...).

PageUp and PageDown keys are used to move in the roster.

Up and Down arrow keys can be used to move in the input line history; they
jump to the previous/next line from the history beginning with the same string
(from first column to the cursor column).

To send a message, move to the choosen buddy in the buddylist, type your
message and hit enter.  If the line begins with a slash, this will be
interpreted as a command (see the COMMAND section below).  Hit escape to
leave the chat mode.

Here is a quick description of the key bindings:

Ctrl-a::        Go to the beginning of the input line
Ctrl-e::        Go to the end of the input line
Ctrl-l::        Force a refresh
Up/Down::       Move in the input line history
PgUp/PgDown::   Move inside the roster (buddylist)
Tab::           Complete current word, in the input line
Ctrl-g::        Cancel completion / ctrl-g
Ctrl-p/Ctrl-n:: Scroll up/down half a screen in the buffer window (chat mode)
Ctrl-Left::     Move the cursor back to the start of the current or previous word
Ctrl-Right::    Move the cursor forward to the end of the current or next word
Ctrl-u::        Delete from beginning of the line to the cursor
Ctrl-k::        Delete from the cursor to the end of line
Ctrl-w::        Backward kill word
Ctrl-t::        Transpose chars
Ctrl-o::        Accept line and put the next history line in the input line (accept-line-and-down-history)
Ctrl-q::        Jump to the next unread message

Additional key bindings may be specified using the /bind command described
in the COMMANDS section.

MCABBER'S ROSTER
----------------
The first listed resource on the roster is '[status]', which keeps a log of
everything that appears in the short log window below the main chat area.
While the log window was designed for showing the latest few elements, the
dedicated '[status]' buffer allows more comfortable viewing of the log, as
well as scrolling it in a standard manner.

Group names are displayed above the resources that are within them, and are
indicated by '---' to the left of the name.

For every real Jabber resource, the roster displays four pieces of information:
the resource's name or alias, its online status, its authorization status, and
whether there are unread messages from the resource waiting for you.

The online status is one of the following:

        'o';;  online
        'f';;  free for chat
        'a';;  away
        'n';;  not available (labeled 'extended away' in some clients)
        'd';;  do not disturb
        'i';;  invisible (displayed only for your resource)
        '_';;  offline (or invisible to you)
        '?';;  unknown, usually meaning you are not authorized to see this resource's status
        'x';;  a conference room in which you are not participating
        'C';;  a conference room in which you are participating

The authorization status indicates whether a resource is authorized to receive
your online status updates, and is displayed by the brackets surrounding the
resource's online status.  Square brackets, like '[o]', indicate that this
resource is authorized to receive your status.  Curly braces, like '\{o\}',
indicate that they are not authorized to receive your status.

When there are unread messages from the resource which you have not looked at,
a hash mark ('#') appears in the leftmost section of the roster for that
resource.  The hash mark disappears once you view that resource's message log.

Examples:

        ' --- Buds';;     This is a group named 'Buds'
        '#[o] John';;     John is online, can see your status, and sent you a message that you did not read yet
        ' \{?\} Sally';;  Neither you nor Sally have authorized each other to see your online status
        ' \{a\} Jane';;   Jane is away, but she cannot see your online status
        '#[C] x@y.c';;    You are participating in x@y.c conference room, and there are unread messages

COMMANDS RELATED TO MCABBER
---------------------------
/alias [name [= command line]]::
        Add "name" as an alias for "command line". +
        Aliases are expanded only once, thus they can not be chained. +
        "/alias name" displays the value associated with the "name" alias; +
        "/alias name =" unsets the "name" alias. +
        "/alias" displays a list of the existing aliases. +
        Example: "/alias away = status away".

/bind [keycode [= command line]]::
        Bind a command line to the key with the "keycode" code number. +
        Keycodes of unused keys are displayed by `mcabber` in the log window
        when pressing the key, for example "Unknown key=265". +
        "/bind keycode" displays the command line bound to the given keycode; +
        "/bind keycode =" unbinds the given keycode. +
        "/bind" displays a list of the bound keycodes. +
        Note: aliases can be used in key bindings. +
        Example: "/bind 265 = status online" (265 is F1 for me, but it may
        depend on your ncurses installation).

/buffer clear|purge|top|bottom|date|%|search_backward|search_forward::
/buffer scroll_lock|scroll_unlock|scroll_toggle::
        The 'buffer' command manipulates the current buddy's buffer
        (chat window).

        'clear';;                clear the current buddy chat window
        'purge';;                clear the current buddy chat window and empty all contents of the chat buffer
        'bottom';;               jump to the bottom of the current buddy chat buffer
        'top';;                  jump to the top of the current buddy chat buffer
        'up' [n];;               scroll the buffer up n lines (default: half a screen)
        'down' [n];;             scroll the buffer down n lines (default: half a screen)
        'date' date;;            jump to the first line after the specified date in the chat buffer (date format: "YYYY-mm-dd[THH:MM:SS]", "-" and ":" are optional)
        '%' n;;                  jump to position %n of the buddy chat buffer
        'search_backward' text;; search for "text" in the current buddy chat buffer
        'search_forward'  text;; search for "text" in the current buddy chat buffer
        'scroll_lock';;          lock buffer scrolling
        'scroll_unlock';;        unlock buffer scrolling
        'scroll_toggle';;        toggle buffer scrolling (lock/unlock)

/clear::
        The 'clear' command is actually an alias for "/buffer clear".

/help [command]::
        Display generic help or help about a specific mcabber command.

/quit::
        Disconnect and leave `mcabber(1)`.

/version::
        Display mcabber version

COMMANDS RELATED TO THE SERVER AND CONNECTION
---------------------------------------------
/connect::
        Establish connection to the Jabber server.

/disconnect::
        Terminate connection to the Jabber server.  Note: the roster is only
        available when the connection to the server is active, so the
        buddylist is empty when disconnected.

/event #n|* accept|ignore|reject::
/event list::
        Tell mcabber what to do about a pending event. +
        If the first parameter is "*", the command will apply to all
        queued events.

        'accept';;  accept the event #n
        'ignore';;  remove the event #n from the list
        'reject';;  reject the event #n
        'list';;    list all pending events

/rawxml send string::
        'send' string: send string (raw XML format) to the Jabber server.  No check is done on the string provided.  BEWARE! Use this only if you know what you are doing, or you could terminate the connection.

COMMANDS RELATED TO THE ROSTER AND JABBER RESOURCES
---------------------------------------------------
/add [jid [nickname]]::
        Add the "jid" Jabber user to our roster (default group), and send a
        notification request to this buddy.  If no nickname is specified, the
        jid is used.  If no jid (or an empty string "") is provided or if jid
        is ".", the current buddy is used.

/authorization allow|cancel|request|request_unsubscribe [jid]::
        Manage the presence subscriptions. +
        If no jid is provided, the current buddy is used.

        'allow';;   allow the buddy to receive your presence updates
        'cancel';;  cancel the buddy' subscription to your presence updates
        'request';; request a subscription to the buddy's presence updates
        'request_unsubscribe';; request unsubscription from the buddy's presence updates

/del::
        Delete the current buddy from our roster, unsubscribe from its presence
        notification and unsubscribe it from ours.

/group fold|unfold|toggle::
        The 'group' command changes the current group display.

        'fold';;   fold (shrink) the current group tree in the roster
        'unfold';; unfold (expand) the current group tree in the roster
        'toggle';; toggle the state (fold/unfold) of the current tree

/info::
        Display info on the selected entry (user, agent, group...). +
        For users, resources are displayed with the status, priority and
        status message (if available) of each resource.

/move [groupname]::
        Move the current buddy to the requested group.  If no group is
        specified, then the buddy is moved to the default group. +
        Tip: if the chatmode is enabled, you can use "/roster alternate"
        to jump to the moved buddy.

/msay begin|verbatim|send|send_to|toggle|toggle_verbatim|abort::
        Send a multi-line message.  To write a single message with several
        lines, the 'multi-line mode' should be used. +
        In multi-line mode, each line (except command lines) typed in the input
        line will be added to the multi-line message.  Once the message is
        finished, it can be sent to the current selected buddy with the "/msay
        send" command. +
        The 'begin' subcommand enables multi-line mode.  Note that it allows
        a message subject to be specified. +
        The 'verbatim' multi-line mode disables commands, so that it is
        possible to enter lines starting with a slash.  Only the "/msay"
        command (with send or abort parameters) can be used to exit verbatim
        mode. +
        The 'toggle' and 'toggle_verbatim' subcommands can be bound to a key to
        use the multi-line mode quickly (for example, "bind M109 = msay toggle"
        to switch using the Meta-m combination).

        'begin' [subject];; enter multi-line mode
        'verbatim';;        enter verbatim multi-line mode
        'send';;            send the current multi-line message to the currently selected buddy
        'send_to' jid;;     send the current multi-line message to "jid"
        'toggle';;          switch to/from multi-line mode (begin/send)
        'toggle_verbatim';; same with verbatim multi-line mode
        'abort';;           leave multi-line mode without sending the message

/rename name::
        Rename current buddy or group to the given name.
        Please note that a group name change is only done when the server's
        acknowledgment is received, so a slight delay can be noticed.

/request time|version [jid]::
        Send a "IQ" query to the current buddy, or to the specified Jabber
        user.  If the resource is not provided with the jid, mcabber will
        send the query to all known resources for this user.

/room join|leave|names|nick|privmsg|remove|topic|unlock|destroy::
/room invite|kick|ban|role|affil::
        The 'room' command handles Multi-User Chat room actions.

        'join' [room [nick [pass]]];; join "room", using "nick" as nickname.  If no nickname is provided (or if it is an empty string), the "nickname" option value is used (see sample configuration file).  If the currently selected entry is correctly recognized as a room by mcabber, the shortcut "." can be used instead of the full room id.  A password can be provided to enter protected rooms.  If your nickname contains space characters, use quotes.
        'leave' [message];;     leave the current room
        'names';;               display members of the current room
        'nick' nick;;           change your nickname in the current room
        'privmsg' nick msg;;    send private message "msg" to "nick"
        'remove';;              remove the current room from the roster (you must have left this room before)
        'topic';;               set topic for current room
        'unlock';;              unlock current room (if you are the owner)
        'destroy' [reason];;    destroy the current room (use with care!)
        'whois' nick;;          display MUC information about "nick"
        'ban' jid [reason];;    ban jid from the current room
        'invite' jid [reason];; invite jid to the current room
        'kick' nick [reason];;  kick "nick" from the current room
        'role' jid role [reason];;  change jid's role (role can be "none", "visitor", "participant", "moderator")
        'affil' jid affil [reason];; change jid's affiliation (affil can be "none", "member", "admin", "owner")

/roster bottom|top|hide_offline|show_offline|toggle_offline::
/roster hide|show|toggle::
/roster alternate|unread_first|unread_next::
/roster search bud::
        The 'roster' command manipulates the roster/buddylist.  Here are the available parameters:

        'bottom';;       jump to the bottom of the roster
        'top';;          jump to the top of the roster
        'up';;           move up in the roster
        'down';;         move down in the roster
        'hide_offline';; hide offline buddies
        'show_offline';; show offline buddies
        'toggle_offline';; toggle display of offline buddies
        'hide';;         hide roster (full-width chat window)
        'show';;         show roster
        'toggle';;       toggle roster visibility
        'search' bud;;   search for a buddy with a name or jid containing "bud" (only in the displayed buddylist)
        'alternate';;    jump to alternate buddy.  The "alternate" buddy is the last buddy left while being in chat mode (this command is thus especially useful after commands like "/roster unread_first")
        'unread_first';; jump to the first unread message
        'unread_next';;  jump to the next unread message

/say text::
        Send the "text" message to the currently selected buddy.  Can be useful
        if you want to send a message beginning with a slash, for example.

/say_to jid text::
        Send the "text" message to the specified jid.
        Please note that this command doesn't set the default resource for
        a contact, so if you want to send several messages to a specific
        resource you will have to use "/say_to" for each message.

/status [online|avail|invisible|free|dnd|notavail|away [-|StatusMessage]]::
        Show or set the current status. +
        If no status is specified, display the current status. +
        If a status message is specified, it will overrride the message*
        variables (these variables can be set in the configuration file).
        If no relevant message* variable is set and no status message provided,
        the current status message is kept.  If StatusMessage is "-", the
        current status message is cleared.

/status_to jid online|avail|invisible|free|dnd|notavail|away [StatusMessage]::
        Send the requested status to the specified Jabber user. +
        If the specified jid is ".", the current buddy is used. +
        Note: this status will be overridden by subsequent "/status" commands.
        If you are using the auto-away feature, the status will overridden
        too. +
        Note: The jid can include a resource (i.e. user@server/resource).

CONFIGURATION FILE
------------------
See the provided sample configuration file, which should be self-documenting.

FILES
-----
The following files can be used by `mcabber(1)`:

    $HOME/.mcabber/mcabberrc    Default configuration file
    $HOME/.mcabberrc            Configuration file used if no other has been found
    $HOME/.mcabber/histo/       Default directory for storing chat history files, if enabled

BUGS
----
Certainly.  Please tell me if you find one!  :-)

AUTHOR
------
Written by mailto:mcabber@lilotux.net[Mikael BERTHE]. +
Originally based on http://cabber.sourceforge.net[Cabber], please
consult the AUTHORS file for details.

RESOURCES
---------
http://www.lilotux.net/~mikael/mcabber/[Main web site]

COPYING
-------
Copyright (C) 2005, 2006 Mikael Berthe. +
Some portions are Copyright (C) 2002-2004 mailto:cabber@ajmacias.com[].

Free use of this software is granted under the terms of the GNU General Public
License (GPL).

