xttitle/xttitle.c
author Mikael Berthe <mikael@lilotux.net>
Mon, 22 Mar 2010 22:24:23 +0100
changeset 14 e28cfd1d3084
permissions -rw-r--r--
Add module xttitle
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
14
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     1
/*
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     2
   Copyright (C) 2010 Mikael Berthe <mikael@lilotux.net>
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     3
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     4
  Module "xttitle"    -- Update xterm tittle
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     5
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     6
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     7
This module is free software: you can redistribute it and/or modify
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     8
it under the terms of the GNU General Public License as published by
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     9
the Free Software Foundation, either version 2 of the License, or
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    10
(at your option) any later version.
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    11
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    12
This program is distributed in the hope that it will be useful,
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    13
but WITHOUT ANY WARRANTY; without even the implied warranty of
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    15
GNU General Public License for more details.
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    16
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    17
You should have received a copy of the GNU General Public License
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    18
along with this program.  If not, see <http://www.gnu.org/licenses/>.
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    19
*/
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    20
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    21
#include <stdlib.h>
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    22
#include <mcabber/modules.h>
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    23
#include <mcabber/settings.h>
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    24
#include <mcabber/hooks.h>
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    25
#include <mcabber/logprint.h>
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    26
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    27
static void xttitle_init(void);
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    28
static void xttitle_uninit(void);
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    29
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    30
/* Module description */
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    31
module_info_t info_xttitle = {
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    32
        .branch         = MCABBER_BRANCH,
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    33
        .api            = MCABBER_API_VERSION,
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    34
        .version        = "0.01",
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    35
        .description    = "Show unread message count in X terminal title",
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    36
        .requires       = NULL,
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    37
        .init           = xttitle_init,
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    38
        .uninit         = xttitle_uninit,
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    39
        .next           = NULL,
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    40
};
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    41
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    42
static guint unread_list_hid;
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    43
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    44
static guint unread_list_hh(const gchar *hookname, hk_arg_t *args,
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    45
                            gpointer userdata)
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    46
{
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    47
  guint all_unread = 0;
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    48
  guint muc_unread = 0;
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    49
  guint muc_attention = 0;
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    50
  guint unread;
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    51
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    52
  for ( ; args->name; args++) {
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    53
    if (!g_strcmp0(args->name, "unread")) {
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    54
      all_unread = atoi(args->value);
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    55
    } else if (!g_strcmp0(args->name, "muc_unread")) {
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    56
      muc_unread = atoi(args->value);
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    57
    } else if (!g_strcmp0(args->name, "muc_attention")) {
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    58
      muc_attention = atoi(args->value);
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    59
    }
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    60
  }
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    61
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    62
  unread = all_unread - (muc_unread - muc_attention);
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    63
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    64
  if (muc_unread)
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    65
    printf("\033]0;MCabber  %d message%c (total:%d / MUC:%d)\007",
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    66
           unread, (unread > 1 ? 's' : ' '), all_unread, muc_unread);
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    67
  else
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    68
    printf("\033]0;MCabber  %d message%c\007", unread,
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    69
           (unread > 1 ? 's' : ' '));
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    70
  return HOOK_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    71
}
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    72
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    73
/* Initialization */
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    74
static void xttitle_init(void)
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    75
{
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    76
  /* Add hook handler for unread message data */
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    77
  unread_list_hid = hk_add_handler(unread_list_hh, HOOK_UNREAD_LIST_CHANGE,
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    78
                                   G_PRIORITY_DEFAULT_IDLE, NULL);
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    79
}
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    80
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    81
/* Uninitialization */
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    82
static void xttitle_uninit(void)
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    83
{
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    84
  /* Unregister handler */
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    85
  hk_del_handler(HOOK_UNREAD_LIST_CHANGE, unread_list_hid);
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    86
}
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    87
e28cfd1d3084 Add module xttitle
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    88
/* vim: set expandtab cindent cinoptions=>2\:2(0:  For Vim users... */