Multi-line messages

You can send multi-line messages with the /msay command (see the manpage for usage details).

You can bind /msay toggle and/or /msay toggle_verbatim so that you can switch quickly to/from multi-line mode:

# Alt-m to switch to/from multi-line mode
bind M109 = msay toggle
# Alt-M to switch to/from _verbatim_ multi-line mode
bind M77 = msay toggle_verbatim

With mcabber 0.10 you can try the module extsay if you're using the screen utility (see the Modules page).

Jump to a contact

You can use /roster search to jump to a contact in your roster. You can even bind a key, for example if you talk very often with, you can bind the F1 key:

bind 265 = roster search john.doe

Note: this command only looks for the contact in the displayed buddy, so if you hide offline buddies it won't find a disconnected contact.

You may want to create an alias for this command, if you use it a lot:

alias rsearch = roster search

With the completion, you only need to type /rs<tab> now.

One history for multiple buddies

(You'll need mcabber >=0.9.2 for that feature)
You're using jabber with several transports and you have some buddies who are using more than one chat protocol? mcabber is able to share one history file between all of them.

Let's say you have a contact and First of all, you have to merge both histories with, so that old data won't be lost.

$ cd ~/.mcabber/histo/
$ merge_history abc\ abc\ > abc
$ mv abc abc\
$ rm abc\

Now you have to create a symlink( ->

$ ln -sf abc\ abc\

After a restart, mcabber will load the history only once for both contacts. Both JIDs are sharing this history now. Commands relating to the chat buffer, such as /buffer scroll_lock/purge/clean on one buddy will change the buffer of the other buddy as well (because it's internally the same buffer).

Of course it is possible to link more than two buddies to one history... :)

Indication of transported buddies availability

Using FIFO feature and eventcmd script you can mark transported buddies with different color, when transport is not connected. In mcabberrc:

color roster clear
color roster *     *                green
color roster dn_?  *                brightblack
color roster *     * red
color roster dn_?  * red

This will mark transported buddies as unavailable initially. Then in, when processing STATUS event ( "$1" = 'STATUS' )

if [ "$3" = '' ]; then
        if [ "$2" = '_' ]; then
                echo "color roster * * red" > ~/.mcabber/fifo
                echo "color roster dn_? * red" > ~/.mcabber/fifo
                echo "color roster * * white" > ~/.mcabber/fifo
                echo "color roster dn_? * brightblack" > ~/.mcabber/fifo

This will change their color, when transport becomes available/unavailable.

Delayed actions (eg message for 'dnd' buddy)

You can delay some action until buddy becomes available or some other event happens. Add to

if [ -f ~/.mcabber/jobs/"$1_$2_$3" ]; then
        cat ~/.mcabber/jobs/"$1_$2_$3" > ~/.mcabber/fifo
        rm ~/.mcabber/jobs/"$1_$2_$3"

and create jobs dir:

$ mkdir ~/.mcabber/jobs/

Then you can do something like this:

$ cat > ~/.mcabber/jobs/ <<EOF
> say_to -q Hi, this is a jobbed message
> say_to -q Please, when you will have free time, do this and that.

That will not bother buddy while he is 'dnd', and you won't have to keep your message in mind.

Folding groups on start

With a hooks feature you can fold infrequently used groups (eg transports and other services) on startup. In mcabberrc:

set hook-post-connect   = source ~/.mcabber/post-connect.rc
set hook-pre-disconnect = source ~/.mcabber/pre-disconnect.rc

and in ~/.mcabber/post-connect.rc:

group fold Transports
group fold Old

Auto-Away and Screen

So, we all want an auto-away but love to keep mcabber ticking away in a screen session. By putting the following into your ~/.logout (or ~/.bash_logout if you use BASH), you should get what you are looking for:

# mcabber auto-away - probably a Linux only solution as we use /proc
if [ -p .mcabber/mcabber.fifo ]; then
  MCABBER_PID=$(pgrep -u $USER mcabber)
  if [ -n $MCABBER_PID ]; then
    MCABBER_STY=$(cat /proc/$MCABBER_PID/environ | tr '\0' '\n' | grep '^STY=' | cut -d'=' -f2)

    if [ -n $MCABBER_STY ]; then
      if [ -z "$(screen -list | grep $MCABBER_STY.*\(Attached\))" ]; then
        echo /status notavail > .mcabber/mcabber.fifo