mcabber/src/screen.c
author Mikael Berthe <mikael@lilotux.net>
Tue, 25 Apr 2006 07:13:43 +0200
changeset 824 37ef269330f0
parent 822 0dbb2be10975
child 825 3ecfaa6111e2
permissions -rw-r--r--
Show incomplete subscriptions in the roster When the "from" subscription is missing, curly braces are used. When the "to" subscription is missing, the status is replaced by '?'. Thanks to pmw for the suggestion.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
307
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
     1
/*
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
     2
 * screen.c     -- UI stuff
393
f8f3c7493457 Whitespace cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 389
diff changeset
     3
 *
699
ee03b56b93ee Update Copyright (2006)
Mikael Berthe <mikael@lilotux.net>
parents: 682
diff changeset
     4
 * Copyright (C) 2005, 2006 Mikael Berthe <bmikael@lists.lilotux.net>
307
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
     5
 * Parts of this file come from the Cabber project <cabber@ajmacias.com>
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
     6
 *
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
     7
 * This program is free software; you can redistribute it and/or modify
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
     8
 * it under the terms of the GNU General Public License as published by
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
     9
 * the Free Software Foundation; either version 2 of the License, or (at
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
    10
 * your option) any later version.
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
    11
 *
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
    12
 * This program is distributed in the hope that it will be useful, but
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
    13
 * WITHOUT ANY WARRANTY; without even the implied warranty of
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
    14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
    15
 * General Public License for more details.
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
    16
 *
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
    17
 * You should have received a copy of the GNU General Public License
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
    18
 * along with this program; if not, write to the Free Software
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
    19
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
    20
 * USA
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
    21
 */
566818afee1c Add headers to C files
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
    22
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    23
#include <stdio.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    24
#include <stdlib.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    25
#include <string.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    26
#include <ncurses.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    27
#include <panel.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    28
#include <time.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    29
#include <ctype.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    30
#include <locale.h>
232
9a6ba4b38e63 [/trunk] Changeset 245 by mikael
mikael
parents: 220
diff changeset
    31
#include <langinfo.h>
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    32
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    33
#include "screen.h"
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
    34
#include "hbuf.h"
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents: 44
diff changeset
    35
#include "commands.h"
95
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 84
diff changeset
    36
#include "compl.h"
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
    37
#include "roster.h"
180
42a33611233b [/trunk] Changeset 192 by mikael
mikael
parents: 178
diff changeset
    38
#include "histolog.h"
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 276
diff changeset
    39
#include "settings.h"
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
    40
#include "utils.h"
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    41
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
    42
#define get_color(col)  (COLOR_PAIR(col)|COLOR_ATTRIB[col])
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    43
515
180f0a6e4ac9 Log window's height can be set by the user
Mikael Berthe <mikael@lilotux.net>
parents: 514
diff changeset
    44
#define DEFAULT_LOG_WIN_HEIGHT (5+2)
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
    45
#define DEFAULT_ROSTER_WIDTH    24
515
180f0a6e4ac9 Log window's height can be set by the user
Mikael Berthe <mikael@lilotux.net>
parents: 514
diff changeset
    46
#define CHAT_WIN_HEIGHT (maxY-1-Log_Win_Height)
180f0a6e4ac9 Log window's height can be set by the user
Mikael Berthe <mikael@lilotux.net>
parents: 514
diff changeset
    47
592
67a332121aea Try UTF8 -> locale conversion with fallback
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
    48
char *LocaleCharSet = "C";
67a332121aea Try UTF8 -> locale conversion with fallback
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
    49
515
180f0a6e4ac9 Log window's height can be set by the user
Mikael Berthe <mikael@lilotux.net>
parents: 514
diff changeset
    50
static unsigned short int Log_Win_Height;
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
    51
static unsigned short int Roster_Width;
515
180f0a6e4ac9 Log window's height can be set by the user
Mikael Berthe <mikael@lilotux.net>
parents: 514
diff changeset
    52
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 332
diff changeset
    53
static inline void check_offset(int);
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
    54
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
    55
static GSList *winbuflst;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    56
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
    57
typedef struct {
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    58
  WINDOW *win;
108
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
    59
  PANEL  *panel;
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
    60
  char   *name;
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
    61
  GList  *hbuf;
181
4a0bde661562 [/trunk] Changeset 193 by mikael
mikael
parents: 180
diff changeset
    62
  GList  *top;      // If top is NULL, we'll display the last lines
4a0bde661562 [/trunk] Changeset 193 by mikael
mikael
parents: 180
diff changeset
    63
  char    cleared;  // For ex, user has issued a /clear command...
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
    64
} winbuf;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    65
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    66
711
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
    67
static WINDOW *rosterWnd, *chatWnd, *inputWnd, *logWnd;
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
    68
static WINDOW *mainstatusWnd, *chatstatusWnd;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    69
static PANEL *rosterPanel, *chatPanel, *inputPanel;
711
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
    70
static PANEL *mainstatusPanel, *chatstatusPanel;
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
    71
static PANEL *logPanel;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    72
static int maxY, maxX;
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
    73
static winbuf *currentWindow;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    74
707
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
    75
static int roster_hidden;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    76
static int chatmode;
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
    77
static int multimode;
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
    78
static char *multiline, *multimode_subj;
30
4ea2df449381 [/trunk] Changeset 46 by mikael
mikael
parents: 29
diff changeset
    79
int update_roster;
232
9a6ba4b38e63 [/trunk] Changeset 245 by mikael
mikael
parents: 220
diff changeset
    80
int utf8_mode = 0;
322
da138cdebf04 Implement auto-away mode
Mikael Berthe <mikael@lilotux.net>
parents: 314
diff changeset
    81
static bool Autoaway;
332
a1901741890e scr_LogPrint() can be called before ncurses initialization
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
    82
static bool Curses;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    83
174
6354625e8fb2 [/trunk] Changeset 186 by mikael
mikael
parents: 173
diff changeset
    84
static char       inputLine[INPUTLINE_LENGTH+1];
6354625e8fb2 [/trunk] Changeset 186 by mikael
mikael
parents: 173
diff changeset
    85
static char      *ptr_inputline;
6354625e8fb2 [/trunk] Changeset 186 by mikael
mikael
parents: 173
diff changeset
    86
static short int  inputline_offset;
6354625e8fb2 [/trunk] Changeset 186 by mikael
mikael
parents: 173
diff changeset
    87
static int    completion_started;
173
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
    88
static GList *cmdhisto;
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
    89
static GList *cmdhisto_cur;
174
6354625e8fb2 [/trunk] Changeset 186 by mikael
mikael
parents: 173
diff changeset
    90
static char   cmdhisto_backup[INPUTLINE_LENGTH+1];
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    91
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
    92
#define MAX_KEYSEQ_LENGTH 8
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
    93
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
    94
typedef struct {
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
    95
  char *seqstr;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
    96
  guint mkeycode;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
    97
  gint  value;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
    98
} keyseq;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
    99
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   100
GSList *keyseqlist;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   101
static void add_keyseq(char *seqstr, guint mkeycode, gint value);
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   102
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   103
99
7fffb8a6b229 [/trunk] Changeset 113 by mikael
mikael
parents: 98
diff changeset
   104
/* Functions */
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   105
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 332
diff changeset
   106
static int scr_WindowWidth(WINDOW * win)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   107
{
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   108
  int x, y;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   109
  getmaxyx(win, y, x);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   110
  return x;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   111
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   112
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 332
diff changeset
   113
static int FindColor(const char *name)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   114
{
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   115
  if (!strcmp(name, "default"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   116
    return -1;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   117
  if (!strcmp(name, "black"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   118
    return COLOR_BLACK;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   119
  if (!strcmp(name, "red"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   120
    return COLOR_RED;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   121
  if (!strcmp(name, "green"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   122
    return COLOR_GREEN;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   123
  if (!strcmp(name, "yellow"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   124
    return COLOR_YELLOW;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   125
  if (!strcmp(name, "blue"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   126
    return COLOR_BLUE;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   127
  if (!strcmp(name, "magenta"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   128
    return COLOR_MAGENTA;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   129
  if (!strcmp(name, "cyan"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   130
    return COLOR_CYAN;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   131
  if (!strcmp(name, "white"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   132
    return COLOR_WHITE;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   133
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   134
  scr_LogPrint(LPRINT_LOGNORM, "ERROR: Wrong color: %s", name);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   135
  return -1;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   136
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   137
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 332
diff changeset
   138
static void ParseColors(void)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   139
{
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   140
  const char *colors[] = {
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   141
    "", "",
267
8d3d5bd52da3 Improve color configuration
mikael@frmp8452
parents: 265
diff changeset
   142
    "general",
785
7e0562e3bc83 Replace color_highlight with color_msgout
Mikael Berthe <mikael@lilotux.net>
parents: 779
diff changeset
   143
    "msgout",
711
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
   144
    "status",
712
e1639629c87b Rename color options
Mikael Berthe <mikael@lilotux.net>
parents: 711
diff changeset
   145
    "roster",
e1639629c87b Rename color options
Mikael Berthe <mikael@lilotux.net>
parents: 711
diff changeset
   146
    "rostersel",
723
23068490d063 Add text color when the selected buddy has an unread message
Mikael Berthe <mikael@lilotux.net>
parents: 721
diff changeset
   147
    "rosterselmsg",
712
e1639629c87b Rename color options
Mikael Berthe <mikael@lilotux.net>
parents: 711
diff changeset
   148
    "rosternewmsg",
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   149
    NULL
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   150
  };
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   151
281
f562b9af2de7 Add "const" specifier in prototypes
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   152
  const char *color;
f562b9af2de7 Add "const" specifier in prototypes
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   153
  const char *background   = settings_opt_get("color_background");
712
e1639629c87b Rename color options
Mikael Berthe <mikael@lilotux.net>
parents: 711
diff changeset
   154
  const char *backselected = settings_opt_get("color_bgrostersel");
e1639629c87b Rename color options
Mikael Berthe <mikael@lilotux.net>
parents: 711
diff changeset
   155
  const char *backstatus   = settings_opt_get("color_bgstatus");
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   156
  char *tmp;
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   157
  int i;
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   158
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   159
  // Initialize color attributes
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   160
  memset(COLOR_ATTRIB, 0, sizeof(COLOR_ATTRIB));
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   161
267
8d3d5bd52da3 Improve color configuration
mikael@frmp8452
parents: 265
diff changeset
   162
  // Default values
711
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
   163
  if (!background)   background   = "black";
267
8d3d5bd52da3 Improve color configuration
mikael@frmp8452
parents: 265
diff changeset
   164
  if (!backselected) backselected = "cyan";
711
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
   165
  if (!backstatus)   backstatus   = "blue";
267
8d3d5bd52da3 Improve color configuration
mikael@frmp8452
parents: 265
diff changeset
   166
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   167
  for (i=0; colors[i]; i++) {
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   168
    tmp = g_strdup_printf("color_%s", colors[i]);
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 276
diff changeset
   169
    color = settings_opt_get(tmp);
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   170
    g_free(tmp);
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   171
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   172
    if (color) {
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   173
      if (!strncmp(color, "bright", 6)) {
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   174
        COLOR_ATTRIB[i+1] = A_BOLD;
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   175
        color += 6;
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   176
      }
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   177
    }
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   178
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   179
    switch (i + 1) {
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   180
      case 1:
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   181
          init_pair(1, COLOR_BLACK, COLOR_WHITE);
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   182
          break;
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   183
      case 2:
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   184
          init_pair(2, COLOR_WHITE, COLOR_BLACK);
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   185
          break;
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   186
      case COLOR_GENERAL:
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   187
          init_pair(i+1, ((color) ? FindColor(color) : COLOR_WHITE),
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   188
                    FindColor(background));
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   189
          break;
785
7e0562e3bc83 Replace color_highlight with color_msgout
Mikael Berthe <mikael@lilotux.net>
parents: 779
diff changeset
   190
      case COLOR_MSGOUT:
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   191
          init_pair(i+1, ((color) ? FindColor(color) : COLOR_CYAN),
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   192
                    FindColor(background));
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   193
          break;
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   194
      case COLOR_STATUS:
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   195
          init_pair(i+1, ((color) ? FindColor(color) : COLOR_WHITE),
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   196
                    FindColor(backstatus));
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   197
          break;
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   198
      case COLOR_ROSTER:
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   199
          init_pair(i+1, ((color) ? FindColor(color) : COLOR_GREEN),
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   200
                    FindColor(background));
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   201
          break;
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   202
      case COLOR_ROSTERSEL:
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   203
          init_pair(i+1, ((color) ? FindColor(color) : COLOR_BLUE),
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   204
                    FindColor(backselected));
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   205
          break;
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   206
      case COLOR_ROSTERSELNMSG:
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   207
          init_pair(i+1, ((color) ? FindColor(color) : COLOR_RED),
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   208
                    FindColor(backselected));
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   209
          break;
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   210
      case COLOR_ROSTERNMSG:
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   211
          init_pair(i+1, ((color) ? FindColor(color) : COLOR_RED),
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   212
                    FindColor(background));
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   213
          break;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   214
    }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   215
  }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   216
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   217
765
72626e9d60bd Create init_keycodes(), add 2 screen escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 764
diff changeset
   218
static void init_keycodes(void)
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   219
{
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   220
  add_keyseq("O5A", MKEY_EQUIV, 521); // Ctrl-Up
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   221
  add_keyseq("O5B", MKEY_EQUIV, 514); // Ctrl-Down
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   222
  add_keyseq("O5C", MKEY_EQUIV, 518); // Ctrl-Right
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   223
  add_keyseq("O5D", MKEY_EQUIV, 516); // Ctrl-Left
763
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   224
  add_keyseq("O6A", MKEY_EQUIV, 520); // Shift-Up
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   225
  add_keyseq("O6B", MKEY_EQUIV, 513); // Shift-Down
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   226
  add_keyseq("O6C", MKEY_EQUIV, 402); // Shift-Right
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   227
  add_keyseq("O6D", MKEY_EQUIV, 393); // Shift-Left
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   228
  add_keyseq("O2A", MKEY_EQUIV, 520); // Shift-Up
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   229
  add_keyseq("O2B", MKEY_EQUIV, 513); // Shift-Down
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   230
  add_keyseq("O2C", MKEY_EQUIV, 402); // Shift-Right
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   231
  add_keyseq("O2D", MKEY_EQUIV, 393); // Shift-Left
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   232
  add_keyseq("[5^", MKEY_CTRL_PGUP, 0);   // Ctrl-PageUp
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   233
  add_keyseq("[6^", MKEY_CTRL_PGDOWN, 0); // Ctrl-PageDown
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   234
  add_keyseq("[5@", MKEY_CTRL_SHIFT_PGUP, 0);   // Ctrl-Shift-PageUp
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   235
  add_keyseq("[6@", MKEY_CTRL_SHIFT_PGDOWN, 0); // Ctrl-Shift-PageDown
794
32d5298f9f8d Add a few keycode sequences
Mikael Berthe <mikael@lilotux.net>
parents: 790
diff changeset
   236
  add_keyseq("[8^", MKEY_CTRL_END, 0);  // Ctrl-End
32d5298f9f8d Add a few keycode sequences
Mikael Berthe <mikael@lilotux.net>
parents: 790
diff changeset
   237
  add_keyseq("[7^", MKEY_CTRL_HOME, 0); // Ctrl-Home
32d5298f9f8d Add a few keycode sequences
Mikael Berthe <mikael@lilotux.net>
parents: 790
diff changeset
   238
  add_keyseq("[2^", MKEY_CTRL_INS, 0);  // Ctrl-Insert
32d5298f9f8d Add a few keycode sequences
Mikael Berthe <mikael@lilotux.net>
parents: 790
diff changeset
   239
  add_keyseq("[3^", MKEY_CTRL_DEL, 0);  // Ctrl-Delete
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   240
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   241
  // Xterm
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   242
  add_keyseq("[1;5A", MKEY_EQUIV, 521); // Ctrl-Up
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   243
  add_keyseq("[1;5B", MKEY_EQUIV, 514); // Ctrl-Down
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   244
  add_keyseq("[1;5C", MKEY_EQUIV, 518); // Ctrl-Right
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   245
  add_keyseq("[1;5D", MKEY_EQUIV, 516); // Ctrl-Left
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   246
  add_keyseq("[1;6A", MKEY_EQUIV, 520); // Ctrl-Shift-Up
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   247
  add_keyseq("[1;6B", MKEY_EQUIV, 513); // Ctrl-Shift-Down
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   248
  add_keyseq("[1;6C", MKEY_EQUIV, 402); // Ctrl-Shift-Right
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   249
  add_keyseq("[1;6D", MKEY_EQUIV, 393); // Ctrl-Shift-Left
763
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   250
  add_keyseq("[1;2A", MKEY_EQUIV, 521); // Shift-Up
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   251
  add_keyseq("[1;2B", MKEY_EQUIV, 514); // Shift-Down
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   252
  add_keyseq("[5;5~", MKEY_CTRL_PGUP, 0);   // Ctrl-PageUp
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   253
  add_keyseq("[6;5~", MKEY_CTRL_PGDOWN, 0); // Ctrl-PageDown
794
32d5298f9f8d Add a few keycode sequences
Mikael Berthe <mikael@lilotux.net>
parents: 790
diff changeset
   254
  add_keyseq("[1;5F", MKEY_CTRL_END, 0);  // Ctrl-End
32d5298f9f8d Add a few keycode sequences
Mikael Berthe <mikael@lilotux.net>
parents: 790
diff changeset
   255
  add_keyseq("[1;5H", MKEY_CTRL_HOME, 0); // Ctrl-Home
32d5298f9f8d Add a few keycode sequences
Mikael Berthe <mikael@lilotux.net>
parents: 790
diff changeset
   256
  add_keyseq("[2;5~", MKEY_CTRL_INS, 0);  // Ctrl-Insert
32d5298f9f8d Add a few keycode sequences
Mikael Berthe <mikael@lilotux.net>
parents: 790
diff changeset
   257
  add_keyseq("[3;5~", MKEY_CTRL_DEL, 0);  // Ctrl-Delete
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   258
768
0f6d25a02450 Add PuTTY escape keys for Ctrl-arrows
Mikael Berthe <mikael@lilotux.net>
parents: 766
diff changeset
   259
  // PuTTY
0f6d25a02450 Add PuTTY escape keys for Ctrl-arrows
Mikael Berthe <mikael@lilotux.net>
parents: 766
diff changeset
   260
  add_keyseq("[A", MKEY_EQUIV, 521); // Ctrl-Up
0f6d25a02450 Add PuTTY escape keys for Ctrl-arrows
Mikael Berthe <mikael@lilotux.net>
parents: 766
diff changeset
   261
  add_keyseq("[B", MKEY_EQUIV, 514); // Ctrl-Down
0f6d25a02450 Add PuTTY escape keys for Ctrl-arrows
Mikael Berthe <mikael@lilotux.net>
parents: 766
diff changeset
   262
  add_keyseq("[C", MKEY_EQUIV, 518); // Ctrl-Right
0f6d25a02450 Add PuTTY escape keys for Ctrl-arrows
Mikael Berthe <mikael@lilotux.net>
parents: 766
diff changeset
   263
  add_keyseq("[D", MKEY_EQUIV, 516); // Ctrl-Left
0f6d25a02450 Add PuTTY escape keys for Ctrl-arrows
Mikael Berthe <mikael@lilotux.net>
parents: 766
diff changeset
   264
762
96d46e00524a Add some key escape sequences for screen
Mikael Berthe <mikael@lilotux.net>
parents: 761
diff changeset
   265
  // screen
96d46e00524a Add some key escape sequences for screen
Mikael Berthe <mikael@lilotux.net>
parents: 761
diff changeset
   266
  add_keyseq("Oa", MKEY_EQUIV, 521); // Ctrl-Up
96d46e00524a Add some key escape sequences for screen
Mikael Berthe <mikael@lilotux.net>
parents: 761
diff changeset
   267
  add_keyseq("Ob", MKEY_EQUIV, 514); // Ctrl-Down
96d46e00524a Add some key escape sequences for screen
Mikael Berthe <mikael@lilotux.net>
parents: 761
diff changeset
   268
  add_keyseq("Oc", MKEY_EQUIV, 518); // Ctrl-Right
96d46e00524a Add some key escape sequences for screen
Mikael Berthe <mikael@lilotux.net>
parents: 761
diff changeset
   269
  add_keyseq("Od", MKEY_EQUIV, 516); // Ctrl-Left
763
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   270
  add_keyseq("[a", MKEY_EQUIV, 520); // Shift-Up
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   271
  add_keyseq("[b", MKEY_EQUIV, 513); // Shift-Down
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   272
  add_keyseq("[c", MKEY_EQUIV, 402); // Shift-Right
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   273
  add_keyseq("[d", MKEY_EQUIV, 393); // Shift-Left
765
72626e9d60bd Create init_keycodes(), add 2 screen escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 764
diff changeset
   274
  add_keyseq("[5$", MKEY_SHIFT_PGUP, 0);   // Shift-PageUp
72626e9d60bd Create init_keycodes(), add 2 screen escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 764
diff changeset
   275
  add_keyseq("[6$", MKEY_SHIFT_PGDOWN, 0); // Shift-PageDown
72626e9d60bd Create init_keycodes(), add 2 screen escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 764
diff changeset
   276
}
72626e9d60bd Create init_keycodes(), add 2 screen escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 764
diff changeset
   277
779
057ffe7c43dc Initialize locale charset earlier
Mikael Berthe <mikael@lilotux.net>
parents: 773
diff changeset
   278
void scr_InitLocaleCharSet(void)
057ffe7c43dc Initialize locale charset earlier
Mikael Berthe <mikael@lilotux.net>
parents: 773
diff changeset
   279
{
057ffe7c43dc Initialize locale charset earlier
Mikael Berthe <mikael@lilotux.net>
parents: 773
diff changeset
   280
  setlocale(LC_CTYPE, "");
057ffe7c43dc Initialize locale charset earlier
Mikael Berthe <mikael@lilotux.net>
parents: 773
diff changeset
   281
  LocaleCharSet = nl_langinfo(CODESET);
057ffe7c43dc Initialize locale charset earlier
Mikael Berthe <mikael@lilotux.net>
parents: 773
diff changeset
   282
  utf8_mode = (strcmp(LocaleCharSet, "UTF-8") == 0);
057ffe7c43dc Initialize locale charset earlier
Mikael Berthe <mikael@lilotux.net>
parents: 773
diff changeset
   283
}
057ffe7c43dc Initialize locale charset earlier
Mikael Berthe <mikael@lilotux.net>
parents: 773
diff changeset
   284
765
72626e9d60bd Create init_keycodes(), add 2 screen escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 764
diff changeset
   285
void scr_InitCurses(void)
72626e9d60bd Create init_keycodes(), add 2 screen escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 764
diff changeset
   286
{
72626e9d60bd Create init_keycodes(), add 2 screen escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 764
diff changeset
   287
  /* Key sequences initialization */
72626e9d60bd Create init_keycodes(), add 2 screen escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 764
diff changeset
   288
  init_keycodes();
762
96d46e00524a Add some key escape sequences for screen
Mikael Berthe <mikael@lilotux.net>
parents: 761
diff changeset
   289
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   290
  initscr();
382
4c6e8392e465 Use nodelay() instead of halfdelay()
Mikael Berthe <mikael@lilotux.net>
parents: 374
diff changeset
   291
  raw();
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   292
  noecho();
389
6e895f397474 Ncurses changes + Ctrl-C does not send a signal anylore
Mikael Berthe <mikael@lilotux.net>
parents: 388
diff changeset
   293
  nonl();
6e895f397474 Ncurses changes + Ctrl-C does not send a signal anylore
Mikael Berthe <mikael@lilotux.net>
parents: 388
diff changeset
   294
  intrflush(stdscr, FALSE);
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   295
  start_color();
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   296
  use_default_colors();
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   297
  Curses = TRUE;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   298
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   299
  ParseColors();
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   300
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   301
  getmaxyx(stdscr, maxY, maxX);
515
180f0a6e4ac9 Log window's height can be set by the user
Mikael Berthe <mikael@lilotux.net>
parents: 514
diff changeset
   302
  Log_Win_Height = DEFAULT_LOG_WIN_HEIGHT;
518
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
   303
  // Note scr_DrawMainWindow() should be called early after scr_InitCurses()
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
   304
  // to update Log_Win_Height and set max{X,Y}
515
180f0a6e4ac9 Log window's height can be set by the user
Mikael Berthe <mikael@lilotux.net>
parents: 514
diff changeset
   305
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   306
  inputLine[0] = 0;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   307
  ptr_inputline = inputLine;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   308
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   309
  return;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   310
}
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   311
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   312
void scr_TerminateCurses(void)
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   313
{
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   314
  if (!Curses) return;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   315
  clear();
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   316
  refresh();
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   317
  endwin();
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   318
  Curses = FALSE;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   319
  return;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   320
}
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   321
675
ae7016aae014 New "beep_on_message" option
Mikael Berthe <mikael@lilotux.net>
parents: 667
diff changeset
   322
inline void scr_Beep(void)
ae7016aae014 New "beep_on_message" option
Mikael Berthe <mikael@lilotux.net>
parents: 667
diff changeset
   323
{
ae7016aae014 New "beep_on_message" option
Mikael Berthe <mikael@lilotux.net>
parents: 667
diff changeset
   324
  beep();
ae7016aae014 New "beep_on_message" option
Mikael Berthe <mikael@lilotux.net>
parents: 667
diff changeset
   325
}
ae7016aae014 New "beep_on_message" option
Mikael Berthe <mikael@lilotux.net>
parents: 667
diff changeset
   326
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   327
//  scr_LogPrint(...)
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   328
// Display a message in the log window.
771
ce4f8a2129a4 scr_LogPrint() can display UTF-8 strings
Mikael Berthe <mikael@lilotux.net>
parents: 770
diff changeset
   329
// This function will convert from UTF-8 unless the LPRINT_NOTUTF8 flag is set.
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
   330
void scr_LogPrint(unsigned int flag, const char *fmt, ...)
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   331
{
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   332
  time_t timestamp;
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
   333
  char *buffer, *b2;
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   334
  va_list ap;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   335
771
ce4f8a2129a4 scr_LogPrint() can display UTF-8 strings
Mikael Berthe <mikael@lilotux.net>
parents: 770
diff changeset
   336
  if (!(flag & ~LPRINT_NOTUTF8)) return; // Shouldn't happen
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
   337
602
7b20c27cae48 Increase scr_LogPrint() buffer size
Mikael Berthe <mikael@lilotux.net>
parents: 592
diff changeset
   338
  buffer = g_new(char, 5184);
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   339
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   340
  timestamp = time(NULL);
602
7b20c27cae48 Increase scr_LogPrint() buffer size
Mikael Berthe <mikael@lilotux.net>
parents: 592
diff changeset
   341
  strftime(buffer, 48, "[%H:%M:%S] ", localtime(&timestamp));
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
   342
  for (b2 = buffer ; *b2 ; b2++)
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
   343
    ;
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   344
  va_start(ap, fmt);
602
7b20c27cae48 Increase scr_LogPrint() buffer size
Mikael Berthe <mikael@lilotux.net>
parents: 592
diff changeset
   345
  vsnprintf(b2, 5120, fmt, ap);
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   346
  va_end(ap);
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   347
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
   348
  if (flag & LPRINT_NORMAL) {
771
ce4f8a2129a4 scr_LogPrint() can display UTF-8 strings
Mikael Berthe <mikael@lilotux.net>
parents: 770
diff changeset
   349
    char *buffer_locale;
ce4f8a2129a4 scr_LogPrint() can display UTF-8 strings
Mikael Berthe <mikael@lilotux.net>
parents: 770
diff changeset
   350
    if (!(flag & LPRINT_NOTUTF8))
ce4f8a2129a4 scr_LogPrint() can display UTF-8 strings
Mikael Berthe <mikael@lilotux.net>
parents: 770
diff changeset
   351
      buffer_locale = from_utf8(buffer);
ce4f8a2129a4 scr_LogPrint() can display UTF-8 strings
Mikael Berthe <mikael@lilotux.net>
parents: 770
diff changeset
   352
    else
ce4f8a2129a4 scr_LogPrint() can display UTF-8 strings
Mikael Berthe <mikael@lilotux.net>
parents: 770
diff changeset
   353
      buffer_locale = buffer;
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
   354
    if (Curses) {
771
ce4f8a2129a4 scr_LogPrint() can display UTF-8 strings
Mikael Berthe <mikael@lilotux.net>
parents: 770
diff changeset
   355
      wprintw(logWnd, "\n%s", buffer_locale);
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
   356
      update_panels();
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
   357
      doupdate();
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
   358
    } else {
771
ce4f8a2129a4 scr_LogPrint() can display UTF-8 strings
Mikael Berthe <mikael@lilotux.net>
parents: 770
diff changeset
   359
      printf("%s\n", buffer_locale);
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
   360
    }
771
ce4f8a2129a4 scr_LogPrint() can display UTF-8 strings
Mikael Berthe <mikael@lilotux.net>
parents: 770
diff changeset
   361
    if (!(flag & LPRINT_NOTUTF8))
ce4f8a2129a4 scr_LogPrint() can display UTF-8 strings
Mikael Berthe <mikael@lilotux.net>
parents: 770
diff changeset
   362
      g_free(buffer_locale);
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
   363
  }
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
   364
  if (flag & (LPRINT_LOG|LPRINT_DEBUG)) {
658
5d71d1f8887e Avoid g_try_new()
Mikael Berthe <mikael@lilotux.net>
parents: 657
diff changeset
   365
    char *buffer2 = g_new(char, 5184);
412
9c640ee3bae3 Display full date in the log file
Mikael Berthe <mikael@lilotux.net>
parents: 393
diff changeset
   366
658
5d71d1f8887e Avoid g_try_new()
Mikael Berthe <mikael@lilotux.net>
parents: 657
diff changeset
   367
    strftime(buffer2, 23, "[%Y-%m-%d %H:%M:%S] ", localtime(&timestamp));
5d71d1f8887e Avoid g_try_new()
Mikael Berthe <mikael@lilotux.net>
parents: 657
diff changeset
   368
    strcat(buffer2, b2);
412
9c640ee3bae3 Display full date in the log file
Mikael Berthe <mikael@lilotux.net>
parents: 393
diff changeset
   369
    strcat(buffer2, "\n");
9c640ee3bae3 Display full date in the log file
Mikael Berthe <mikael@lilotux.net>
parents: 393
diff changeset
   370
    ut_WriteLog(flag, buffer2);
658
5d71d1f8887e Avoid g_try_new()
Mikael Berthe <mikael@lilotux.net>
parents: 657
diff changeset
   371
    g_free(buffer2);
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   372
  }
602
7b20c27cae48 Increase scr_LogPrint() buffer size
Mikael Berthe <mikael@lilotux.net>
parents: 592
diff changeset
   373
  g_free(buffer);
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   374
}
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   375
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   376
static winbuf *scr_CreateBuddyPanel(const char *title, int dont_show)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   377
{
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   378
  int x;
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   379
  int y;
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   380
  int lines;
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   381
  int cols;
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   382
  winbuf *tmp;
393
f8f3c7493457 Whitespace cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 389
diff changeset
   383
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   384
  tmp = g_new0(winbuf, 1);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   385
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   386
  // Dimensions
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   387
  x = Roster_Width;
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   388
  y = 0;
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   389
  lines = CHAT_WIN_HEIGHT;
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   390
  cols = maxX - Roster_Width;
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   391
  if (cols < 1) cols = 1;
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   392
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   393
  tmp->win = newwin(lines, cols, y, x);
154
8630b7cae87b [/trunk] Changeset 166 by mikael
mikael
parents: 153
diff changeset
   394
  while (!tmp->win) {
419
2f9852610cf4 Small code review
Mikael Berthe <mikael@lilotux.net>
parents: 412
diff changeset
   395
    safe_usleep(250);
154
8630b7cae87b [/trunk] Changeset 166 by mikael
mikael
parents: 153
diff changeset
   396
    tmp->win = newwin(lines, cols, y, x);
8630b7cae87b [/trunk] Changeset 166 by mikael
mikael
parents: 153
diff changeset
   397
  }
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   398
  wbkgd(tmp->win, get_color(COLOR_GENERAL));
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   399
  tmp->panel = new_panel(tmp->win);
657
056dc9e65c25 Some memory allocation code cleaning
Mikael Berthe <mikael@lilotux.net>
parents: 654
diff changeset
   400
  tmp->name = g_strdup(title);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   401
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
   402
  if (!dont_show) {
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   403
    currentWindow = tmp;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   404
  } else {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   405
    if (currentWindow)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   406
      top_panel(currentWindow->panel);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   407
    else
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   408
      top_panel(chatPanel);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   409
  }
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
   410
  update_panels();
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   411
181
4a0bde661562 [/trunk] Changeset 193 by mikael
mikael
parents: 180
diff changeset
   412
  // Load buddy history from file (if enabled)
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   413
  hlog_read_history(title, &tmp->hbuf, maxX - Roster_Width - PREFIX_WIDTH);
181
4a0bde661562 [/trunk] Changeset 193 by mikael
mikael
parents: 180
diff changeset
   414
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   415
  winbuflst = g_slist_append(winbuflst, tmp);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   416
  return tmp;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   417
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   418
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   419
static winbuf *scr_SearchWindow(const char *winId)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   420
{
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   421
  GSList *wblp;
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   422
  winbuf *wbp;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   423
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
   424
  if (!winId) return NULL;
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
   425
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   426
  for (wblp = winbuflst; wblp; wblp = g_slist_next(wblp)) {
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   427
    wbp = wblp->data;
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   428
    if (wbp->name) {
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   429
      if (!strcasecmp(wbp->name, winId))
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   430
	return wbp;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   431
    }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   432
  }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   433
  return NULL;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   434
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   435
514
979eb0fe2969 Show status changes in buddy window, if it is open
Mikael Berthe <mikael@lilotux.net>
parents: 513
diff changeset
   436
bool scr_BuddyBufferExists(const char *jid)
979eb0fe2969 Show status changes in buddy window, if it is open
Mikael Berthe <mikael@lilotux.net>
parents: 513
diff changeset
   437
{
979eb0fe2969 Show status changes in buddy window, if it is open
Mikael Berthe <mikael@lilotux.net>
parents: 513
diff changeset
   438
  return (scr_SearchWindow(jid) != NULL);
979eb0fe2969 Show status changes in buddy window, if it is open
Mikael Berthe <mikael@lilotux.net>
parents: 513
diff changeset
   439
}
979eb0fe2969 Show status changes in buddy window, if it is open
Mikael Berthe <mikael@lilotux.net>
parents: 513
diff changeset
   440
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
   441
//  scr_UpdateWindow()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
   442
// (Re-)Display the given chat window.
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   443
static void scr_UpdateWindow(winbuf *win_entry)
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   444
{
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   445
  int n;
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   446
  int width;
184
b5aa2b9c425a [/trunk] Changeset 196 by mikael
mikael
parents: 181
diff changeset
   447
  hbb_line **lines, *line;
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   448
  GList *hbuf_head;
184
b5aa2b9c425a [/trunk] Changeset 196 by mikael
mikael
parents: 181
diff changeset
   449
  char date[32];
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   450
108
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
   451
  width = scr_WindowWidth(win_entry->win);
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
   452
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
   453
  // Should the window be empty?
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
   454
  if (win_entry->cleared) {
168
6ad156673b19 [/trunk] Changeset 180 by mikael
mikael
parents: 167
diff changeset
   455
    werase(win_entry->win);
108
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
   456
    return;
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
   457
  }
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
   458
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
   459
  // win_entry->top is the top message of the screen.  If it set to NULL, we
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
   460
  // are displaying the last messages.
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
   461
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   462
  // We will show the last CHAT_WIN_HEIGHT lines.
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   463
  // Let's find out where it begins.
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
   464
  if (!win_entry->top ||
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
   465
      (g_list_position(g_list_first(win_entry->hbuf), win_entry->top) == -1)) {
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
   466
    // Move up CHAT_WIN_HEIGHT lines
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
   467
    win_entry->hbuf = g_list_last(win_entry->hbuf);
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
   468
    hbuf_head = win_entry->hbuf;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
   469
    win_entry->top = NULL; // (Just to make sure)
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
   470
    n = 0;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
   471
    while (hbuf_head && (n < CHAT_WIN_HEIGHT-1) && g_list_previous(hbuf_head)) {
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
   472
      hbuf_head = g_list_previous(hbuf_head);
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
   473
      n++;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
   474
    }
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
   475
  } else
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
   476
    hbuf_head = win_entry->top;
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   477
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   478
  // Get the last CHAT_WIN_HEIGHT lines.
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   479
  lines = hbuf_get_lines(hbuf_head, CHAT_WIN_HEIGHT);
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   480
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   481
  // Display these lines
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   482
  for (n = 0; n < CHAT_WIN_HEIGHT; n++) {
168
6ad156673b19 [/trunk] Changeset 180 by mikael
mikael
parents: 167
diff changeset
   483
    wmove(win_entry->win, n, 0);
184
b5aa2b9c425a [/trunk] Changeset 196 by mikael
mikael
parents: 181
diff changeset
   484
    line = *(lines+n);
185
e8e447a07641 [/trunk] Changeset 197 by mikael
mikael
parents: 184
diff changeset
   485
    // NOTE: update PREFIX_WIDTH if you change the date format!!
e8e447a07641 [/trunk] Changeset 197 by mikael
mikael
parents: 184
diff changeset
   486
    // You need to set it to the whole prefix length + 1
184
b5aa2b9c425a [/trunk] Changeset 196 by mikael
mikael
parents: 181
diff changeset
   487
    if (line) {
730
e46c680bdd3d New color: color_highlight (for outgoing messages)
Mikael Berthe <mikael@lilotux.net>
parents: 729
diff changeset
   488
      if (line->flags & HBB_PREFIX_HLIGHT)
785
7e0562e3bc83 Replace color_highlight with color_msgout
Mikael Berthe <mikael@lilotux.net>
parents: 779
diff changeset
   489
        wattrset(win_entry->win, get_color(COLOR_MSGOUT));
730
e46c680bdd3d New color: color_highlight (for outgoing messages)
Mikael Berthe <mikael@lilotux.net>
parents: 729
diff changeset
   490
184
b5aa2b9c425a [/trunk] Changeset 196 by mikael
mikael
parents: 181
diff changeset
   491
      if (line->timestamp) {
419
2f9852610cf4 Small code review
Mikael Berthe <mikael@lilotux.net>
parents: 412
diff changeset
   492
        strftime(date, 30, "%m-%d %H:%M", localtime(&line->timestamp));
184
b5aa2b9c425a [/trunk] Changeset 196 by mikael
mikael
parents: 181
diff changeset
   493
      } else
185
e8e447a07641 [/trunk] Changeset 197 by mikael
mikael
parents: 184
diff changeset
   494
        strcpy(date, "           ");
197
c289e3c39c48 [/trunk] Changeset 209 by mikael
mikael
parents: 196
diff changeset
   495
      if (line->flags & HBB_PREFIX_INFO) {
c289e3c39c48 [/trunk] Changeset 209 by mikael
mikael
parents: 196
diff changeset
   496
        char dir = '*';
c289e3c39c48 [/trunk] Changeset 209 by mikael
mikael
parents: 196
diff changeset
   497
        if (line->flags & HBB_PREFIX_IN)
c289e3c39c48 [/trunk] Changeset 209 by mikael
mikael
parents: 196
diff changeset
   498
          dir = '<';
c289e3c39c48 [/trunk] Changeset 209 by mikael
mikael
parents: 196
diff changeset
   499
        else if (line->flags & HBB_PREFIX_OUT)
c289e3c39c48 [/trunk] Changeset 209 by mikael
mikael
parents: 196
diff changeset
   500
          dir = '>';
c289e3c39c48 [/trunk] Changeset 209 by mikael
mikael
parents: 196
diff changeset
   501
        wprintw(win_entry->win, "%.11s *%c* ", date, dir);
325
ff6fb51bfd78 Handle "error" message type
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
   502
      } else if (line->flags & HBB_PREFIX_ERR) {
ff6fb51bfd78 Handle "error" message type
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
   503
        char dir = '#';
ff6fb51bfd78 Handle "error" message type
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
   504
        if (line->flags & HBB_PREFIX_IN)
ff6fb51bfd78 Handle "error" message type
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
   505
          dir = '<';
ff6fb51bfd78 Handle "error" message type
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
   506
        else if (line->flags & HBB_PREFIX_OUT)
ff6fb51bfd78 Handle "error" message type
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
   507
          dir = '>';
ff6fb51bfd78 Handle "error" message type
Mikael Berthe <mikael@lilotux.net>
parents: 322
diff changeset
   508
        wprintw(win_entry->win, "%.11s #%c# ", date, dir);
728
421b337dc6d2 Chat window: Highlight the flag in our messages
Mikael Berthe <mikael@lilotux.net>
parents: 727
diff changeset
   509
      } else if (line->flags & HBB_PREFIX_IN) {
729
39f67cade02c Use bold font for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 728
diff changeset
   510
        wprintw(win_entry->win, "%.11s <== ", date);
728
421b337dc6d2 Chat window: Highlight the flag in our messages
Mikael Berthe <mikael@lilotux.net>
parents: 727
diff changeset
   511
      } else if (line->flags & HBB_PREFIX_OUT) {
729
39f67cade02c Use bold font for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 728
diff changeset
   512
        wprintw(win_entry->win, "%.11s --> ", date);
728
421b337dc6d2 Chat window: Highlight the flag in our messages
Mikael Berthe <mikael@lilotux.net>
parents: 727
diff changeset
   513
      } else {
185
e8e447a07641 [/trunk] Changeset 197 by mikael
mikael
parents: 184
diff changeset
   514
        wprintw(win_entry->win, "%.11s     ", date);
75
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
   515
      }
729
39f67cade02c Use bold font for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 728
diff changeset
   516
730
e46c680bdd3d New color: color_highlight (for outgoing messages)
Mikael Berthe <mikael@lilotux.net>
parents: 729
diff changeset
   517
      wprintw(win_entry->win, "%s", line->text); // Display text line
729
39f67cade02c Use bold font for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 728
diff changeset
   518
730
e46c680bdd3d New color: color_highlight (for outgoing messages)
Mikael Berthe <mikael@lilotux.net>
parents: 729
diff changeset
   519
      if (line->flags & HBB_PREFIX_HLIGHT)
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   520
        wattrset(win_entry->win, get_color(COLOR_GENERAL));
168
6ad156673b19 [/trunk] Changeset 180 by mikael
mikael
parents: 167
diff changeset
   521
      wclrtoeol(win_entry->win);
184
b5aa2b9c425a [/trunk] Changeset 196 by mikael
mikael
parents: 181
diff changeset
   522
      g_free(line->text);
168
6ad156673b19 [/trunk] Changeset 180 by mikael
mikael
parents: 167
diff changeset
   523
    } else {
6ad156673b19 [/trunk] Changeset 180 by mikael
mikael
parents: 167
diff changeset
   524
      wclrtobot(win_entry->win);
6ad156673b19 [/trunk] Changeset 180 by mikael
mikael
parents: 167
diff changeset
   525
      break;
75
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
   526
    }
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   527
  }
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   528
  g_free(lines);
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   529
}
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   530
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
   531
//  scr_ShowWindow()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
   532
// Display the chat window with the given identifier.
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 332
diff changeset
   533
static void scr_ShowWindow(const char *winId)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   534
{
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   535
  winbuf *win_entry = scr_SearchWindow(winId);
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   536
181
4a0bde661562 [/trunk] Changeset 193 by mikael
mikael
parents: 180
diff changeset
   537
  if (!win_entry)
180
42a33611233b [/trunk] Changeset 192 by mikael
mikael
parents: 178
diff changeset
   538
    win_entry = scr_CreateBuddyPanel(winId, FALSE);
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   539
180
42a33611233b [/trunk] Changeset 192 by mikael
mikael
parents: 178
diff changeset
   540
  top_panel(win_entry->panel);
42a33611233b [/trunk] Changeset 192 by mikael
mikael
parents: 178
diff changeset
   541
  currentWindow = win_entry;
42a33611233b [/trunk] Changeset 192 by mikael
mikael
parents: 178
diff changeset
   542
  chatmode = TRUE;
42a33611233b [/trunk] Changeset 192 by mikael
mikael
parents: 178
diff changeset
   543
  roster_msg_setflag(winId, FALSE);
42a33611233b [/trunk] Changeset 192 by mikael
mikael
parents: 178
diff changeset
   544
  roster_setflags(winId, ROSTER_FLAG_LOCK, TRUE);
42a33611233b [/trunk] Changeset 192 by mikael
mikael
parents: 178
diff changeset
   545
  update_roster = TRUE;
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   546
180
42a33611233b [/trunk] Changeset 192 by mikael
mikael
parents: 178
diff changeset
   547
  // Refresh the window
42a33611233b [/trunk] Changeset 192 by mikael
mikael
parents: 178
diff changeset
   548
  scr_UpdateWindow(win_entry);
42a33611233b [/trunk] Changeset 192 by mikael
mikael
parents: 178
diff changeset
   549
42a33611233b [/trunk] Changeset 192 by mikael
mikael
parents: 178
diff changeset
   550
  // Finished :)
42a33611233b [/trunk] Changeset 192 by mikael
mikael
parents: 178
diff changeset
   551
  update_panels();
142
bb6fe91589b9 [/trunk] Changeset 154 by mikael
mikael
parents: 140
diff changeset
   552
bb6fe91589b9 [/trunk] Changeset 154 by mikael
mikael
parents: 140
diff changeset
   553
  top_panel(inputPanel);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   554
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   555
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
   556
//  scr_ShowBuddyWindow()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
   557
// Display the chat window buffer for the current buddy.
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   558
void scr_ShowBuddyWindow(void)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   559
{
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
   560
  const gchar *jid;
140
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
   561
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
   562
  if (!current_buddy)
140
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
   563
    jid = NULL;
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
   564
  else
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
   565
    jid = CURRENT_JID;
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
   566
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
   567
  if (!jid) {
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
   568
    top_panel(chatPanel);
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
   569
    top_panel(inputPanel);
140
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
   570
    currentWindow = NULL;
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
   571
    return;
140
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
   572
  }
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
   573
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
   574
  scr_ShowWindow(jid);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   575
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   576
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
   577
//  scr_WriteInWindow()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
   578
// Write some text in the winId window (this usually is a jid).
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
   579
// Lines are splitted when they are too long to fit in the chat window.
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
   580
// If this window doesn't exist, it is created.
184
b5aa2b9c425a [/trunk] Changeset 196 by mikael
mikael
parents: 181
diff changeset
   581
void scr_WriteInWindow(const char *winId, const char *text, time_t timestamp,
b5aa2b9c425a [/trunk] Changeset 196 by mikael
mikael
parents: 181
diff changeset
   582
        unsigned int prefix_flags, int force_show)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   583
{
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   584
  winbuf *win_entry;
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 771
diff changeset
   585
  char *text_locale;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   586
  int dont_show = FALSE;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   587
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   588
  // Look for the window entry.
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   589
  win_entry = scr_SearchWindow(winId);
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   590
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   591
  // Do we have to really show the window?
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   592
  if (!chatmode)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   593
    dont_show = TRUE;
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   594
  else if ((!force_show) && ((!currentWindow || (currentWindow != win_entry))))
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   595
    dont_show = TRUE;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   596
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   597
  // If the window entry doesn't exist yet, let's create it.
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   598
  if (win_entry == NULL) {
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   599
    win_entry = scr_CreateBuddyPanel(winId, dont_show);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   600
  }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   601
220
8dfdc6f1778e [/trunk] Changeset 232 by mikael
mikael
parents: 197
diff changeset
   602
  // The message must be displayed -> update top pointer
8dfdc6f1778e [/trunk] Changeset 232 by mikael
mikael
parents: 197
diff changeset
   603
  if (win_entry->cleared)
8dfdc6f1778e [/trunk] Changeset 232 by mikael
mikael
parents: 197
diff changeset
   604
    win_entry->top = g_list_last(win_entry->hbuf);
8dfdc6f1778e [/trunk] Changeset 232 by mikael
mikael
parents: 197
diff changeset
   605
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 771
diff changeset
   606
  text_locale = from_utf8(text);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 771
diff changeset
   607
  hbuf_add_line(&win_entry->hbuf, text_locale, timestamp, prefix_flags,
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   608
                maxX - Roster_Width - PREFIX_WIDTH);
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 771
diff changeset
   609
  g_free(text_locale);
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   610
108
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
   611
  if (win_entry->cleared) {
220
8dfdc6f1778e [/trunk] Changeset 232 by mikael
mikael
parents: 197
diff changeset
   612
    win_entry->cleared = FALSE;
8dfdc6f1778e [/trunk] Changeset 232 by mikael
mikael
parents: 197
diff changeset
   613
    if (g_list_next(win_entry->top))
8dfdc6f1778e [/trunk] Changeset 232 by mikael
mikael
parents: 197
diff changeset
   614
      win_entry->top = g_list_next(win_entry->top);
8dfdc6f1778e [/trunk] Changeset 232 by mikael
mikael
parents: 197
diff changeset
   615
  }
8dfdc6f1778e [/trunk] Changeset 232 by mikael
mikael
parents: 197
diff changeset
   616
8dfdc6f1778e [/trunk] Changeset 232 by mikael
mikael
parents: 197
diff changeset
   617
  // Make sure the last line appears in the window; update top if necessary
8dfdc6f1778e [/trunk] Changeset 232 by mikael
mikael
parents: 197
diff changeset
   618
  if (win_entry->top) {
8dfdc6f1778e [/trunk] Changeset 232 by mikael
mikael
parents: 197
diff changeset
   619
    int dist;
8dfdc6f1778e [/trunk] Changeset 232 by mikael
mikael
parents: 197
diff changeset
   620
    GList *first = g_list_first(win_entry->hbuf);
8dfdc6f1778e [/trunk] Changeset 232 by mikael
mikael
parents: 197
diff changeset
   621
    dist = g_list_position(first, g_list_last(win_entry->hbuf)) -
8dfdc6f1778e [/trunk] Changeset 232 by mikael
mikael
parents: 197
diff changeset
   622
           g_list_position(first, win_entry->top);
8dfdc6f1778e [/trunk] Changeset 232 by mikael
mikael
parents: 197
diff changeset
   623
    if (dist >= CHAT_WIN_HEIGHT)
8dfdc6f1778e [/trunk] Changeset 232 by mikael
mikael
parents: 197
diff changeset
   624
      win_entry->top = NULL;
108
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
   625
  }
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
   626
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   627
  if (!dont_show) {
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   628
    // Show and refresh the window
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   629
    top_panel(win_entry->panel);
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   630
    scr_UpdateWindow(win_entry);
142
bb6fe91589b9 [/trunk] Changeset 154 by mikael
mikael
parents: 140
diff changeset
   631
    top_panel(inputPanel);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   632
    update_panels();
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   633
    doupdate();
513
d40c434fff46 Add HBB_PREFIX_NOFLAG
Mikael Berthe <mikael@lilotux.net>
parents: 512
diff changeset
   634
  } else if (!(prefix_flags & HBB_PREFIX_NOFLAG)) {
148
c3624b2a7059 [/trunk] Changeset 160 by mikael
mikael
parents: 143
diff changeset
   635
    roster_msg_setflag(winId, TRUE);
30
4ea2df449381 [/trunk] Changeset 46 by mikael
mikael
parents: 29
diff changeset
   636
    update_roster = TRUE;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   637
  }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   638
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   639
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   640
//  scr_UpdateMainStatus()
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   641
// Redraw the main (bottom) status line.
724
264375fe7159 Fix a roster refresh issue
Mikael Berthe <mikael@lilotux.net>
parents: 723
diff changeset
   642
void scr_UpdateMainStatus(int forceupdate)
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   643
{
773
e25b8a348ebd Screen updating functions use UTF-8
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
   644
  char *sm = from_utf8(jb_getstatusmsg());
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   645
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   646
  werase(mainstatusWnd);
724
264375fe7159 Fix a roster refresh issue
Mikael Berthe <mikael@lilotux.net>
parents: 723
diff changeset
   647
  mvwprintw(mainstatusWnd, 0, 0, "%c[%c] %s",
718
b41799901abd Add a new_message flag (#) in the main status line
Mikael Berthe <mikael@lilotux.net>
parents: 717
diff changeset
   648
            (unread_msg(NULL) ? '#' : ' '),
b41799901abd Add a new_message flag (#) in the main status line
Mikael Berthe <mikael@lilotux.net>
parents: 717
diff changeset
   649
            imstatus2char[jb_getstatus()], (sm ? sm : ""));
724
264375fe7159 Fix a roster refresh issue
Mikael Berthe <mikael@lilotux.net>
parents: 723
diff changeset
   650
  if (forceupdate) {
264375fe7159 Fix a roster refresh issue
Mikael Berthe <mikael@lilotux.net>
parents: 723
diff changeset
   651
    top_panel(inputPanel);
264375fe7159 Fix a roster refresh issue
Mikael Berthe <mikael@lilotux.net>
parents: 723
diff changeset
   652
    update_panels();
264375fe7159 Fix a roster refresh issue
Mikael Berthe <mikael@lilotux.net>
parents: 723
diff changeset
   653
    doupdate();
264375fe7159 Fix a roster refresh issue
Mikael Berthe <mikael@lilotux.net>
parents: 723
diff changeset
   654
  }
773
e25b8a348ebd Screen updating functions use UTF-8
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
   655
  g_free(sm);
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   656
}
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   657
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   658
//  scr_DrawMainWindow()
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
   659
// Set fullinit to TRUE to also create panels.  Set it to FALSE for a resize.
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   660
//
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   661
// I think it could be improved a _lot_ but I'm really not an ncurses
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   662
// expert... :-\   Mikael.
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   663
//
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   664
void scr_DrawMainWindow(unsigned int fullinit)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   665
{
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   666
  int requested_size;
518
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
   667
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
   668
  Log_Win_Height = DEFAULT_LOG_WIN_HEIGHT;
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   669
  requested_size = settings_opt_get_int("log_win_height");
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   670
  if (requested_size > 0) {
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   671
    if (maxY > requested_size + 3)
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   672
      Log_Win_Height = requested_size + 2;
518
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
   673
    else
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
   674
      Log_Win_Height = ((maxY > 5) ? (maxY - 2) : 3);
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   675
  } else if (requested_size < 0) {
518
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
   676
    Log_Win_Height = 3;
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
   677
  }
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
   678
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
   679
  if (maxY < Log_Win_Height+2) {
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
   680
    if (maxY < 5) {
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
   681
      Log_Win_Height = 3;
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
   682
      maxY = Log_Win_Height+2;
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
   683
    } else {
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
   684
      Log_Win_Height = maxY - 2;
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
   685
    }
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
   686
  }
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
   687
707
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
   688
  if (roster_hidden) {
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
   689
    Roster_Width = 0;
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
   690
  } else {
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
   691
    requested_size = settings_opt_get_int("roster_width");
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
   692
    if (requested_size > 1)
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
   693
      Roster_Width = requested_size;
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
   694
    else if (requested_size == 1)
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
   695
      Roster_Width = 2;
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
   696
    else
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
   697
      Roster_Width = DEFAULT_ROSTER_WIDTH;
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
   698
  }
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   699
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
   700
  if (fullinit) {
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
   701
    /* Create windows */
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   702
    rosterWnd = newwin(CHAT_WIN_HEIGHT, Roster_Width, 0, 0);
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   703
    chatWnd   = newwin(CHAT_WIN_HEIGHT, maxX - Roster_Width, 0, Roster_Width);
711
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
   704
    logWnd    = newwin(Log_Win_Height-2, maxX, CHAT_WIN_HEIGHT+1, 0);
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
   705
    chatstatusWnd = newwin(1, maxX, CHAT_WIN_HEIGHT, 0);
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
   706
    mainstatusWnd = newwin(1, maxX, maxY-2, 0);
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
   707
    inputWnd  = newwin(1, maxX, maxY-1, 0);
358
6e4e667c5571 Fix a segfault when starting mcabber in a really small terminal
Mikael Berthe <mikael@lilotux.net>
parents: 339
diff changeset
   708
    if (!rosterWnd || !chatWnd || !logWnd || !inputWnd) {
6e4e667c5571 Fix a segfault when starting mcabber in a really small terminal
Mikael Berthe <mikael@lilotux.net>
parents: 339
diff changeset
   709
      scr_TerminateCurses();
6e4e667c5571 Fix a segfault when starting mcabber in a really small terminal
Mikael Berthe <mikael@lilotux.net>
parents: 339
diff changeset
   710
      fprintf(stderr, "Cannot create windows!\n");
6e4e667c5571 Fix a segfault when starting mcabber in a really small terminal
Mikael Berthe <mikael@lilotux.net>
parents: 339
diff changeset
   711
      exit(EXIT_FAILURE);
6e4e667c5571 Fix a segfault when starting mcabber in a really small terminal
Mikael Berthe <mikael@lilotux.net>
parents: 339
diff changeset
   712
    }
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   713
    wbkgd(rosterWnd,      get_color(COLOR_GENERAL));
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   714
    wbkgd(chatWnd,        get_color(COLOR_GENERAL));
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   715
    wbkgd(logWnd,         get_color(COLOR_GENERAL));
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   716
    wbkgd(chatstatusWnd,  get_color(COLOR_STATUS));
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   717
    wbkgd(mainstatusWnd,  get_color(COLOR_STATUS));
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
   718
  } else {
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   719
    /* Resize/move windows */
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   720
    wresize(rosterWnd, CHAT_WIN_HEIGHT, Roster_Width);
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   721
    wresize(chatWnd, CHAT_WIN_HEIGHT, maxX - Roster_Width);
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   722
    mvwin(chatWnd, 0, Roster_Width);
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
   723
711
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
   724
    wresize(logWnd, Log_Win_Height-2, maxX);
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
   725
    mvwin(logWnd, CHAT_WIN_HEIGHT+1, 0);
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
   726
711
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
   727
    // Resize & move chat status window
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
   728
    wresize(chatstatusWnd, 1, maxX);
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
   729
    mvwin(chatstatusWnd, CHAT_WIN_HEIGHT, 0);
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
   730
    // Resize & move main status window
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
   731
    wresize(mainstatusWnd, 1, maxX);
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
   732
    mvwin(mainstatusWnd, maxY-2, 0);
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
   733
    // Resize & move input line window
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
   734
    wresize(inputWnd, 1, maxX);
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
   735
    mvwin(inputWnd, maxY-1, 0);
168
6ad156673b19 [/trunk] Changeset 180 by mikael
mikael
parents: 167
diff changeset
   736
6ad156673b19 [/trunk] Changeset 180 by mikael
mikael
parents: 167
diff changeset
   737
    werase(chatWnd);
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
   738
  }
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   739
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   740
  /* Draw/init windows */
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   741
679
5933a8036672 Remove "This is the status window" message
Mikael Berthe <mikael@lilotux.net>
parents: 675
diff changeset
   742
  mvwprintw(chatWnd, 0, 0, "Thanks for using mcabber.\n");
5933a8036672 Remove "This is the status window" message
Mikael Berthe <mikael@lilotux.net>
parents: 675
diff changeset
   743
  mvwprintw(chatWnd, 1, 0, "http://www.lilotux.net/~mikael/mcabber/");
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   744
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
   745
  // Auto-scrolling in log window
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
   746
  scrollok(logWnd, TRUE);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   747
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   748
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   749
  if (fullinit) {
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
   750
    // Enable keypad (+ special keys)
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
   751
    keypad(inputWnd, TRUE);
382
4c6e8392e465 Use nodelay() instead of halfdelay()
Mikael Berthe <mikael@lilotux.net>
parents: 374
diff changeset
   752
    nodelay(inputWnd, TRUE);
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
   753
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   754
    // Create panels
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   755
    rosterPanel = new_panel(rosterWnd);
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   756
    chatPanel   = new_panel(chatWnd);
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   757
    logPanel    = new_panel(logWnd);
711
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
   758
    chatstatusPanel = new_panel(chatstatusWnd);
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
   759
    mainstatusPanel = new_panel(mainstatusWnd);
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   760
    inputPanel  = new_panel(inputWnd);
232
9a6ba4b38e63 [/trunk] Changeset 245 by mikael
mikael
parents: 220
diff changeset
   761
9a6ba4b38e63 [/trunk] Changeset 245 by mikael
mikael
parents: 220
diff changeset
   762
    if (utf8_mode)
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
   763
      scr_LogPrint(LPRINT_NORMAL, "WARNING: UTF-8 not yet supported!");
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
   764
  } else {
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
   765
    // Update panels
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
   766
    replace_panel(rosterPanel, rosterWnd);
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
   767
    replace_panel(chatPanel, chatWnd);
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
   768
    replace_panel(logPanel, logWnd);
711
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
   769
    replace_panel(chatstatusPanel, chatstatusWnd);
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
   770
    replace_panel(mainstatusPanel, mainstatusWnd);
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
   771
    replace_panel(inputPanel, inputWnd);
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   772
  }
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   773
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   774
  // We'll need to redraw the roster
149
9f74832eb4f8 [/trunk] Changeset 161 by mikael
mikael
parents: 148
diff changeset
   775
  update_roster = TRUE;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   776
  return;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   777
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   778
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   779
//  scr_Resize()
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   780
// Function called when the window is resized.
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
   781
// - Resize windows
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   782
// - Rewrap lines in each buddy buffer
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   783
void scr_Resize()
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   784
{
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   785
  int x, y, lines, cols;
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   786
  GSList *wblp;
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   787
  winbuf *wbp;
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   788
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   789
  // First, update the global variables
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   790
  getmaxyx(stdscr, maxY, maxX);
518
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
   791
  // scr_DrawMainWindow() will take care of maxY and Log_Win_Height
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
   792
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   793
  // Make sure the cursor stays inside the window
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   794
  check_offset(0);
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   795
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
   796
  // Resize windows and update panels
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   797
  scr_DrawMainWindow(FALSE);
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   798
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   799
  // Resize all buddy windows
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   800
  x = Roster_Width;
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   801
  y = 0;
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   802
  lines = CHAT_WIN_HEIGHT;
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   803
  cols = maxX - Roster_Width;
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   804
  if (cols < 1) cols = 1;
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   805
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   806
  for (wblp = winbuflst; wblp; wblp = g_slist_next(wblp)) {
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   807
    wbp = wblp->data;
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   808
    if (wbp->win) {
189
4f3975f1b852 [/trunk] Changeset 201 by mikael
mikael
parents: 187
diff changeset
   809
      GList *rescue_top;
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   810
      // Resize/move buddy window
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   811
      wresize(wbp->win, lines, cols);
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   812
      mvwin(wbp->win, 0, Roster_Width);
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   813
      werase(wbp->win);
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   814
      // If a panel exists, replace the old window with the new
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   815
      if (wbp->panel)
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   816
        replace_panel(wbp->panel, wbp->win);
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   817
      // Redo line wrapping
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   818
      rescue_top = hbuf_previous_persistent(wbp->top);
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   819
      hbuf_rebuild(&wbp->hbuf, maxX - Roster_Width - PREFIX_WIDTH);
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   820
      if (g_list_position(g_list_first(wbp->hbuf), wbp->top) == -1) {
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   821
        wbp->top = rescue_top;
388
f211238d5812 Ctrl-l does a full refresh
Mikael Berthe <mikael@lilotux.net>
parents: 384
diff changeset
   822
      }
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   823
    }
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   824
  }
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   825
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   826
  // Refresh current buddy window
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
   827
  if (chatmode)
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   828
    scr_ShowBuddyWindow();
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   829
}
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
   830
721
9cf31c9b1dc4 Use room topic as a description in the chat status line
Mikael Berthe <mikael@lilotux.net>
parents: 720
diff changeset
   831
//  scr_UpdateChatStatus(forceupdate)
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   832
// Redraw the buddy status bar.
716
ba1137a01078 Add a chatmode flag (©) in the chat status line
Mikael Berthe <mikael@lilotux.net>
parents: 715
diff changeset
   833
// Set forceupdate to TRUE if doupdate() must be called.
721
9cf31c9b1dc4 Use room topic as a description in the chat status line
Mikael Berthe <mikael@lilotux.net>
parents: 720
diff changeset
   834
void scr_UpdateChatStatus(int forceupdate)
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   835
{
717
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   836
  unsigned short btype, isgrp, ismuc;
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   837
  const char *fullname;
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   838
  const char *msg = NULL;
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   839
  char status;
773
e25b8a348ebd Screen updating functions use UTF-8
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
   840
  char *buf, *buf_locale;
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   841
718
b41799901abd Add a new_message flag (#) in the main status line
Mikael Berthe <mikael@lilotux.net>
parents: 717
diff changeset
   842
  // Usually we need to update the bottom status line too,
b41799901abd Add a new_message flag (#) in the main status line
Mikael Berthe <mikael@lilotux.net>
parents: 717
diff changeset
   843
  // at least to refresh the pending message flag.
724
264375fe7159 Fix a roster refresh issue
Mikael Berthe <mikael@lilotux.net>
parents: 723
diff changeset
   844
  scr_UpdateMainStatus(FALSE);
718
b41799901abd Add a new_message flag (#) in the main status line
Mikael Berthe <mikael@lilotux.net>
parents: 717
diff changeset
   845
806
3521e34f722a Fix a segfault when not connected to a server
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
   846
  // Clear the line
3521e34f722a Fix a segfault when not connected to a server
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
   847
  werase(chatstatusWnd);
3521e34f722a Fix a segfault when not connected to a server
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
   848
3521e34f722a Fix a segfault when not connected to a server
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
   849
  if (chatmode)
3521e34f722a Fix a segfault when not connected to a server
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
   850
    wprintw(chatstatusWnd, "~");
3521e34f722a Fix a segfault when not connected to a server
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
   851
3521e34f722a Fix a segfault when not connected to a server
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
   852
  if (!current_buddy) {
3521e34f722a Fix a segfault when not connected to a server
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
   853
    if (forceupdate) {
3521e34f722a Fix a segfault when not connected to a server
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
   854
      update_panels();
3521e34f722a Fix a segfault when not connected to a server
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
   855
      doupdate();
3521e34f722a Fix a segfault when not connected to a server
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
   856
    }
3521e34f722a Fix a segfault when not connected to a server
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
   857
    return;
3521e34f722a Fix a segfault when not connected to a server
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
   858
  }
3521e34f722a Fix a segfault when not connected to a server
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
   859
717
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   860
  fullname = buddy_getname(BUDDATA(current_buddy));
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   861
  btype = buddy_gettype(BUDDATA(current_buddy));
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   862
717
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   863
  isgrp = btype & ROSTER_TYPE_GROUP;
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   864
  ismuc = btype & ROSTER_TYPE_ROOM;
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   865
717
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   866
  if (isgrp) {
773
e25b8a348ebd Screen updating functions use UTF-8
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
   867
    buf_locale = from_utf8(fullname);
e25b8a348ebd Screen updating functions use UTF-8
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
   868
    mvwprintw(chatstatusWnd, 0, 5, "Group: %s", buf_locale);
e25b8a348ebd Screen updating functions use UTF-8
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
   869
    g_free(buf_locale);
716
ba1137a01078 Add a chatmode flag (©) in the chat status line
Mikael Berthe <mikael@lilotux.net>
parents: 715
diff changeset
   870
    if (forceupdate) {
ba1137a01078 Add a chatmode flag (©) in the chat status line
Mikael Berthe <mikael@lilotux.net>
parents: 715
diff changeset
   871
      update_panels();
ba1137a01078 Add a chatmode flag (©) in the chat status line
Mikael Berthe <mikael@lilotux.net>
parents: 715
diff changeset
   872
      doupdate();
ba1137a01078 Add a chatmode flag (©) in the chat status line
Mikael Berthe <mikael@lilotux.net>
parents: 715
diff changeset
   873
    }
717
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   874
    return;
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   875
  }
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   876
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   877
  status = '?';
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   878
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   879
  if (ismuc) {
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   880
    if (buddy_getinsideroom(BUDDATA(current_buddy)))
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   881
      status = 'C';
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   882
    else
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   883
      status = 'x';
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   884
  } else if (jb_getstatus() != offline) {
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   885
    enum imstatus budstate;
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   886
    budstate = buddy_getstatus(BUDDATA(current_buddy), NULL);
790
5d4ad1d77da4 Kill a few gcc4 warnings
Mikael Berthe <mikael@lilotux.net>
parents: 785
diff changeset
   887
    if (budstate < imstatus_size)
717
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   888
      status = imstatus2char[budstate];
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   889
  }
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   890
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   891
  // No status message for groups & MUC rooms
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   892
  if (!isgrp && !ismuc) {
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   893
    GSList *resources = buddy_getresources(BUDDATA(current_buddy));
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   894
    if (resources)
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   895
      msg = buddy_getstatusmsg(BUDDATA(current_buddy), resources->data);
721
9cf31c9b1dc4 Use room topic as a description in the chat status line
Mikael Berthe <mikael@lilotux.net>
parents: 720
diff changeset
   896
  } else if (ismuc) {
9cf31c9b1dc4 Use room topic as a description in the chat status line
Mikael Berthe <mikael@lilotux.net>
parents: 720
diff changeset
   897
    msg = buddy_gettopic(BUDDATA(current_buddy));
717
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   898
  }
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   899
  if (!msg)
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   900
    msg = "";
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   901
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   902
  buf = g_strdup_printf("[%c] Buddy: %s -- %s", status, fullname, msg);
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   903
  replace_nl_with_dots(buf);
773
e25b8a348ebd Screen updating functions use UTF-8
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
   904
  buf_locale = from_utf8(buf);
e25b8a348ebd Screen updating functions use UTF-8
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
   905
  mvwprintw(chatstatusWnd, 0, 1, "%s", buf_locale);
e25b8a348ebd Screen updating functions use UTF-8
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
   906
  g_free(buf_locale);
717
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   907
  g_free(buf);
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   908
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   909
  if (forceupdate) {
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   910
    update_panels();
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   911
    doupdate();
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
   912
  }
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   913
}
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   914
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
   915
//  scr_DrawRoster()
328
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
   916
// Display the buddylist (not really the roster) on the screen
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
   917
void scr_DrawRoster(void)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   918
{
735
2f027806cd48 Some code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 731
diff changeset
   919
  static int offset = 0;
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   920
  char *name, *rline;
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
   921
  int maxx, maxy;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
   922
  GList *buddy;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
   923
  int i, n;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
   924
  int rOffset;
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   925
  int cursor_backup;
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   926
  char status, pending;
164
faf534be8ff0 [/trunk] Changeset 176 by mikael
mikael
parents: 159
diff changeset
   927
  enum imstatus currentstatus = jb_getstatus();
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
   928
123
1bdf882bed98 [/trunk] Changeset 136 by mikael
mikael
parents: 121
diff changeset
   929
  // We can reset update_roster
1bdf882bed98 [/trunk] Changeset 136 by mikael
mikael
parents: 121
diff changeset
   930
  update_roster = FALSE;
1bdf882bed98 [/trunk] Changeset 136 by mikael
mikael
parents: 121
diff changeset
   931
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
   932
  getmaxyx(rosterWnd, maxy, maxx);
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   933
  maxx--;  // Last char is for vertical border
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
   934
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   935
  cursor_backup = curs_set(0);
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   936
724
264375fe7159 Fix a roster refresh issue
Mikael Berthe <mikael@lilotux.net>
parents: 723
diff changeset
   937
  if (!buddylist)
264375fe7159 Fix a roster refresh issue
Mikael Berthe <mikael@lilotux.net>
parents: 723
diff changeset
   938
    offset = 0;
264375fe7159 Fix a roster refresh issue
Mikael Berthe <mikael@lilotux.net>
parents: 723
diff changeset
   939
  else
264375fe7159 Fix a roster refresh issue
Mikael Berthe <mikael@lilotux.net>
parents: 723
diff changeset
   940
    scr_UpdateChatStatus(FALSE);
264375fe7159 Fix a roster refresh issue
Mikael Berthe <mikael@lilotux.net>
parents: 723
diff changeset
   941
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   942
  // Cleanup of roster window
168
6ad156673b19 [/trunk] Changeset 180 by mikael
mikael
parents: 167
diff changeset
   943
  werase(rosterWnd);
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
   944
707
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
   945
  if (Roster_Width) {
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
   946
    // Redraw the vertical line (not very good...)
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   947
    wattrset(rosterWnd, get_color(COLOR_GENERAL));
707
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
   948
    for (i=0 ; i < CHAT_WIN_HEIGHT ; i++)
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
   949
      mvwaddch(rosterWnd, i, Roster_Width-1, ACS_VLINE);
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
   950
  }
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
   951
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
   952
  // Leave now if buddylist is empty or the roster is hidden
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
   953
  if (!buddylist || !Roster_Width) {
123
1bdf882bed98 [/trunk] Changeset 136 by mikael
mikael
parents: 121
diff changeset
   954
    update_panels();
1bdf882bed98 [/trunk] Changeset 136 by mikael
mikael
parents: 121
diff changeset
   955
    doupdate();
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   956
    curs_set(cursor_backup);
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
   957
    return;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
   958
  }
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
   959
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   960
  name = g_new0(char, Roster_Width);
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   961
84
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
   962
  // Update offset if necessary
680
1f8987e0e56c Try to display as many buddylist items as possible
Mikael Berthe <mikael@lilotux.net>
parents: 679
diff changeset
   963
  // a) Try to show as many buddylist items as possible
1f8987e0e56c Try to display as many buddylist items as possible
Mikael Berthe <mikael@lilotux.net>
parents: 679
diff changeset
   964
  i = g_list_length(buddylist) - maxy;
682
f3945593432e Small fix in scr_DrawRoster()
Mikael Berthe <mikael@lilotux.net>
parents: 680
diff changeset
   965
  if (i < 0)
f3945593432e Small fix in scr_DrawRoster()
Mikael Berthe <mikael@lilotux.net>
parents: 680
diff changeset
   966
    i = 0;
f3945593432e Small fix in scr_DrawRoster()
Mikael Berthe <mikael@lilotux.net>
parents: 680
diff changeset
   967
  if (i < offset)
680
1f8987e0e56c Try to display as many buddylist items as possible
Mikael Berthe <mikael@lilotux.net>
parents: 679
diff changeset
   968
    offset = i;
1f8987e0e56c Try to display as many buddylist items as possible
Mikael Berthe <mikael@lilotux.net>
parents: 679
diff changeset
   969
  // b) Make sure the current_buddy is visible
84
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
   970
  i = g_list_position(buddylist, current_buddy);
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
   971
  if (i == -1) { // This is bad
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
   972
    scr_LogPrint(LPRINT_NORMAL, "Doh! Can't find current selected buddy!!");
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   973
    g_free(name);
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   974
    curs_set(cursor_backup);
84
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
   975
    return;
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
   976
  } else if (i < offset) {
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
   977
    offset = i;
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
   978
  } else if (i+1 > offset + maxy) {
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
   979
    offset = i + 1 - maxy;
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
   980
  }
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
   981
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   982
  rline = g_new0(char, Roster_Width+1);
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
   983
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
   984
  buddy = buddylist;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
   985
  rOffset = offset;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
   986
84
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
   987
  for (i=0; i<maxy && buddy; buddy = g_list_next(buddy)) {
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   988
    unsigned short bflags, btype, ismsg, isgrp, ismuc, ishid;
773
e25b8a348ebd Screen updating functions use UTF-8
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
   989
    gchar *rline_locale;
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   990
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   991
    bflags = buddy_getflags(BUDDATA(buddy));
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   992
    btype = buddy_gettype(BUDDATA(buddy));
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   993
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   994
    ismsg = bflags & ROSTER_FLAG_MSG;
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   995
    ishid = bflags & ROSTER_FLAG_HIDE;
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   996
    isgrp = btype  & ROSTER_TYPE_GROUP;
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
   997
    ismuc = btype  & ROSTER_TYPE_ROOM;
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
   998
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
   999
    if (rOffset > 0) {
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1000
      rOffset--;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1001
      continue;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1002
    }
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1003
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1004
    status = '?';
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1005
    pending = ' ';
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1006
149
9f74832eb4f8 [/trunk] Changeset 161 by mikael
mikael
parents: 148
diff changeset
  1007
    // Display message notice if there is a message flag, but not
9f74832eb4f8 [/trunk] Changeset 161 by mikael
mikael
parents: 148
diff changeset
  1008
    // for unfolded groups.
9f74832eb4f8 [/trunk] Changeset 161 by mikael
mikael
parents: 148
diff changeset
  1009
    if (ismsg && (!isgrp || ishid)) {
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1010
      pending = '#';
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1011
    }
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1012
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1013
    if (ismuc) {
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1014
      if (buddy_getinsideroom(BUDDATA(buddy)))
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1015
        status = 'C';
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1016
      else
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1017
        status = 'x';
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1018
    } else if (currentstatus != offline) {
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1019
      enum imstatus budstate;
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1020
      budstate = buddy_getstatus(BUDDATA(buddy), NULL);
790
5d4ad1d77da4 Kill a few gcc4 warnings
Mikael Berthe <mikael@lilotux.net>
parents: 785
diff changeset
  1021
      if (budstate < imstatus_size)
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1022
        status = imstatus2char[budstate];
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1023
    }
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1024
    if (buddy == current_buddy) {
723
23068490d063 Add text color when the selected buddy has an unread message
Mikael Berthe <mikael@lilotux.net>
parents: 721
diff changeset
  1025
      if (pending == '#')
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
  1026
        wattrset(rosterWnd, get_color(COLOR_ROSTERSELNMSG));
723
23068490d063 Add text color when the selected buddy has an unread message
Mikael Berthe <mikael@lilotux.net>
parents: 721
diff changeset
  1027
      else
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
  1028
        wattrset(rosterWnd, get_color(COLOR_ROSTERSEL));
723
23068490d063 Add text color when the selected buddy has an unread message
Mikael Berthe <mikael@lilotux.net>
parents: 721
diff changeset
  1029
      // The 3 following lines aim at coloring the whole line
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1030
      wmove(rosterWnd, i, 0);
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1031
      for (n = 0; n < maxx; n++)
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1032
        waddch(rosterWnd, ' ');
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1033
    } else {
149
9f74832eb4f8 [/trunk] Changeset 161 by mikael
mikael
parents: 148
diff changeset
  1034
      if (pending == '#')
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
  1035
        wattrset(rosterWnd, get_color(COLOR_ROSTERNMSG));
139
8d7e31d37bec [/trunk] Changeset 151 by mikael
mikael
parents: 135
diff changeset
  1036
      else
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
  1037
        wattrset(rosterWnd, get_color(COLOR_ROSTER));
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1038
    }
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1039
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1040
    if (Roster_Width > 7)
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1041
      strncpy(name, buddy_getname(BUDDATA(buddy)), Roster_Width-7);
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1042
    else
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1043
      name[0] = 0;
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1044
149
9f74832eb4f8 [/trunk] Changeset 161 by mikael
mikael
parents: 148
diff changeset
  1045
    if (isgrp) {
133
a27b22e3b3a1 [/trunk] Changeset 146 by mikael
mikael
parents: 129
diff changeset
  1046
      char *sep;
149
9f74832eb4f8 [/trunk] Changeset 161 by mikael
mikael
parents: 148
diff changeset
  1047
      if (ishid)
133
a27b22e3b3a1 [/trunk] Changeset 146 by mikael
mikael
parents: 129
diff changeset
  1048
        sep = "+++";
a27b22e3b3a1 [/trunk] Changeset 146 by mikael
mikael
parents: 129
diff changeset
  1049
      else
a27b22e3b3a1 [/trunk] Changeset 146 by mikael
mikael
parents: 129
diff changeset
  1050
        sep = "---";
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1051
      snprintf(rline, Roster_Width, " %c%s %s", pending, sep, name);
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1052
    } else {
824
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1053
      char sepleft  = '[';
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1054
      char sepright = ']';
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1055
      if (btype & ROSTER_TYPE_USER) {
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1056
        guint subtype = buddy_getsubscription(BUDDATA(buddy));
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1057
        if (!(subtype & sub_to))
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1058
          status = '?';
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1059
        if (!(subtype & sub_from)) {
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1060
          sepleft  = '{';
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1061
          sepright = '}';
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1062
        }
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1063
      }
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1064
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1065
      snprintf(rline, Roster_Width,
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1066
               " %c%c%c%c %s", pending, sepleft, status, sepright, name);
133
a27b22e3b3a1 [/trunk] Changeset 146 by mikael
mikael
parents: 129
diff changeset
  1067
    }
84
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
  1068
773
e25b8a348ebd Screen updating functions use UTF-8
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
  1069
    rline_locale = from_utf8(rline);
e25b8a348ebd Screen updating functions use UTF-8
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
  1070
    mvwprintw(rosterWnd, i, 0, "%s", rline_locale);
e25b8a348ebd Screen updating functions use UTF-8
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
  1071
    g_free(rline_locale);
84
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
  1072
    i++;
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1073
  }
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1074
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1075
  g_free(rline);
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1076
  g_free(name);
142
bb6fe91589b9 [/trunk] Changeset 154 by mikael
mikael
parents: 140
diff changeset
  1077
  top_panel(inputPanel);
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1078
  update_panels();
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1079
  doupdate();
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1080
  curs_set(cursor_backup);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1081
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1082
707
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1083
//  scr_RosterVisibility(status)
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1084
// Set the roster visibility:
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1085
// status=1   Show roster
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1086
// status=0   Hide roster
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1087
// status=-1  Toggle roster status
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1088
void scr_RosterVisibility(int status)
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1089
{
708
ed326697e4ed scr_RosterVisibility(): do not refresh when it is not needed
Mikael Berthe <mikael@lilotux.net>
parents: 707
diff changeset
  1090
  int old_roster_status = roster_hidden;
ed326697e4ed scr_RosterVisibility(): do not refresh when it is not needed
Mikael Berthe <mikael@lilotux.net>
parents: 707
diff changeset
  1091
707
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1092
  if (status > 0)
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1093
    roster_hidden = FALSE;
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1094
  else if (status == 0)
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1095
    roster_hidden = TRUE;
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1096
  else
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1097
    roster_hidden = !roster_hidden;
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1098
708
ed326697e4ed scr_RosterVisibility(): do not refresh when it is not needed
Mikael Berthe <mikael@lilotux.net>
parents: 707
diff changeset
  1099
  if (roster_hidden != old_roster_status) {
709
5aa66101807b Leave full-width mode automatically under some conditions
Mikael Berthe <mikael@lilotux.net>
parents: 708
diff changeset
  1100
    if (roster_hidden) {
5aa66101807b Leave full-width mode automatically under some conditions
Mikael Berthe <mikael@lilotux.net>
parents: 708
diff changeset
  1101
      // Enter chat mode
5aa66101807b Leave full-width mode automatically under some conditions
Mikael Berthe <mikael@lilotux.net>
parents: 708
diff changeset
  1102
      scr_set_chatmode(TRUE);
5aa66101807b Leave full-width mode automatically under some conditions
Mikael Berthe <mikael@lilotux.net>
parents: 708
diff changeset
  1103
      scr_ShowBuddyWindow();
5aa66101807b Leave full-width mode automatically under some conditions
Mikael Berthe <mikael@lilotux.net>
parents: 708
diff changeset
  1104
    }
708
ed326697e4ed scr_RosterVisibility(): do not refresh when it is not needed
Mikael Berthe <mikael@lilotux.net>
parents: 707
diff changeset
  1105
    // Recalculate windows size and redraw
ed326697e4ed scr_RosterVisibility(): do not refresh when it is not needed
Mikael Berthe <mikael@lilotux.net>
parents: 707
diff changeset
  1106
    scr_Resize();
ed326697e4ed scr_RosterVisibility(): do not refresh when it is not needed
Mikael Berthe <mikael@lilotux.net>
parents: 707
diff changeset
  1107
    redrawwin(stdscr);
ed326697e4ed scr_RosterVisibility(): do not refresh when it is not needed
Mikael Berthe <mikael@lilotux.net>
parents: 707
diff changeset
  1108
  }
707
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1109
}
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1110
480
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  1111
inline void scr_WriteMessage(const char *jid, const char *text,
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  1112
                             time_t timestamp, guint prefix_flags)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1113
{
727
1c3620668857 Expand tabs when reading history files
Mikael Berthe <mikael@lilotux.net>
parents: 726
diff changeset
  1114
  char *xtext;
725
1aff92625bdb Expand tabs when receiving a message
Mikael Berthe <mikael@lilotux.net>
parents: 724
diff changeset
  1115
726
51be2bc1a820 Better tab expansion
Mikael Berthe <mikael@lilotux.net>
parents: 725
diff changeset
  1116
  if (!timestamp) timestamp = time(NULL);
725
1aff92625bdb Expand tabs when receiving a message
Mikael Berthe <mikael@lilotux.net>
parents: 724
diff changeset
  1117
727
1c3620668857 Expand tabs when reading history files
Mikael Berthe <mikael@lilotux.net>
parents: 726
diff changeset
  1118
  xtext = ut_expand_tabs(text); // Expand tabs
725
1aff92625bdb Expand tabs when receiving a message
Mikael Berthe <mikael@lilotux.net>
parents: 724
diff changeset
  1119
726
51be2bc1a820 Better tab expansion
Mikael Berthe <mikael@lilotux.net>
parents: 725
diff changeset
  1120
  // XXX Are there other special chars we should filter out?
51be2bc1a820 Better tab expansion
Mikael Berthe <mikael@lilotux.net>
parents: 725
diff changeset
  1121
51be2bc1a820 Better tab expansion
Mikael Berthe <mikael@lilotux.net>
parents: 725
diff changeset
  1122
  scr_WriteInWindow(jid, xtext, timestamp, prefix_flags, FALSE);
725
1aff92625bdb Expand tabs when receiving a message
Mikael Berthe <mikael@lilotux.net>
parents: 724
diff changeset
  1123
1aff92625bdb Expand tabs when receiving a message
Mikael Berthe <mikael@lilotux.net>
parents: 724
diff changeset
  1124
  if (xtext != (char*)text)
1aff92625bdb Expand tabs when receiving a message
Mikael Berthe <mikael@lilotux.net>
parents: 724
diff changeset
  1125
    g_free(xtext);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1126
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1127
726
51be2bc1a820 Better tab expansion
Mikael Berthe <mikael@lilotux.net>
parents: 725
diff changeset
  1128
// If prefix is NULL, HBB_PREFIX_IN is supposed.
51be2bc1a820 Better tab expansion
Mikael Berthe <mikael@lilotux.net>
parents: 725
diff changeset
  1129
void scr_WriteIncomingMessage(const char *jidfrom, const char *text,
51be2bc1a820 Better tab expansion
Mikael Berthe <mikael@lilotux.net>
parents: 725
diff changeset
  1130
        time_t timestamp, guint prefix)
51be2bc1a820 Better tab expansion
Mikael Berthe <mikael@lilotux.net>
parents: 725
diff changeset
  1131
{
728
421b337dc6d2 Chat window: Highlight the flag in our messages
Mikael Berthe <mikael@lilotux.net>
parents: 727
diff changeset
  1132
  if (!(prefix & ~HBB_PREFIX_NOFLAG & ~HBB_PREFIX_HLIGHT))
726
51be2bc1a820 Better tab expansion
Mikael Berthe <mikael@lilotux.net>
parents: 725
diff changeset
  1133
    prefix |= HBB_PREFIX_IN;
51be2bc1a820 Better tab expansion
Mikael Berthe <mikael@lilotux.net>
parents: 725
diff changeset
  1134
51be2bc1a820 Better tab expansion
Mikael Berthe <mikael@lilotux.net>
parents: 725
diff changeset
  1135
  scr_WriteMessage(jidfrom, text, timestamp, prefix);
51be2bc1a820 Better tab expansion
Mikael Berthe <mikael@lilotux.net>
parents: 725
diff changeset
  1136
  update_panels();
51be2bc1a820 Better tab expansion
Mikael Berthe <mikael@lilotux.net>
parents: 725
diff changeset
  1137
  doupdate();
51be2bc1a820 Better tab expansion
Mikael Berthe <mikael@lilotux.net>
parents: 725
diff changeset
  1138
}
51be2bc1a820 Better tab expansion
Mikael Berthe <mikael@lilotux.net>
parents: 725
diff changeset
  1139
50
5425ee13dce6 [/trunk] Changeset 66 by mikael
mikael
parents: 47
diff changeset
  1140
void scr_WriteOutgoingMessage(const char *jidto, const char *text)
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents: 44
diff changeset
  1141
{
729
39f67cade02c Use bold font for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 728
diff changeset
  1142
  scr_WriteMessage(jidto, text, 0, HBB_PREFIX_OUT|HBB_PREFIX_HLIGHT);
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents: 44
diff changeset
  1143
  scr_ShowWindow(jidto);
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents: 44
diff changeset
  1144
}
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents: 44
diff changeset
  1145
735
2f027806cd48 Some code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 731
diff changeset
  1146
inline void set_autoaway(bool setaway)
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1147
{
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1148
  static enum imstatus oldstatus;
521
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  1149
  static char *oldmsg;
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1150
  Autoaway = setaway;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1151
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1152
  if (setaway) {
521
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  1153
    const char *msg, *prevmsg;
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1154
    oldstatus = jb_getstatus();
521
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  1155
    if (oldmsg) {
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  1156
      g_free(oldmsg);
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  1157
      oldmsg = NULL;
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  1158
    }
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  1159
    prevmsg = jb_getstatusmsg();
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1160
    msg = settings_opt_get("message_autoaway");
521
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  1161
    if (!msg)
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  1162
      msg = prevmsg;
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  1163
    if (prevmsg)
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  1164
      oldmsg = g_strdup(prevmsg);
444
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 438
diff changeset
  1165
    jb_setstatus(away, NULL, msg);
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1166
  } else {
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1167
    // Back
521
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  1168
    jb_setstatus(oldstatus, NULL, (oldmsg ? oldmsg : ""));
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  1169
    if (oldmsg) {
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  1170
      g_free(oldmsg);
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  1171
      oldmsg = NULL;
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  1172
    }
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1173
  }
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1174
}
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1175
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1176
// Check if we should enter/leave automatic away status
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1177
void scr_CheckAutoAway(bool activity)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1178
{
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1179
  static time_t LastActivity;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1180
  enum imstatus cur_st;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1181
  unsigned int autoaway_timeout = settings_opt_get_int("autoaway");
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1182
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1183
  if (Autoaway && activity) set_autoaway(FALSE);
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1184
  if (!autoaway_timeout) return;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1185
  if (!LastActivity || activity) time(&LastActivity);
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1186
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1187
  cur_st = jb_getstatus();
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1188
  // Auto-away is disabled for the following states
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1189
  if ((cur_st != available) && (cur_st != freeforchat))
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1190
    return;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1191
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1192
  if (!activity) {
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1193
    time_t now;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1194
    time(&now);
735
2f027806cd48 Some code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 731
diff changeset
  1195
    if (!Autoaway && (now > LastActivity + (time_t)autoaway_timeout))
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1196
      set_autoaway(TRUE);
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  1197
  }
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1198
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1199
328
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1200
//  set_current_buddy(newbuddy)
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1201
// Set the current_buddy to newbuddy (if not NULL)
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1202
// Lock the newbuddy, and unlock the previous current_buddy
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1203
static void set_current_buddy(GList *newbuddy)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1204
{
328
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1205
  enum imstatus prev_st = imstatus_size;
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1206
  /* prev_st initialized to imstatus_size, which is used as "undef" value.
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1207
   * We are sure prev_st will get a different status value after the
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1208
   * buddy_getstatus() call.
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1209
   */
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1210
329
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  1211
  if (!current_buddy || !newbuddy)  return;
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  1212
  if (newbuddy == current_buddy)    return;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1213
438
b44be19d6229 Handle multiple resources for the same buddy
Mikael Berthe <mikael@lilotux.net>
parents: 419
diff changeset
  1214
  prev_st = buddy_getstatus(BUDDATA(current_buddy), NULL);
328
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1215
  buddy_setflags(BUDDATA(current_buddy), ROSTER_FLAG_LOCK, FALSE);
330
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 329
diff changeset
  1216
  if (chatmode)
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 329
diff changeset
  1217
    alternate_buddy = current_buddy;
328
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1218
  current_buddy = newbuddy;
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1219
  // Lock the buddy in the buddylist if we're in chat mode
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1220
  if (chatmode)
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1221
    buddy_setflags(BUDDATA(current_buddy), ROSTER_FLAG_LOCK, TRUE);
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1222
  // We should rebuild the buddylist but not everytime
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1223
  // Here we check if we were locking a buddy who is actually offline,
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1224
  // and hide_offline_buddies is TRUE.  In which case we need to rebuild.
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1225
  if (prev_st == offline && buddylist_get_hide_offline_buddies())
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1226
    buddylist_build();
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1227
  update_roster = TRUE;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1228
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1229
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1230
//  scr_RosterTop()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1231
// Go to the first buddy in the buddylist
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1232
void scr_RosterTop(void)
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  1233
{
328
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1234
  set_current_buddy(buddylist);
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  1235
  if (chatmode)
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  1236
    scr_ShowBuddyWindow();
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  1237
}
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  1238
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1239
//  scr_RosterBottom()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1240
// Go to the last buddy in the buddylist
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1241
void scr_RosterBottom(void)
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  1242
{
328
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1243
  set_current_buddy(g_list_last(buddylist));
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  1244
  if (chatmode)
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  1245
    scr_ShowBuddyWindow();
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  1246
}
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  1247
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1248
//  scr_RosterUp()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1249
// Go to the previous buddy in the buddylist
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1250
void scr_RosterUp(void)
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1251
{
328
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1252
  set_current_buddy(g_list_previous(current_buddy));
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  1253
  if (chatmode)
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  1254
    scr_ShowBuddyWindow();
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1255
}
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1256
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1257
//  scr_RosterDown()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1258
// Go to the next buddy in the buddylist
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1259
void scr_RosterDown(void)
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1260
{
328
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1261
  set_current_buddy(g_list_next(current_buddy));
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  1262
  if (chatmode)
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  1263
    scr_ShowBuddyWindow();
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1264
}
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1265
265
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 263
diff changeset
  1266
//  scr_RosterSearch(str)
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 263
diff changeset
  1267
// Look forward for a buddy with jid/name containing str.
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 263
diff changeset
  1268
void scr_RosterSearch(char *str)
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 263
diff changeset
  1269
{
328
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1270
  set_current_buddy(buddy_search(str));
265
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 263
diff changeset
  1271
  if (chatmode)
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 263
diff changeset
  1272
    scr_ShowBuddyWindow();
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 263
diff changeset
  1273
}
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 263
diff changeset
  1274
480
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  1275
//  scr_RosterJumpJid(jid)
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  1276
// Jump to buddy jid.
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  1277
// NOTE: With this function, the buddy is added to the roster if doesn't exist.
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  1278
void scr_RosterJumpJid(char *barejid)
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  1279
{
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  1280
  GSList *roster_elt;
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  1281
  // Look for an existing buddy
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  1282
  roster_elt = roster_find(barejid, jidsearch,
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  1283
                 ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_ROOM);
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  1284
  // Create it if necessary
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  1285
  if (!roster_elt)
603
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 602
diff changeset
  1286
    roster_elt = roster_add_user(barejid, NULL, NULL, ROSTER_TYPE_USER,
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 602
diff changeset
  1287
                                 sub_none);
480
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  1288
  // Set a lock to see it in the buddylist
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  1289
  buddy_setflags(BUDDATA(roster_elt), ROSTER_FLAG_LOCK, TRUE);
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  1290
  buddylist_build();
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  1291
  // Jump to the buddy
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  1292
  set_current_buddy(buddy_search_jid(barejid));
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  1293
  if (chatmode)
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  1294
    scr_ShowBuddyWindow();
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  1295
}
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  1296
236
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
  1297
//  scr_RosterUnreadMessage(next)
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
  1298
// Go to a new message.  If next is not null, try to go to the next new
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
  1299
// message.  If it is not possible or if next is NULL, go to the first new
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
  1300
// message from unread_list.
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
  1301
void scr_RosterUnreadMessage(int next)
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
  1302
{
329
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  1303
  gpointer unread_ptr;
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  1304
  gpointer refbuddata;
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  1305
  gpointer ngroup;
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  1306
  GList *nbuddy;
236
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
  1307
329
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  1308
  if (!current_buddy) return;
236
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
  1309
329
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  1310
  if (next) refbuddata = BUDDATA(current_buddy);
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  1311
  else      refbuddata = NULL;
236
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
  1312
329
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  1313
  unread_ptr = unread_msg(refbuddata);
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  1314
  if (!unread_ptr) return;
236
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
  1315
329
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  1316
  // If buddy is in a folded group, we need to expand it
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  1317
  ngroup = buddy_getgroup(unread_ptr);
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  1318
  if (buddy_getflags(ngroup) & ROSTER_FLAG_HIDE) {
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  1319
    buddy_setflags(ngroup, ROSTER_FLAG_HIDE, FALSE);
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  1320
    buddylist_build();
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  1321
  }
236
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
  1322
329
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  1323
  nbuddy = g_list_find(buddylist, unread_ptr);
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  1324
  if (nbuddy) {
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  1325
    set_current_buddy(nbuddy);
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  1326
    if (chatmode) scr_ShowBuddyWindow();
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
  1327
  } else
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
  1328
    scr_LogPrint(LPRINT_LOGNORM, "Error: nbuddy == NULL"); // should not happen
236
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
  1329
}
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
  1330
330
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 329
diff changeset
  1331
//  scr_RosterJumpAlternate()
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 329
diff changeset
  1332
// Try to jump to alternate (== previous) buddy
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 329
diff changeset
  1333
void scr_RosterJumpAlternate(void)
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1334
{
330
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 329
diff changeset
  1335
  if (!alternate_buddy || g_list_position(buddylist, alternate_buddy) == -1)
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 329
diff changeset
  1336
    return;
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 329
diff changeset
  1337
  set_current_buddy(alternate_buddy);
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 329
diff changeset
  1338
  if (chatmode)
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 329
diff changeset
  1339
    scr_ShowBuddyWindow();
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 329
diff changeset
  1340
}
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 329
diff changeset
  1341
369
499170ed71c9 Rename some buffer commands, for homogeneity
Mikael Berthe <mikael@lilotux.net>
parents: 365
diff changeset
  1342
//  scr_BufferScrollUpDown()
508
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  1343
// Scroll up/down the current buddy window,
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  1344
// - half a screen if nblines is 0,
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  1345
// - up if updown == -1, down if updown == 1
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  1346
void scr_BufferScrollUpDown(int updown, unsigned int nblines)
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1347
{
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
  1348
  winbuf *win_entry;
508
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  1349
  int n, nbl;
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1350
  GList *hbuf_top;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1351
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1352
  // Get win_entry
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1353
  if (!current_buddy) return;
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1354
  win_entry  = scr_SearchWindow(CURRENT_JID);
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1355
  if (!win_entry) return;
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1356
508
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  1357
  if (!nblines) {
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  1358
    // Scroll half a screen (or less)
512
1744664332cd Fix "/buffer up"
Mikael Berthe <mikael@lilotux.net>
parents: 508
diff changeset
  1359
    nbl = CHAT_WIN_HEIGHT/2;
508
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  1360
  } else {
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  1361
    nbl = nblines;
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  1362
  }
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1363
  hbuf_top = win_entry->top;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1364
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1365
  if (updown == -1) {   // UP
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1366
    if (!hbuf_top) {
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1367
      hbuf_top = g_list_last(win_entry->hbuf);
512
1744664332cd Fix "/buffer up"
Mikael Berthe <mikael@lilotux.net>
parents: 508
diff changeset
  1368
      if (!win_entry->cleared) {
1744664332cd Fix "/buffer up"
Mikael Berthe <mikael@lilotux.net>
parents: 508
diff changeset
  1369
        if (!nblines) nbl = nbl*3 - 1;
1744664332cd Fix "/buffer up"
Mikael Berthe <mikael@lilotux.net>
parents: 508
diff changeset
  1370
        else nbl += CHAT_WIN_HEIGHT - 1;
1744664332cd Fix "/buffer up"
Mikael Berthe <mikael@lilotux.net>
parents: 508
diff changeset
  1371
      } else {
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1372
        win_entry->cleared = FALSE;
512
1744664332cd Fix "/buffer up"
Mikael Berthe <mikael@lilotux.net>
parents: 508
diff changeset
  1373
      }
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1374
    }
508
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  1375
    for (n=0 ; hbuf_top && n < nbl && g_list_previous(hbuf_top) ; n++)
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1376
      hbuf_top = g_list_previous(hbuf_top);
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1377
    win_entry->top = hbuf_top;
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1378
  } else {              // DOWN
508
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  1379
    for (n=0 ; hbuf_top && n < nbl ; n++)
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1380
      hbuf_top = g_list_next(hbuf_top);
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1381
    win_entry->top = hbuf_top;
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1382
    // Check if we are at the bottom
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1383
    for (n=0 ; hbuf_top && n < CHAT_WIN_HEIGHT-1 ; n++)
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1384
      hbuf_top = g_list_next(hbuf_top);
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1385
    if (!hbuf_top)
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1386
      win_entry->top = NULL; // End reached
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1387
  }
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1388
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1389
  // Refresh the window
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1390
  scr_UpdateWindow(win_entry);
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1391
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1392
  // Finished :)
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1393
  update_panels();
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1394
  doupdate();
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1395
}
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1396
369
499170ed71c9 Rename some buffer commands, for homogeneity
Mikael Berthe <mikael@lilotux.net>
parents: 365
diff changeset
  1397
//  scr_BufferClear()
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1398
// Clear the current buddy window (used for the /clear command)
369
499170ed71c9 Rename some buffer commands, for homogeneity
Mikael Berthe <mikael@lilotux.net>
parents: 365
diff changeset
  1399
void scr_BufferClear(void)
108
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  1400
{
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
  1401
  winbuf *win_entry;
108
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  1402
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  1403
  // Get win_entry
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1404
  if (!current_buddy) return;
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
  1405
  win_entry = scr_SearchWindow(CURRENT_JID);
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1406
  if (!win_entry) return;
108
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  1407
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  1408
  win_entry->cleared = TRUE;
109
96d239239c7a [/trunk] Changeset 123 by mikael
mikael
parents: 108
diff changeset
  1409
  win_entry->top = NULL;
108
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  1410
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  1411
  // Refresh the window
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  1412
  scr_UpdateWindow(win_entry);
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  1413
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  1414
  // Finished :)
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  1415
  update_panels();
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  1416
  doupdate();
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  1417
}
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  1418
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1419
//  scr_BufferTopBottom()
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1420
// Jump to the head/tail of the current buddy window
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1421
// (top if topbottom == -1, bottom topbottom == 1)
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1422
void scr_BufferTopBottom(int topbottom)
187
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  1423
{
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
  1424
  winbuf *win_entry;
187
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  1425
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  1426
  // Get win_entry
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  1427
  if (!current_buddy) return;
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
  1428
  win_entry = scr_SearchWindow(CURRENT_JID);
187
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  1429
  if (!win_entry) return;
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  1430
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  1431
  win_entry->cleared = FALSE;
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1432
  if (topbottom == 1)
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1433
    win_entry->top = NULL;
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1434
  else
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  1435
    win_entry->top = g_list_first(win_entry->hbuf);
187
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  1436
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  1437
  // Refresh the window
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  1438
  scr_UpdateWindow(win_entry);
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  1439
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  1440
  // Finished :)
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  1441
  update_panels();
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  1442
  doupdate();
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  1443
}
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  1444
370
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1445
//  scr_BufferSearch(direction, text)
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1446
// Jump to the next line containing text
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1447
// (backward search if direction == -1, forward if topbottom == 1)
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1448
void scr_BufferSearch(int direction, const char *text)
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1449
{
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
  1450
  winbuf *win_entry;
370
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1451
  GList *current_line, *search_res;
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1452
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1453
  // Get win_entry
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1454
  if (!current_buddy) return;
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
  1455
  win_entry = scr_SearchWindow(CURRENT_JID);
370
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1456
  if (!win_entry) return;
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1457
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1458
  if (win_entry->top)
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1459
    current_line = win_entry->top;
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1460
  else
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1461
    current_line = g_list_last(win_entry->hbuf);
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1462
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1463
  search_res = hbuf_search(current_line, direction, text);
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1464
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1465
  if (search_res) {
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1466
    win_entry->cleared = FALSE;
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1467
    win_entry->top = search_res;
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1468
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1469
    // Refresh the window
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1470
    scr_UpdateWindow(win_entry);
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1471
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1472
    // Finished :)
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1473
    update_panels();
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1474
    doupdate();
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1475
  } else
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
  1476
    scr_LogPrint(LPRINT_NORMAL, "Search string not found");
370
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1477
}
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  1478
462
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1479
//  scr_BufferPercent(n)
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1480
// Jump to the specified position in the buffer, in %
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1481
void scr_BufferPercent(int pc)
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1482
{
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
  1483
  winbuf *win_entry;
462
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1484
  GList *search_res;
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1485
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1486
  // Get win_entry
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1487
  if (!current_buddy) return;
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
  1488
  win_entry = scr_SearchWindow(CURRENT_JID);
462
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1489
  if (!win_entry) return;
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1490
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1491
  if (pc < 0 || pc > 100) {
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1492
    scr_LogPrint(LPRINT_NORMAL, "Bad % value");
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1493
    return;
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1494
  }
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1495
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1496
  search_res = hbuf_jump_percent(win_entry->hbuf, pc);
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1497
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1498
  win_entry->cleared = FALSE;
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1499
  win_entry->top = search_res;
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1500
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1501
  // Refresh the window
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1502
  scr_UpdateWindow(win_entry);
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1503
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1504
  // Finished :)
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1505
  update_panels();
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1506
  doupdate();
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1507
}
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  1508
464
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  1509
//  scr_BufferDate(t)
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  1510
// Jump to the first line after date t in the buffer
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  1511
// t is a date in seconds since `00:00:00 1970-01-01 UTC'
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  1512
void scr_BufferDate(time_t t)
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  1513
{
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
  1514
  winbuf *win_entry;
464
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  1515
  GList *search_res;
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  1516
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  1517
  // Get win_entry
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  1518
  if (!current_buddy) return;
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
  1519
  win_entry = scr_SearchWindow(CURRENT_JID);
464
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  1520
  if (!win_entry) return;
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  1521
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  1522
  search_res = hbuf_jump_date(win_entry->hbuf, t);
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  1523
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  1524
  win_entry->cleared = FALSE;
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  1525
  win_entry->top = search_res;
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  1526
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  1527
  // Refresh the window
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  1528
  scr_UpdateWindow(win_entry);
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  1529
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  1530
  // Finished :)
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  1531
  update_panels();
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  1532
  doupdate();
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  1533
}
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  1534
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1535
//  scr_set_chatmode()
261
259ed1de5bdc Fix spelling mistakes in comments
mikael@frmp8452
parents: 260
diff changeset
  1536
// Public function to (un)set chatmode...
129
03be1cc94560 [/trunk] Changeset 142 by mikael
mikael
parents: 126
diff changeset
  1537
inline void scr_set_chatmode(int enable)
03be1cc94560 [/trunk] Changeset 142 by mikael
mikael
parents: 126
diff changeset
  1538
{
03be1cc94560 [/trunk] Changeset 142 by mikael
mikael
parents: 126
diff changeset
  1539
  chatmode = enable;
721
9cf31c9b1dc4 Use room topic as a description in the chat status line
Mikael Berthe <mikael@lilotux.net>
parents: 720
diff changeset
  1540
  scr_UpdateChatStatus(TRUE);
129
03be1cc94560 [/trunk] Changeset 142 by mikael
mikael
parents: 126
diff changeset
  1541
}
03be1cc94560 [/trunk] Changeset 142 by mikael
mikael
parents: 126
diff changeset
  1542
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1543
//  scr_get_multimode()
261
259ed1de5bdc Fix spelling mistakes in comments
mikael@frmp8452
parents: 260
diff changeset
  1544
// Public function to get multimode status...
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1545
inline int scr_get_multimode()
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1546
{
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1547
  return multimode;
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1548
}
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1549
654
d7fe7b88e4fc MUC: Set the new_message flag when joining a room
Mikael Berthe <mikael@lilotux.net>
parents: 652
diff changeset
  1550
//  scr_setmsgflag_if_needed(jid)
d7fe7b88e4fc MUC: Set the new_message flag when joining a room
Mikael Berthe <mikael@lilotux.net>
parents: 652
diff changeset
  1551
// Set the message flag unless we're already in the jid buffer window
d7fe7b88e4fc MUC: Set the new_message flag when joining a room
Mikael Berthe <mikael@lilotux.net>
parents: 652
diff changeset
  1552
void scr_setmsgflag_if_needed(const char *jid)
d7fe7b88e4fc MUC: Set the new_message flag when joining a room
Mikael Berthe <mikael@lilotux.net>
parents: 652
diff changeset
  1553
{
667
86bc3295a4db Fix segfault in scr_setmsgflag_if_needed()
Mikael Berthe <mikael@lilotux.net>
parents: 658
diff changeset
  1554
  const char *current_jid;
86bc3295a4db Fix segfault in scr_setmsgflag_if_needed()
Mikael Berthe <mikael@lilotux.net>
parents: 658
diff changeset
  1555
86bc3295a4db Fix segfault in scr_setmsgflag_if_needed()
Mikael Berthe <mikael@lilotux.net>
parents: 658
diff changeset
  1556
  if (current_buddy)
86bc3295a4db Fix segfault in scr_setmsgflag_if_needed()
Mikael Berthe <mikael@lilotux.net>
parents: 658
diff changeset
  1557
    current_jid = buddy_getjid(BUDDATA(current_buddy));
86bc3295a4db Fix segfault in scr_setmsgflag_if_needed()
Mikael Berthe <mikael@lilotux.net>
parents: 658
diff changeset
  1558
  else
86bc3295a4db Fix segfault in scr_setmsgflag_if_needed()
Mikael Berthe <mikael@lilotux.net>
parents: 658
diff changeset
  1559
    current_jid = NULL;
86bc3295a4db Fix segfault in scr_setmsgflag_if_needed()
Mikael Berthe <mikael@lilotux.net>
parents: 658
diff changeset
  1560
  if (!chatmode || !current_jid || strcmp(jid, current_jid))
654
d7fe7b88e4fc MUC: Set the new_message flag when joining a room
Mikael Berthe <mikael@lilotux.net>
parents: 652
diff changeset
  1561
    roster_msg_setflag(jid, TRUE);
d7fe7b88e4fc MUC: Set the new_message flag when joining a room
Mikael Berthe <mikael@lilotux.net>
parents: 652
diff changeset
  1562
}
d7fe7b88e4fc MUC: Set the new_message flag when joining a room
Mikael Berthe <mikael@lilotux.net>
parents: 652
diff changeset
  1563
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1564
//  scr_set_multimode()
261
259ed1de5bdc Fix spelling mistakes in comments
mikael@frmp8452
parents: 260
diff changeset
  1565
// Public function to (un)set multimode...
260
33e1a05864a6 Add "verbatim multi-line" mode, with commands disabled
mikael@frmp8452
parents: 252
diff changeset
  1566
// Convention:
33e1a05864a6 Add "verbatim multi-line" mode, with commands disabled
mikael@frmp8452
parents: 252
diff changeset
  1567
//  0 = disabled / 1 = multimode / 2 = multimode verbatim (commands disabled)
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  1568
inline void scr_set_multimode(int enable, char *subject)
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1569
{
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  1570
  g_free(multiline);
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  1571
  multiline = NULL;
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  1572
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  1573
  g_free(multimode_subj);
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  1574
  if (enable && subject)
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  1575
    multimode_subj = g_strdup(subject);
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  1576
  else
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  1577
    multimode_subj = NULL;
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  1578
260
33e1a05864a6 Add "verbatim multi-line" mode, with commands disabled
mikael@frmp8452
parents: 252
diff changeset
  1579
  multimode = enable;
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1580
}
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1581
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1582
//  scr_get_multiline()
261
259ed1de5bdc Fix spelling mistakes in comments
mikael@frmp8452
parents: 260
diff changeset
  1583
// Public function to get the current multi-line.
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  1584
inline const char *scr_get_multiline(void)
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1585
{
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1586
  if (multimode && multiline)
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1587
    return multiline;
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  1588
  return NULL;
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  1589
}
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  1590
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  1591
//  scr_get_multimode_subj()
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  1592
// Public function to get the multi-line subject, if any.
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  1593
inline const char *scr_get_multimode_subj(void)
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  1594
{
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  1595
  if (multimode)
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  1596
    return multimode_subj;
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  1597
  return NULL;
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1598
}
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1599
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1600
//  scr_append_multiline(line)
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1601
// Public function to append a line to the current multi-line message.
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1602
// Skip empty leading lines.
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1603
void scr_append_multiline(const char *line)
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1604
{
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1605
  static int num;
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1606
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1607
  if (!multimode) {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
  1608
    scr_LogPrint(LPRINT_NORMAL, "Error: Not in multi-line message mode!");
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1609
    return;
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1610
  }
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1611
  if (multiline) {
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1612
    int len = strlen(multiline)+strlen(line)+2;
252
cb7f944741e4 [/trunk] Changeset 265 by mikael
mikael
parents: 238
diff changeset
  1613
    if (len >= HBB_BLOCKSIZE - 1) {
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1614
      // We don't handle single messages with size > HBB_BLOCKSIZE
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1615
      // (see hbuf)
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
  1616
      scr_LogPrint(LPRINT_NORMAL, "Your multi-line message is too big, "
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
  1617
                   "this line has not been added.");
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
  1618
      scr_LogPrint(LPRINT_NORMAL, "Please send this part now...");
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1619
      return;
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1620
    }
276
627925d885de Limit the number of lines in multi-line messages
Mikael Berthe <mikael@lilotux.net>
parents: 271
diff changeset
  1621
    if (num >= MULTILINE_MAX_LINE_NUMBER) {
627925d885de Limit the number of lines in multi-line messages
Mikael Berthe <mikael@lilotux.net>
parents: 271
diff changeset
  1622
      // We don't allow too many lines; however the maximum is arbitrary
627925d885de Limit the number of lines in multi-line messages
Mikael Berthe <mikael@lilotux.net>
parents: 271
diff changeset
  1623
      // (It should be < 1000 yet)
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
  1624
      scr_LogPrint(LPRINT_NORMAL, "Your message has too many lines, "
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
  1625
                   "this one has not been added.");
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
  1626
      scr_LogPrint(LPRINT_NORMAL, "Please send this part now...");
276
627925d885de Limit the number of lines in multi-line messages
Mikael Berthe <mikael@lilotux.net>
parents: 271
diff changeset
  1627
      return;
627925d885de Limit the number of lines in multi-line messages
Mikael Berthe <mikael@lilotux.net>
parents: 271
diff changeset
  1628
    }
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1629
    multiline = g_renew(char, multiline, len);
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1630
    strcat(multiline, "\n");
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1631
    strcat(multiline, line);
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1632
    num++;
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1633
  } else {
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1634
    // First message line (we skip leading empty lines)
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1635
    num = 0;
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1636
    if (line[0]) {
419
2f9852610cf4 Small code review
Mikael Berthe <mikael@lilotux.net>
parents: 412
diff changeset
  1637
      multiline = g_strdup(line);
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1638
      num++;
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1639
    } else
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1640
      return;
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1641
  }
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 771
diff changeset
  1642
  scr_LogPrint(LPRINT_NORMAL|LPRINT_NOTUTF8,
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 771
diff changeset
  1643
               "Multi-line mode: line #%d added  [%.25s...", num, line);
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1644
}
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  1645
173
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1646
//  scr_cmdhisto_addline()
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1647
// Add a line to the inputLine history
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1648
inline void scr_cmdhisto_addline(char *line)
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1649
{
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1650
  if (!line || !*line) return;
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1651
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1652
  cmdhisto = g_list_append(cmdhisto, g_strdup(line));
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1653
}
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1654
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1655
//  scr_cmdhisto_prev()
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1656
// Look for previous line beginning w/ the given mask in the inputLine history
175
7b7dd6d69f58 [/trunk] Changeset 187 by mikael
mikael
parents: 174
diff changeset
  1657
// Returns NULL if none found
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 332
diff changeset
  1658
static const char *scr_cmdhisto_prev(char *mask, guint len)
173
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1659
{
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1660
  GList *hl;
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1661
  if (!cmdhisto_cur) {
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1662
    hl = g_list_last(cmdhisto);
174
6354625e8fb2 [/trunk] Changeset 186 by mikael
mikael
parents: 173
diff changeset
  1663
    if (hl) { // backup current line
6354625e8fb2 [/trunk] Changeset 186 by mikael
mikael
parents: 173
diff changeset
  1664
      strncpy(cmdhisto_backup, mask, INPUTLINE_LENGTH);
6354625e8fb2 [/trunk] Changeset 186 by mikael
mikael
parents: 173
diff changeset
  1665
    }
173
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1666
  } else {
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1667
    hl = g_list_previous(cmdhisto_cur);
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1668
  }
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1669
  while (hl) {
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1670
    if (!strncmp((char*)hl->data, mask, len)) {
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1671
      // Found a match
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1672
      cmdhisto_cur = hl;
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1673
      return (const char*)hl->data;
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1674
    }
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1675
    hl = g_list_previous(hl);
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1676
  }
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1677
  return NULL;
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1678
}
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1679
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1680
//  scr_cmdhisto_next()
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1681
// Look for next line beginning w/ the given mask in the inputLine history
175
7b7dd6d69f58 [/trunk] Changeset 187 by mikael
mikael
parents: 174
diff changeset
  1682
// Returns NULL if none found
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 332
diff changeset
  1683
static const char *scr_cmdhisto_next(char *mask, guint len)
173
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1684
{
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1685
  GList *hl;
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1686
  if (!cmdhisto_cur) return NULL;
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1687
  hl = cmdhisto_cur;
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1688
  while ((hl = g_list_next(hl)) != NULL)
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1689
    if (!strncmp((char*)hl->data, mask, len)) {
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1690
      // Found a match
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1691
      cmdhisto_cur = hl;
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1692
      return (const char*)hl->data;
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1693
    }
175
7b7dd6d69f58 [/trunk] Changeset 187 by mikael
mikael
parents: 174
diff changeset
  1694
  // If the "backuped" line matches, we'll use it
7b7dd6d69f58 [/trunk] Changeset 187 by mikael
mikael
parents: 174
diff changeset
  1695
  if (strncmp(cmdhisto_backup, mask, len)) return NULL; // No match
174
6354625e8fb2 [/trunk] Changeset 186 by mikael
mikael
parents: 173
diff changeset
  1696
  cmdhisto_cur = NULL;
6354625e8fb2 [/trunk] Changeset 186 by mikael
mikael
parents: 173
diff changeset
  1697
  return cmdhisto_backup;
173
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1698
}
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  1699
195
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1700
//  readline_transpose_chars()
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1701
// Drag  the  character  before point forward over the character at
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1702
// point, moving point forward as well.  If point is at the end  of
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1703
// the  line, then this transposes the two characters before point.
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1704
void readline_transpose_chars()
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1705
{
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1706
  char swp;
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1707
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1708
  if (ptr_inputline == inputLine) return;
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1709
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1710
  if (!*ptr_inputline) { // We're at EOL
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1711
    // If line is only 1 char long, nothing to do...
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1712
    if (ptr_inputline == inputLine+1) return;
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1713
    // Transpose the two previous characters
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1714
    swp = *(ptr_inputline-2);
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1715
    *(ptr_inputline-2) = *(ptr_inputline-1);
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1716
    *(ptr_inputline-1) = swp;
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1717
  } else {
196
58eb8ad9ef74 [/trunk] Changeset 208 by mikael
mikael
parents: 195
diff changeset
  1718
    // Swap the two characters before the cursor and move right.
195
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1719
    swp = *(ptr_inputline-1);
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1720
    *(ptr_inputline-1) = *ptr_inputline;
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1721
    *ptr_inputline++ = swp;
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1722
    check_offset(1);
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1723
  }
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1724
}
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1725
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1726
//  readline_backward_kill_word()
194
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  1727
// Kill the word before the cursor, in input line
195
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1728
void readline_backward_kill_word()
194
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  1729
{
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  1730
  char *c, *old = ptr_inputline;
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  1731
  int spaceallowed = 1;
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  1732
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  1733
  if (ptr_inputline == inputLine) return;
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  1734
759
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1735
  for (c = ptr_inputline-1 ; c > inputLine ; c--) {
194
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  1736
    if (!isalnum(*c)) {
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  1737
      if (*c == ' ')
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  1738
        if (!spaceallowed) break;
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  1739
    } else spaceallowed = 0;
759
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1740
  }
194
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  1741
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  1742
  if (c != inputLine || *c != ' ')
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  1743
    if ((c < ptr_inputline-1) && (!isalnum(*c)))
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  1744
      c++;
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  1745
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  1746
  // Modify the line
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  1747
  ptr_inputline = c;
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  1748
  for (;;) {
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  1749
    *c = *old++;
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  1750
    if (!*c++) break;
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  1751
  }
195
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  1752
  check_offset(-1);
194
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  1753
}
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  1754
759
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1755
//  readline_backward_word()
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1756
// Move  back  to the start of the current or previous word
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1757
void readline_backward_word()
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1758
{
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1759
  char *old_ptr_inputLine = ptr_inputline;
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1760
  int spaceallowed = 1;
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1761
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1762
  if (ptr_inputline == inputLine) return;
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1763
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1764
  for (ptr_inputline-- ; ptr_inputline > inputLine ; ptr_inputline--) {
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1765
    if (!isalnum(*ptr_inputline)) {
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1766
      if (*ptr_inputline == ' ')
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1767
        if (!spaceallowed) break;
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1768
    } else spaceallowed = 0;
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1769
  }
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1770
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1771
  if (ptr_inputline < old_ptr_inputLine-1
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1772
      && *ptr_inputline == ' ' && *(ptr_inputline+1) != ' ')
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1773
    ptr_inputline++;
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1774
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1775
  check_offset(-1);
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1776
}
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1777
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1778
//  readline_forward_word()
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1779
// Move forward to the end of the next word
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1780
void readline_forward_word()
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1781
{
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1782
  int spaceallowed = 1;
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1783
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1784
  while (*ptr_inputline) {
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1785
    ptr_inputline++;
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1786
    if (!isalnum(*ptr_inputline)) {
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1787
      if (*ptr_inputline == ' ')
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1788
        if (!spaceallowed) break;
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1789
    } else spaceallowed = 0;
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1790
  }
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1791
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1792
  check_offset(1);
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1793
}
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  1794
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1795
//  which_row()
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1796
// Tells which row our cursor is in, in the command line.
503
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  1797
// -2 -> normal text
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  1798
// -1 -> room: nickname completion
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1799
//  0 -> command
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1800
//  1 -> parameter 1 (etc.)
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
  1801
//  If > 0, then *p_row is set to the beginning of the row
503
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  1802
static int which_row(const char **p_row)
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1803
{
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1804
  int row = -1;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1805
  char *p;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1806
  int quote = FALSE;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1807
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1808
  // Not a command?
503
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  1809
  if ((ptr_inputline == inputLine) || (inputLine[0] != '/')) {
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  1810
    if (!current_buddy) return -2;
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  1811
    if (buddy_gettype(BUDDATA(current_buddy)) == ROSTER_TYPE_ROOM) {
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  1812
      *p_row = inputLine;
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  1813
      return -1;
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  1814
    }
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  1815
    return -2;
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  1816
  }
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1817
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1818
  // This is a command
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1819
  row = 0;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1820
  for (p = inputLine ; p < ptr_inputline ; p++) {
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1821
    if (quote) {
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1822
      if (*p == '"' && *(p-1) != '\\')
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1823
        quote = FALSE;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1824
      continue;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1825
    }
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1826
    if (*p == '"' && *(p-1) != '\\') {
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1827
      quote = TRUE;
121
94b251102069 [/trunk] Changeset 134 by mikael
mikael
parents: 120
diff changeset
  1828
    } else if (*p == ' ') {
94b251102069 [/trunk] Changeset 134 by mikael
mikael
parents: 120
diff changeset
  1829
      if (*(p-1) != ' ')
94b251102069 [/trunk] Changeset 134 by mikael
mikael
parents: 120
diff changeset
  1830
        row++;
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
  1831
      *p_row = p+1;
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
  1832
    }
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1833
  }
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1834
  return row;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1835
}
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1836
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1837
//  scr_insert_text()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1838
// Insert the given text at the current cursor position.
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1839
// The cursor is moved.  We don't check if the cursor still is in the screen
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1840
// after, the caller should do that.
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 332
diff changeset
  1841
static void scr_insert_text(const char *text)
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1842
{
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1843
  char tmpLine[INPUTLINE_LENGTH+1];
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1844
  int len = strlen(text);
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1845
  // Check the line isn't too long
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1846
  if (strlen(inputLine) + len >= INPUTLINE_LENGTH) {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
  1847
    scr_LogPrint(LPRINT_LOGNORM, "Cannot insert text, line too long.");
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1848
    return;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1849
  }
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1850
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1851
  strcpy(tmpLine, ptr_inputline);
419
2f9852610cf4 Small code review
Mikael Berthe <mikael@lilotux.net>
parents: 412
diff changeset
  1852
  strcpy(ptr_inputline, text);
2f9852610cf4 Small code review
Mikael Berthe <mikael@lilotux.net>
parents: 412
diff changeset
  1853
  ptr_inputline += len;
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1854
  strcpy(ptr_inputline, tmpLine);
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1855
}
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1856
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1857
//  scr_handle_tab()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1858
// Function called when tab is pressed.
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1859
// Initiate or continue a completion...
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 332
diff changeset
  1860
static void scr_handle_tab(void)
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1861
{
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
  1862
  int nrow;
503
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  1863
  const char *row;
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
  1864
  const char *cchar;
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1865
  guint compl_categ;
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1866
740
1877838d3c27 Kill two gcc warnings
Mikael Berthe <mikael@lilotux.net>
parents: 739
diff changeset
  1867
  row = inputLine; // (Kills a GCC warning)
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
  1868
  nrow = which_row(&row);
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1869
503
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  1870
  // a) No completion if no leading slash ('cause not a command),
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  1871
  //    unless this is a room (then, it is a nickname completion)
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1872
  // b) We can't have more than 2 parameters (we use 2 flags)
503
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  1873
  if ((nrow == -2) || (nrow == 3 && !completion_started) || nrow > 3)
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  1874
    return;
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
  1875
503
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  1876
  if (nrow == 0) {          // Command completion
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1877
    row = &inputLine[1];
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1878
    compl_categ = COMPL_CMD;
503
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  1879
  } else if (nrow == -1) {  // Nickname completion
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  1880
    compl_categ = COMPL_RESOURCE;
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  1881
  } else {                  // Other completion, depending on the command
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  1882
    int alias = FALSE;
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  1883
    cmd *com;
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  1884
    char *xpline = expandalias(inputLine);
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  1885
    com = cmd_get(xpline);
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  1886
    if (xpline != inputLine) {
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  1887
      // This is an alias, so we can't complete rows > 0
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  1888
      alias = TRUE;
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  1889
      g_free(xpline);
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  1890
    }
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  1891
    if ((!com && (!alias || !completion_started)) || !row) {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
  1892
      scr_LogPrint(LPRINT_NORMAL, "I cannot complete that...");
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1893
      return;
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1894
    }
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  1895
    if (!alias)
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  1896
      compl_categ = com->completion_flags[nrow-1];
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  1897
    else
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  1898
      compl_categ = 0;
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1899
  }
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1900
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1901
  if (!completion_started) {
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1902
    GSList *list = compl_get_category_list(compl_categ);
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1903
    if (list) {
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1904
      char *prefix = g_strndup(row, ptr_inputline-row);
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1905
      // Init completion
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1906
      new_completion(prefix, list);
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1907
      g_free(prefix);
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1908
      // Now complete
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1909
      cchar = complete();
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1910
      if (cchar)
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1911
        scr_insert_text(cchar);
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1912
      completion_started = TRUE;
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1913
    }
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1914
  } else {      // Completion already initialized
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1915
    char *c;
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1916
    guint back = cancel_completion();
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1917
    // Remove $back chars
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1918
    ptr_inputline -= back;
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1919
    c = ptr_inputline;
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1920
    for ( ; *c ; c++)
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1921
      *c = *(c+back);
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1922
    // Now complete again
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1923
    cchar = complete();
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1924
    if (cchar)
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  1925
      scr_insert_text(cchar);
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
  1926
  }
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1927
}
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1928
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 332
diff changeset
  1929
static void scr_cancel_current_completion(void)
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1930
{
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1931
  char *c;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1932
  guint back = cancel_completion();
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1933
  // Remove $back chars
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1934
  ptr_inputline -= back;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1935
  c = ptr_inputline;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1936
  for ( ; *c ; c++)
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1937
    *c = *(c+back);
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1938
}
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1939
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 332
diff changeset
  1940
static void scr_end_current_completion(void)
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1941
{
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1942
  done_completion();
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1943
  completion_started = FALSE;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1944
}
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  1945
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1946
//  check_offset(int direction)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1947
// Check inputline_offset value, and make sure the cursor is inside the
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1948
// screen.
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 332
diff changeset
  1949
static inline void check_offset(int direction)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1950
{
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1951
  // Left side
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1952
  if (inputline_offset && direction <= 0) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1953
    while (ptr_inputline <= (char*)&inputLine + inputline_offset) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1954
      if (inputline_offset) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1955
        inputline_offset -= 5;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1956
        if (inputline_offset < 0)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1957
          inputline_offset = 0;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1958
      }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1959
    }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1960
  }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1961
  // Right side
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1962
  if (direction >= 0) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1963
    while (ptr_inputline >= inputline_offset + (char*)&inputLine + maxX)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1964
      inputline_offset += 5;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1965
  }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1966
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1967
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 332
diff changeset
  1968
static inline void refresh_inputline(void)
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  1969
{
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  1970
  mvwprintw(inputWnd, 0,0, "%s", inputLine + inputline_offset);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  1971
  wclrtoeol(inputWnd);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  1972
  if (*ptr_inputline)
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  1973
    wmove(inputWnd, 0, ptr_inputline - (char*)&inputLine - inputline_offset);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  1974
}
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  1975
389
6e895f397474 Ncurses changes + Ctrl-C does not send a signal anylore
Mikael Berthe <mikael@lilotux.net>
parents: 388
diff changeset
  1976
void scr_handle_CtrlC(void)
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  1977
{
365
ddb6593bedc9 Fix segfault when mcabber receives an INT signal (Ctrl-C) early
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
  1978
  if (!Curses) return;
315
65aa05520556 First Ctrl-C now also leaves multi-line message mode
Mikael Berthe <mikael@lilotux.net>
parents: 314
diff changeset
  1979
  // Leave multi-line mode
65aa05520556 First Ctrl-C now also leaves multi-line message mode
Mikael Berthe <mikael@lilotux.net>
parents: 314
diff changeset
  1980
  process_command("/msay abort");
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  1981
  // Same as Ctrl-g, now
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  1982
  scr_cancel_current_completion();
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  1983
  scr_end_current_completion();
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  1984
  check_offset(-1);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  1985
  refresh_inputline();
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  1986
}
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  1987
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  1988
static void add_keyseq(char *seqstr, guint mkeycode, gint value)
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  1989
{
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  1990
  keyseq *ks;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  1991
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  1992
  // Let's make sure the length is correct
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  1993
  if (strlen(seqstr) > MAX_KEYSEQ_LENGTH) {
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  1994
    scr_LogPrint(LPRINT_LOGNORM, "add_keyseq(): key sequence is too long!");
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  1995
    return;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  1996
  }
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  1997
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  1998
  ks = g_new0(keyseq, 1);
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  1999
  ks->seqstr = g_strdup(seqstr);
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2000
  ks->mkeycode = mkeycode;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2001
  ks->value = value;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2002
  keyseqlist = g_slist_append(keyseqlist, ks);
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2003
}
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2004
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2005
//  match_keyseq(iseq, &ret)
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2006
// Check if "iseq" is a known key escape sequence.
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2007
// Return value:
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2008
// -1  if "seq" matches no known sequence
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2009
//  0  if "seq" could match 1 or more known sequences
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2010
// >0  if "seq" matches a key sequence; the mkey code is returned
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2011
//     and *ret is set to the matching keyseq structure.
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2012
static inline guint match_keyseq(int *iseq, keyseq **ret)
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2013
{
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2014
  GSList *ksl;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2015
  keyseq *ksp;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2016
  char *p, c;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2017
  int *i;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2018
  int needmore = FALSE;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2019
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2020
  for (ksl = keyseqlist; ksl; ksl = g_slist_next(ksl)) {
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2021
    ksp = ksl->data;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2022
    p = ksp->seqstr;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2023
    i = iseq;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2024
    while (1) {
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2025
      c = (unsigned char)*i;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2026
      if (!*p && !c) { // Match
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2027
        (*ret) = ksp;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2028
        return ksp->mkeycode;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2029
      }
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2030
      if (!c) {
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2031
        // iseq is too short
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2032
        needmore = TRUE;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2033
        break;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2034
      } else if (!*p || c != *p) {
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2035
        // This isn't a match
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2036
        break;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2037
      }
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2038
      p++; i++;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2039
    }
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2040
  }
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2041
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2042
  if (needmore)
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2043
    return 0;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2044
  return -1;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2045
}
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2046
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2047
void scr_Getch(keycode *kcode)
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2048
{
769
15eefed5f1de Kill a gcc warning
Mikael Berthe <mikael@lilotux.net>
parents: 766
diff changeset
  2049
  keyseq *mks = NULL;
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2050
  int  ks[MAX_KEYSEQ_LENGTH+1];
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2051
  int i;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2052
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2053
  memset(kcode, 0, sizeof(keycode));
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2054
  memset(ks,  0, sizeof(ks));
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2055
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2056
  kcode->value = wgetch(inputWnd);
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2057
  if (kcode->value != 27)
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2058
    return;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2059
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2060
  // Check for escape key sequence
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2061
  for (i=0; i < MAX_KEYSEQ_LENGTH; i++) {
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2062
    int match;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2063
    ks[i] = wgetch(inputWnd);
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2064
    if (ks[i] == ERR) break;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2065
    match = match_keyseq(ks, &mks);
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2066
    if (match == -1) {
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2067
      // No such key sequence.  Let's increment i as it is a valid key.
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2068
      i++;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2069
      break;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2070
    }
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2071
    if (match > 0) {
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2072
      // We have a matching sequence
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2073
      kcode->mcode = mks->mkeycode;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2074
      kcode->value = mks->value;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2075
      return;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2076
    }
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2077
  }
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2078
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2079
  // No match.  Let's return a meta-key.
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2080
  if (i > 0) {
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2081
    kcode->mcode = MKEY_META;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2082
    kcode->value = ks[0];
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2083
  }
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2084
  if (i > 1) {
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2085
    // We need to push some keys back to the keyboard buffer
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2086
    while (i-- > 1)
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2087
      ungetch(ks[i]);
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2088
  }
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2089
  return;
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2090
}
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2091
764
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2092
static int bindcommand(keycode kcode) {
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2093
  gchar asciikey[16];
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2094
  const gchar *boundcmd;
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2095
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2096
  if (!kcode.mcode || kcode.mcode == MKEY_EQUIV)
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2097
    g_snprintf(asciikey, 15, "%d", kcode.value);
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2098
  else if (kcode.mcode == MKEY_META)
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2099
    g_snprintf(asciikey, 15, "M%d", kcode.value);
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2100
  else
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2101
    g_snprintf(asciikey, 15, "MK%d", kcode.mcode);
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2102
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2103
  boundcmd = settings_get(SETTINGS_TYPE_BINDING, asciikey);
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2104
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2105
  if (boundcmd) {
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 771
diff changeset
  2106
    gchar *cmd, *boundcmd_locale;
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 771
diff changeset
  2107
    boundcmd_locale = from_utf8(boundcmd);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 771
diff changeset
  2108
    cmd = g_strdup_printf("/%s", boundcmd_locale);
764
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2109
    scr_CheckAutoAway(TRUE);
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2110
    if (process_command(cmd))
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2111
      return 255; // Quit
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 771
diff changeset
  2112
    g_free(boundcmd_locale);
764
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2113
    g_free(cmd);
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2114
    return 0;
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2115
  }
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2116
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2117
  scr_LogPrint(LPRINT_NORMAL, "Unknown key=%s", asciikey);
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2118
  if (utf8_mode)
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2119
    scr_LogPrint(LPRINT_NORMAL, "WARNING: UTF-8 not yet supported!");
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2120
  return -1;
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2121
}
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2122
44
c10f95f959d0 [/trunk] Changeset 60 by mikael
mikael
parents: 42
diff changeset
  2123
//  process_key(key)
c10f95f959d0 [/trunk] Changeset 60 by mikael
mikael
parents: 42
diff changeset
  2124
// Handle the pressed key, in the command line (bottom).
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2125
int process_key(keycode kcode)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  2126
{
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2127
  int key = kcode.value;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2128
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2129
  switch (kcode.mcode) {
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2130
    case 0:
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2131
        break;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2132
    case MKEY_EQUIV:
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2133
        key = kcode.value;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2134
        break;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2135
    case MKEY_META:
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2136
        key = ERR;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2137
        switch (kcode.value) {
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2138
          case 27:
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2139
              key = 27;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2140
              break;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2141
          default:
764
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2142
              if (bindcommand(kcode) == 255)
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2143
                return 255;
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2144
        }
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2145
        break;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2146
    default:
764
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2147
        if (bindcommand(kcode) == 255)
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2148
          return 255;
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2149
        key = ERR; // Do not process any further
758
402b0e288433 Enable "meta" key
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
  2150
  }
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2151
758
402b0e288433 Enable "meta" key
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
  2152
  switch (key) {
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2153
    case 0:
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2154
    case ERR:
758
402b0e288433 Enable "meta" key
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
  2155
        break;
499
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2156
    case 8:     // Ctrl-h
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2157
    case 127:   // Backspace too
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2158
    case KEY_BACKSPACE:
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2159
        if (ptr_inputline != (char*)&inputLine) {
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2160
          char *c = --ptr_inputline;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2161
          for ( ; *c ; c++)
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2162
            *c = *(c+1);
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2163
          check_offset(-1);
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2164
        }
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2165
        break;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2166
    case KEY_DC:// Del
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2167
        if (*ptr_inputline)
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2168
          strcpy(ptr_inputline, ptr_inputline+1);
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2169
        break;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2170
    case KEY_LEFT:
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2171
        if (ptr_inputline != (char*)&inputLine) {
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2172
          ptr_inputline--;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2173
          check_offset(-1);
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2174
        }
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2175
        break;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2176
    case KEY_RIGHT:
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2177
        if (*ptr_inputline)
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2178
          ptr_inputline++;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2179
          check_offset(1);
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2180
        break;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2181
    case 7:     // Ctrl-g
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2182
        scr_cancel_current_completion();
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2183
        scr_end_current_completion();
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2184
        check_offset(-1);
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2185
        break;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2186
    case 9:     // Tab
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2187
        scr_handle_tab();
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2188
        check_offset(0);
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2189
        break;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2190
    case 13:    // Enter
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2191
    case 15:    // Ctrl-o ("accept-line-and-down-history")
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2192
        scr_CheckAutoAway(TRUE);
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2193
        if (process_line(inputLine))
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2194
          return 255;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2195
        // Add line to history
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2196
        scr_cmdhisto_addline(inputLine);
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2197
        // Reset the line
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2198
        ptr_inputline = inputLine;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2199
        *ptr_inputline = 0;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2200
        inputline_offset = 0;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  2201
499
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2202
        if (key == 13)            // Enter
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2203
        {
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2204
          // Reset history line pointer
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2205
          cmdhisto_cur = NULL;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2206
        } else {                  // down-history
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2207
          // Use next history line instead of a blank line
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2208
          const char *l = scr_cmdhisto_next("", 0);
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2209
          if (l) strcpy(inputLine, l);
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2210
          // Reset backup history line
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2211
          cmdhisto_backup[0] = 0;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2212
        }
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2213
        break;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2214
    case KEY_UP:
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2215
        {
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2216
          const char *l = scr_cmdhisto_prev(inputLine,
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2217
                  ptr_inputline-inputLine);
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2218
          if (l) strcpy(inputLine, l);
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2219
        }
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2220
        break;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2221
    case KEY_DOWN:
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2222
        {
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2223
          const char *l = scr_cmdhisto_next(inputLine,
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2224
                  ptr_inputline-inputLine);
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2225
          if (l) strcpy(inputLine, l);
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2226
        }
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2227
        break;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2228
    case KEY_PPAGE:
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2229
        scr_CheckAutoAway(TRUE);
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2230
        scr_RosterUp();
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2231
        break;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2232
    case KEY_NPAGE:
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2233
        scr_CheckAutoAway(TRUE);
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2234
        scr_RosterDown();
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2235
        break;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2236
    case KEY_HOME:
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2237
    case 1:
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2238
        ptr_inputline = inputLine;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2239
        inputline_offset = 0;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2240
        break;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2241
    case 3:     // Ctrl-C
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2242
        scr_handle_CtrlC();
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2243
        break;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2244
    case KEY_END:
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2245
    case 5:
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2246
        for (; *ptr_inputline; ptr_inputline++) ;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2247
        check_offset(1);
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2248
        break;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2249
    case 21:    // Ctrl-u
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2250
        strcpy(inputLine, ptr_inputline);
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2251
        ptr_inputline = inputLine;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2252
        inputline_offset = 0;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2253
        break;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2254
    case KEY_EOL:
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2255
    case 11:    // Ctrl-k
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2256
        *ptr_inputline = 0;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2257
        break;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2258
    case 16:    // Ctrl-p
508
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  2259
        scr_BufferScrollUpDown(-1, 0);
499
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2260
        break;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2261
    case 14:    // Ctrl-n
508
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  2262
        scr_BufferScrollUpDown(1, 0);
499
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2263
        break;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2264
    case 17:    // Ctrl-q
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2265
        scr_CheckAutoAway(TRUE);
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2266
        scr_RosterUnreadMessage(1); // next unread message
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2267
        break;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2268
    case 20:    // Ctrl-t
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2269
        readline_transpose_chars();
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2270
        break;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2271
    case 23:    // Ctrl-w
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2272
        readline_backward_kill_word();
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2273
        break;
759
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  2274
    case 516:   // Ctrl-Left
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  2275
        readline_backward_word();
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  2276
        break;
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  2277
    case 518:   // Ctrl-Right
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  2278
        readline_forward_word();
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  2279
        break;
499
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2280
    case 12:    // Ctrl-l
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2281
        scr_CheckAutoAway(TRUE);
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  2282
        scr_Resize();
499
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2283
        redrawwin(stdscr);
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  2284
        break;
499
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2285
    case KEY_RESIZE:
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2286
        scr_Resize();
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2287
        break;
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2288
    case 27:    // ESC
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2289
        scr_CheckAutoAway(TRUE);
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2290
        currentWindow = NULL;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2291
        chatmode = FALSE;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2292
        if (current_buddy)
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2293
          buddy_setflags(BUDDATA(current_buddy), ROSTER_FLAG_LOCK, FALSE);
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2294
        scr_RosterVisibility(1);
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2295
        scr_UpdateChatStatus(FALSE);
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2296
        top_panel(chatPanel);
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2297
        top_panel(inputPanel);
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2298
        update_panels();
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  2299
        break;
499
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2300
    default:
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2301
        if (isprint(key)) {
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2302
          char tmpLine[INPUTLINE_LENGTH+1];
263
1bcc3eec08f0 Add Ctrl-o: accept-line-and-down-history
mikael@frmp8452
parents: 261
diff changeset
  2303
499
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2304
          // Check the line isn't too long
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2305
          if (strlen(inputLine) >= INPUTLINE_LENGTH)
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2306
            return 0;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2307
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2308
          // Insert char
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2309
          strcpy(tmpLine, ptr_inputline);
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2310
          *ptr_inputline++ = key;
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2311
          strcpy(ptr_inputline, tmpLine);
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2312
          check_offset(1);
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2313
        } else {
764
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2314
          // Look for a key binding.
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2315
          if (bindcommand(kcode) == 255)
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  2316
            return 255;
499
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2317
        }
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  2318
  }
499
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  2319
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  2320
  if (completion_started && key != 9 && key != KEY_RESIZE)
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  2321
    scr_end_current_completion();
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  2322
  refresh_inputline();
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  2323
  if (!update_roster)
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  2324
    doupdate();
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  2325
  return 0;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  2326
}
576
8b3db0b555a1 Add Vim modelines
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
  2327
580
fed6d1e4d7a9 Fix modelines
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
  2328
/* vim: set expandtab cindent cinoptions=>2\:2(0:  For Vim users... */