Tips_And_Tricks.mdwn
author Mikael Berthe <mikael@lilotux.net>
Sun, 17 Sep 2017 12:31:09 +0200
changeset 4 8c1dcfaf45a7
parent 1 1e57279b82b1
permissions -rw-r--r--
Add OpenBSD package (Raf Czlonka)


[[!toc]]

# 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 john.doe@jabber.foo, 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 abc@jabber.org and abc@icq.jabber.org. First of
all, you have to merge both histories with `merge_history.py`, so that old data
won't be lost.

    $ cd ~/.mcabber/histo/
    $ merge_history abc\@jabber.org abc\@icq.jabber.org > abc
    $ mv abc abc\@jabber.org
    $ rm abc\@icq.jabber.org

Now you have to create a symlink(abc@icq.jabber.org -> abc@jabber.org):

    $ ln -sf abc\@jabber.org abc\@icq.jabber.org

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 *     *@icq.jabber.org red
    color roster dn_?  *@icq.jabber.org red

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

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

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 `eventcmd.sh`:

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

and create jobs dir:

    $ mkdir ~/.mcabber/jobs/

Then you can do something like this:

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

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
          fi
        fi
      fi
    fi

[manpage]: http://www.lilotux.net/~mikael/mcabber/files/mcabber.1.html