mcabber/src/screen.c
author Mikael Berthe <mikael@lilotux.net>
Sun, 08 Feb 2009 10:08:05 +0100
changeset 1566 d64e0b2855fc
parent 1563 c1d0f906d379
child 1573 ece4f26bf9ff
permissions -rw-r--r--
Fix display of last character in the input line when Aspell support is enabled The rightmost character displayed in the input line was always the last character of the line. (Reported by isbear.)
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
 *
1414
366ef500c522 Update copyrights
Mikael Berthe <mikael@lilotux.net>
parents: 1413
diff changeset
     4
 * Copyright (C) 2005-2008 Mikael Berthe <mikael@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 <time.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    27
#include <ctype.h>
1382
1447c5296977 Fix locale charset detection on some BSD systems
Mikael Berthe <mikael@lilotux.net>
parents: 1381
diff changeset
    28
1447c5296977 Fix locale charset detection on some BSD systems
Mikael Berthe <mikael@lilotux.net>
parents: 1381
diff changeset
    29
#include <config.h>
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    30
#include <locale.h>
1292
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
    31
#include <assert.h>
1454
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1424
diff changeset
    32
#ifdef USE_SIGWINCH
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1424
diff changeset
    33
# include <sys/ioctl.h>
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1424
diff changeset
    34
# include <termios.h>
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1424
diff changeset
    35
# include <unistd.h>
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1424
diff changeset
    36
#endif
929
f4bf564893b5 Fix ncurses #include
Mikael Berthe <mikael@lilotux.net>
parents: 898
diff changeset
    37
1382
1447c5296977 Fix locale charset detection on some BSD systems
Mikael Berthe <mikael@lilotux.net>
parents: 1381
diff changeset
    38
#ifdef HAVE_LOCALCHARSET_H
1447c5296977 Fix locale charset detection on some BSD systems
Mikael Berthe <mikael@lilotux.net>
parents: 1381
diff changeset
    39
# include <localcharset.h>
1447c5296977 Fix locale charset detection on some BSD systems
Mikael Berthe <mikael@lilotux.net>
parents: 1381
diff changeset
    40
#else
1447c5296977 Fix locale charset detection on some BSD systems
Mikael Berthe <mikael@lilotux.net>
parents: 1381
diff changeset
    41
# include <langinfo.h>
1447c5296977 Fix locale charset detection on some BSD systems
Mikael Berthe <mikael@lilotux.net>
parents: 1381
diff changeset
    42
#endif
1447c5296977 Fix locale charset detection on some BSD systems
Mikael Berthe <mikael@lilotux.net>
parents: 1381
diff changeset
    43
1179
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
    44
#ifdef HAVE_ASPELL_H
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
    45
# include <aspell.h>
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
    46
#endif
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
    47
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    48
#include "screen.h"
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
    49
#include "utf8.h"
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
    50
#include "hbuf.h"
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents: 44
diff changeset
    51
#include "commands.h"
95
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 84
diff changeset
    52
#include "compl.h"
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
    53
#include "roster.h"
180
42a33611233b [/trunk] Changeset 192 by mikael
mikael
parents: 178
diff changeset
    54
#include "histolog.h"
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 276
diff changeset
    55
#include "settings.h"
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
    56
#include "utils.h"
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    57
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
    58
#define get_color(col)  (COLOR_PAIR(col)|COLOR_ATTRIB[col])
1489
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
    59
#define compose_color(col)  (COLOR_PAIR(col->color_pair)|col->color_attrib)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    60
515
180f0a6e4ac9 Log window's height can be set by the user
Mikael Berthe <mikael@lilotux.net>
parents: 514
diff changeset
    61
#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
    62
#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
    63
#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
    64
1390
753a348c65c1 LocaleCharSet is const
Mikael Berthe <mikael@lilotux.net>
parents: 1386
diff changeset
    65
const char *LocaleCharSet = "C";
592
67a332121aea Try UTF8 -> locale conversion with fallback
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
    66
515
180f0a6e4ac9 Log window's height can be set by the user
Mikael Berthe <mikael@lilotux.net>
parents: 514
diff changeset
    67
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
    68
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
    69
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 332
diff changeset
    70
static inline void check_offset(int);
1172
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
    71
static void scr_cancel_current_completion(void);
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
    72
static void scr_end_current_completion(void);
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
    73
static void scr_insert_text(const char*);
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
    74
static void scr_handle_tab(void);
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
    75
1179
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
    76
#ifdef HAVE_ASPELL_H
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
    77
static void spellcheck(char *, char *);
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
    78
#endif
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
    79
1078
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
    80
static GHashTable *winbufhash;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    81
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
    82
typedef struct {
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
    83
  GList  *hbuf;
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
    84
  GList  *top;     // If top is NULL, we'll display the last lines
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
    85
  char    cleared; // For ex, user has issued a /clear command...
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
    86
  char    lock;
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
    87
} buffdata;
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
    88
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
    89
typedef struct {
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    90
  WINDOW *win;
108
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
    91
  PANEL  *panel;
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
    92
  buffdata *bd;
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
    93
} winbuf;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    94
1078
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
    95
struct dimensions {
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
    96
  int l;
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
    97
  int c;
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
    98
};
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    99
1133
9dd28a56128f Do not create one panel per contact
Mikael Berthe <mikael@lilotux.net>
parents: 1131
diff changeset
   100
static WINDOW *rosterWnd, *chatWnd, *activechatWnd, *inputWnd, *logWnd;
711
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
   101
static WINDOW *mainstatusWnd, *chatstatusWnd;
1133
9dd28a56128f Do not create one panel per contact
Mikael Berthe <mikael@lilotux.net>
parents: 1131
diff changeset
   102
static PANEL *rosterPanel, *chatPanel, *activechatPanel, *inputPanel;
711
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
   103
static PANEL *mainstatusPanel, *chatstatusPanel;
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
   104
static PANEL *logPanel;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   105
static int maxY, maxX;
1093
6ca9a65df21f Do not rewrap buffer lines when the chat window width doesn't change
Mikael Berthe <mikael@lilotux.net>
parents: 1089
diff changeset
   106
static int prev_chatwidth;
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
   107
static winbuf *statusWindow;
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   108
static winbuf *currentWindow;
851
da03534e46c7 Add startup log messages to the status buffer
Mikael Berthe <mikael@lilotux.net>
parents: 850
diff changeset
   109
static GList  *statushbuf;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   110
707
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
   111
static int roster_hidden;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   112
static int chatmode;
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
   113
static int multimode;
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
   114
static char *multiline, *multimode_subj;
30
4ea2df449381 [/trunk] Changeset 46 by mikael
mikael
parents: 29
diff changeset
   115
int update_roster;
232
9a6ba4b38e63 [/trunk] Changeset 245 by mikael
mikael
parents: 220
diff changeset
   116
int utf8_mode = 0;
332
a1901741890e scr_LogPrint() can be called before ncurses initialization
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
   117
static bool Curses;
972
11b632d824f6 Add option 'log_win_on_top'
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
   118
static bool log_win_on_top;
973
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
   119
static bool roster_win_on_right;
939
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 936
diff changeset
   120
static time_t LastActivity;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   121
174
6354625e8fb2 [/trunk] Changeset 186 by mikael
mikael
parents: 173
diff changeset
   122
static char       inputLine[INPUTLINE_LENGTH+1];
1179
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
   123
#ifdef HAVE_ASPELL_H
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
   124
static char       maskLine[INPUTLINE_LENGTH+1];
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
   125
#endif
174
6354625e8fb2 [/trunk] Changeset 186 by mikael
mikael
parents: 173
diff changeset
   126
static char      *ptr_inputline;
6354625e8fb2 [/trunk] Changeset 186 by mikael
mikael
parents: 173
diff changeset
   127
static short int  inputline_offset;
6354625e8fb2 [/trunk] Changeset 186 by mikael
mikael
parents: 173
diff changeset
   128
static int    completion_started;
173
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
   129
static GList *cmdhisto;
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
   130
static GList *cmdhisto_cur;
1127
fddf2fef7b83 Add option "cmdhistory_lines"
Mikael Berthe <mikael@lilotux.net>
parents: 1122
diff changeset
   131
static guint  cmdhisto_nblines;
174
6354625e8fb2 [/trunk] Changeset 186 by mikael
mikael
parents: 173
diff changeset
   132
static char   cmdhisto_backup[INPUTLINE_LENGTH+1];
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   133
991
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
   134
static int    chatstate; /* (0=active, 1=composing, 2=paused) */
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 987
diff changeset
   135
static bool   lock_chatstate;
991
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
   136
static time_t chatstate_timestamp;
993
0759f4c7da68 Add option 'disable_chatstates'
Mikael Berthe <mikael@lilotux.net>
parents: 992
diff changeset
   137
int chatstates_disabled;
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 987
diff changeset
   138
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   139
#define MAX_KEYSEQ_LENGTH 8
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   140
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   141
typedef struct {
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   142
  char *seqstr;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   143
  guint mkeycode;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   144
  gint  value;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   145
} keyseq;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   146
1521
33f8f795abd2 Check for regex support in glib
Mikael Berthe <mikael@lilotux.net>
parents: 1520
diff changeset
   147
#ifdef HAVE_GLIB_REGEX
1520
41d3457af815 Add option "url_regex"
franky@diable.fs
parents: 1519
diff changeset
   148
static GRegex *url_regex;
1521
33f8f795abd2 Check for regex support in glib
Mikael Berthe <mikael@lilotux.net>
parents: 1520
diff changeset
   149
#endif
1520
41d3457af815 Add option "url_regex"
franky@diable.fs
parents: 1519
diff changeset
   150
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   151
GSList *keyseqlist;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   152
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
   153
850
d0781ca2dd08 Use new status buffer window
Mikael Berthe <mikael@lilotux.net>
parents: 849
diff changeset
   154
void scr_WriteInWindow(const char *winId, const char *text, time_t timestamp,
1290
e42f48103609 Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1286
diff changeset
   155
                       unsigned int prefix_flags, int force_show,
e42f48103609 Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1286
diff changeset
   156
                       unsigned mucnicklen);
850
d0781ca2dd08 Use new status buffer window
Mikael Berthe <mikael@lilotux.net>
parents: 849
diff changeset
   157
1558
3df441efb7c2 Fix gcc warnings related to inline/static uses
Mikael Berthe <mikael@lilotux.net>
parents: 1522
diff changeset
   158
inline void scr_WriteMessage(const char *bjid, const char *text,
3df441efb7c2 Fix gcc warnings related to inline/static uses
Mikael Berthe <mikael@lilotux.net>
parents: 1522
diff changeset
   159
                             time_t timestamp, guint prefix_flags,
3df441efb7c2 Fix gcc warnings related to inline/static uses
Mikael Berthe <mikael@lilotux.net>
parents: 1522
diff changeset
   160
                             unsigned mucnicklen);
1413
f89844a0448a Remove useless inlines
Mikael Berthe <mikael@lilotux.net>
parents: 1394
diff changeset
   161
inline void scr_UpdateBuddyWindow(void);
f89844a0448a Remove useless inlines
Mikael Berthe <mikael@lilotux.net>
parents: 1394
diff changeset
   162
inline void scr_set_chatmode(int enable);
f89844a0448a Remove useless inlines
Mikael Berthe <mikael@lilotux.net>
parents: 1394
diff changeset
   163
1179
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
   164
#ifdef HAVE_ASPELL_H
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
   165
#define ASPELLBADCHAR 5
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
   166
AspellConfig *spell_config;
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
   167
AspellSpeller *spell_checker;
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
   168
#endif
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   169
1272
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   170
typedef struct {
1489
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   171
	int color_pair;
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   172
	int color_attrib;
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   173
} ccolor;
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   174
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   175
typedef struct {
1272
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   176
  char *status, *wildcard;
1489
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   177
  ccolor * color;
1272
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   178
  GPatternSpec *compiled;
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   179
} rostercolor;
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   180
1292
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   181
static GSList *rostercolrules = NULL;
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   182
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   183
static GHashTable *muccolors = NULL, *nickcolors = NULL;
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   184
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   185
typedef struct {
1413
f89844a0448a Remove useless inlines
Mikael Berthe <mikael@lilotux.net>
parents: 1394
diff changeset
   186
  bool manual; // Manually set?
1489
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   187
  ccolor * color;
1292
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   188
} nickcolor;
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   189
1489
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   190
static int nickcolcount = 0;
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   191
static ccolor ** nickcols = NULL;
1292
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   192
static muccoltype glob_muccol = MC_OFF;
1272
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   193
99
7fffb8a6b229 [/trunk] Changeset 113 by mikael
mikael
parents: 98
diff changeset
   194
/* Functions */
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   195
1489
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   196
static int FindColor(const char *name)
1272
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   197
{
1489
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   198
  int result;
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   199
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   200
  if (!strcmp(name, "default"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   201
    return -1;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   202
  if (!strcmp(name, "black"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   203
    return COLOR_BLACK;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   204
  if (!strcmp(name, "red"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   205
    return COLOR_RED;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   206
  if (!strcmp(name, "green"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   207
    return COLOR_GREEN;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   208
  if (!strcmp(name, "yellow"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   209
    return COLOR_YELLOW;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   210
  if (!strcmp(name, "blue"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   211
    return COLOR_BLUE;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   212
  if (!strcmp(name, "magenta"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   213
    return COLOR_MAGENTA;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   214
  if (!strcmp(name, "cyan"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   215
    return COLOR_CYAN;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   216
  if (!strcmp(name, "white"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   217
    return COLOR_WHITE;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   218
1417
783b47c9d963 Allow more than the 16 default colors (patch from mjs)
Mikael Berthe <mikael@lilotux.net>
parents: 1414
diff changeset
   219
  // Directly support 256-color values
783b47c9d963 Allow more than the 16 default colors (patch from mjs)
Mikael Berthe <mikael@lilotux.net>
parents: 1414
diff changeset
   220
  result = atoi(name);
783b47c9d963 Allow more than the 16 default colors (patch from mjs)
Mikael Berthe <mikael@lilotux.net>
parents: 1414
diff changeset
   221
  if (result > 0 && result < COLORS)
783b47c9d963 Allow more than the 16 default colors (patch from mjs)
Mikael Berthe <mikael@lilotux.net>
parents: 1414
diff changeset
   222
    return result;
783b47c9d963 Allow more than the 16 default colors (patch from mjs)
Mikael Berthe <mikael@lilotux.net>
parents: 1414
diff changeset
   223
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   224
  scr_LogPrint(LPRINT_LOGNORM, "ERROR: Wrong color: %s", name);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   225
  return -1;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   226
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   227
1489
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   228
static ccolor * get_user_color(const char *color)
1295
33cb828282d5 Fix recognizing of bright colors
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1294
diff changeset
   229
{
1381
40095d413da9 Fix compilation on OpenBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1376
diff changeset
   230
  bool isbright = FALSE;
1295
33cb828282d5 Fix recognizing of bright colors
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1294
diff changeset
   231
  int cl;
1489
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   232
  ccolor * ccol;
1295
33cb828282d5 Fix recognizing of bright colors
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1294
diff changeset
   233
  if (!strncmp(color, "bright", 6)) {
1381
40095d413da9 Fix compilation on OpenBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1376
diff changeset
   234
    isbright = TRUE;
1295
33cb828282d5 Fix recognizing of bright colors
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1294
diff changeset
   235
    color += 6;
33cb828282d5 Fix recognizing of bright colors
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1294
diff changeset
   236
  }
1489
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   237
  cl = FindColor(color);
1295
33cb828282d5 Fix recognizing of bright colors
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1294
diff changeset
   238
  if (cl < 0)
1489
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   239
    return NULL;
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   240
  ccol = g_new0(ccolor, 1);
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   241
  ccol->color_attrib = isbright ? A_BOLD : A_NORMAL;
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   242
  ccol->color_pair = cl + COLOR_max; //user colors come after the internal ones
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   243
  return ccol;
1295
33cb828282d5 Fix recognizing of bright colors
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1294
diff changeset
   244
}
33cb828282d5 Fix recognizing of bright colors
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1294
diff changeset
   245
1292
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   246
static void ensure_string_htable(GHashTable **table,
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   247
    GDestroyNotify value_destroy_func)
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   248
{
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   249
  if (*table)//Have it already
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   250
    return;
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   251
  *table = g_hash_table_new_full(g_str_hash, g_str_equal,
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   252
      g_free, value_destroy_func);
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   253
}
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   254
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   255
// Sets the coloring mode for given MUC
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   256
// The MUC room does not need to be in the roster at that time
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   257
// muc - the JID of room
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   258
// type - the new type
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   259
void scr_MucColor(const char *muc, muccoltype type)
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   260
{
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   261
  gchar *muclow = g_utf8_strdown(muc, -1);
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   262
  if (type == MC_REMOVE) {//Remove it
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   263
    if (strcmp(muc, "*")) {
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   264
      if (muccolors && g_hash_table_lookup(muccolors, muclow))
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   265
        g_hash_table_remove(muccolors, muclow);
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   266
    } else {
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   267
      scr_LogPrint(LPRINT_NORMAL, "Can not remove global coloring mode");
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   268
    }
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   269
    g_free(muclow);
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   270
  } else {//Add or overwrite
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   271
    if (strcmp(muc, "*")) {
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   272
      muccoltype *value = g_new(muccoltype, 1);
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   273
      *value = type;
1476
77afd831f8f7 Avoid mixed declarations and code
Mikael Berthe <mikael@lilotux.net>
parents: 1457
diff changeset
   274
      ensure_string_htable(&muccolors, g_free);
1292
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   275
      g_hash_table_replace(muccolors, muclow, value);
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   276
    } else {
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   277
      glob_muccol = type;
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   278
      g_free(muclow);
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   279
    }
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   280
  }
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   281
  //Need to redraw?
1333
e30a9d907105 Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents: 1314
diff changeset
   282
  if (chatmode &&
e30a9d907105 Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents: 1314
diff changeset
   283
      ((buddy_search_jid(muc) == current_buddy) || !strcmp(muc, "*")))
1292
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   284
    scr_UpdateBuddyWindow();
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   285
}
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   286
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   287
// Sets the color for nick in MUC
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   288
// If color is "-", the color is marked as automaticly assigned and is
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   289
// not used if the room is in the "preset" mode
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   290
void scr_MucNickColor(const char *nick, const char *color)
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   291
{
1333
e30a9d907105 Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents: 1314
diff changeset
   292
  char *snick, *mnick;
1381
40095d413da9 Fix compilation on OpenBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1376
diff changeset
   293
  bool need_update = FALSE;
1333
e30a9d907105 Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents: 1314
diff changeset
   294
  snick = g_strdup_printf("<%s>", nick);
e30a9d907105 Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents: 1314
diff changeset
   295
  mnick = g_strdup_printf("*%s ", nick);
1292
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   296
  if (!strcmp(color, "-")) {//Remove the color
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   297
    if (nickcolors) {
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   298
      nickcolor *nc = g_hash_table_lookup(nickcolors, snick);
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   299
      if (nc) {//Have this nick already
1381
40095d413da9 Fix compilation on OpenBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1376
diff changeset
   300
        nc->manual = FALSE;
1292
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   301
        nc = g_hash_table_lookup(nickcolors, mnick);
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   302
        assert(nc);//Must have both at the same time
1381
40095d413da9 Fix compilation on OpenBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1376
diff changeset
   303
        nc->manual = FALSE;
1292
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   304
      }// Else -> no color saved, nothing to delete
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   305
    }
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   306
    g_free(snick);//They are not saved in the hash
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   307
    g_free(mnick);
1381
40095d413da9 Fix compilation on OpenBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1376
diff changeset
   308
    need_update = TRUE;
1292
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   309
  } else {
1489
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   310
    ccolor * cl = get_user_color(color);
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   311
    if (!cl) {
1292
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   312
      scr_LogPrint(LPRINT_NORMAL, "No such color name");
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   313
      g_free(snick);
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   314
      g_free(mnick);
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   315
    } else {
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   316
      nickcolor *nc = g_new(nickcolor, 1);
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   317
      ensure_string_htable(&nickcolors, NULL);
1381
40095d413da9 Fix compilation on OpenBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1376
diff changeset
   318
      nc->manual = TRUE;
1292
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   319
      nc->color = cl;
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   320
      //Free the struct, if any there already
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   321
      g_free(g_hash_table_lookup(nickcolors, mnick));
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   322
      //Save the new ones
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   323
      g_hash_table_replace(nickcolors, mnick, nc);
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   324
      g_hash_table_replace(nickcolors, snick, nc);
1381
40095d413da9 Fix compilation on OpenBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1376
diff changeset
   325
      need_update = TRUE;
1292
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   326
    }
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   327
  }
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   328
  if (need_update && chatmode &&
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   329
      (buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_ROOM))
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   330
    scr_UpdateBuddyWindow();
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   331
}
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   332
1272
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   333
static void free_rostercolrule(rostercolor *col)
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   334
{
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   335
  g_free(col->status);
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   336
  g_free(col->wildcard);
1489
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   337
  g_free(col->color);
1272
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   338
  g_pattern_spec_free(col->compiled);
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   339
  g_free(col);
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   340
}
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   341
1284
2c96720c4f5b Add comments (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1280
diff changeset
   342
// Removes all roster coloring rules
1272
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   343
void scr_RosterClearColor(void)
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   344
{
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   345
  GSList *head;
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   346
  for (head = rostercolrules; head; head = g_slist_next(head)) {
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   347
    free_rostercolrule(head->data);
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   348
  }
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   349
  g_slist_free(rostercolrules);
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   350
  rostercolrules = NULL;
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   351
}
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   352
1284
2c96720c4f5b Add comments (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1280
diff changeset
   353
// Adds, modifies or removes roster coloring rule
2c96720c4f5b Add comments (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1280
diff changeset
   354
// color set to "-" removes the rule,
2c96720c4f5b Add comments (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1280
diff changeset
   355
// otherwise it is modified (if exists) or added
2c96720c4f5b Add comments (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1280
diff changeset
   356
//
2c96720c4f5b Add comments (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1280
diff changeset
   357
// Returns weather it was successfull (therefore the roster should be
2c96720c4f5b Add comments (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1280
diff changeset
   358
// redrawed) or not. If it failed, for example because of invalid color
2c96720c4f5b Add comments (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1280
diff changeset
   359
// name, it also prints the error.
1272
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   360
bool scr_RosterColor(const char *status, const char *wildcard,
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   361
                     const char *color)
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   362
{
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   363
  GSList *head;
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   364
  GSList *found = NULL;
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   365
  for (head = rostercolrules; head; head = g_slist_next(head)) {
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   366
    rostercolor *rc = head->data;
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   367
    if ((!strcmp(status, rc->status)) && (!strcmp(wildcard, rc->wildcard))) {
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   368
      found = head;
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   369
      break;
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   370
    }
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   371
  }
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   372
  if (!strcmp(color,"-")) {//Delete the rule
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   373
    if (found) {
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   374
      free_rostercolrule(found->data);
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   375
      rostercolrules = g_slist_delete_link(rostercolrules, found);
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   376
      return TRUE;
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   377
    } else {
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   378
      scr_LogPrint(LPRINT_NORMAL, "No such color rule, nothing removed");
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   379
      return FALSE;
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   380
    }
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   381
  } else {
1489
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   382
    ccolor * cl = get_user_color(color);
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   383
    if (!cl) {
1272
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   384
      scr_LogPrint(LPRINT_NORMAL, "No such color name");
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   385
      return FALSE;
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   386
    }
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   387
    if (found) {
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   388
      rostercolor *rc = found->data;
1489
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   389
			g_free(rc->color);
1272
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   390
      rc->color = cl;
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   391
    } else {
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   392
      rostercolor *rc = g_new(rostercolor, 1);
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   393
      rc->status = g_strdup(status);
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   394
      rc->wildcard = g_strdup(wildcard);
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   395
      rc->compiled = g_pattern_spec_new(wildcard);
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   396
      rc->color = cl;
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   397
      rostercolrules = g_slist_prepend(rostercolrules, rc);
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   398
    }
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   399
    return TRUE;
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   400
  }
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   401
}
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
   402
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 332
diff changeset
   403
static void ParseColors(void)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   404
{
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   405
  const char *colors[] = {
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   406
    "", "",
267
8d3d5bd52da3 Improve color configuration
mikael@frmp8452
parents: 265
diff changeset
   407
    "general",
785
7e0562e3bc83 Replace color_highlight with color_msgout
Mikael Berthe <mikael@lilotux.net>
parents: 779
diff changeset
   408
    "msgout",
1204
e802ec0c02d2 Basic support for nick highlighting in MUC rooms (the whole line is colored)
Mikael Berthe <mikael@lilotux.net>
parents: 1190
diff changeset
   409
    "msghl",
711
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
   410
    "status",
712
e1639629c87b Rename color options
Mikael Berthe <mikael@lilotux.net>
parents: 711
diff changeset
   411
    "roster",
e1639629c87b Rename color options
Mikael Berthe <mikael@lilotux.net>
parents: 711
diff changeset
   412
    "rostersel",
723
23068490d063 Add text color when the selected buddy has an unread message
Mikael Berthe <mikael@lilotux.net>
parents: 721
diff changeset
   413
    "rosterselmsg",
712
e1639629c87b Rename color options
Mikael Berthe <mikael@lilotux.net>
parents: 711
diff changeset
   414
    "rosternewmsg",
1268
dbc907b2d92f Add configurable colors for info and incoming messages (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
   415
    "info",
dbc907b2d92f Add configurable colors for info and incoming messages (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
   416
    "msgin",
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   417
    NULL
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   418
  };
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   419
281
f562b9af2de7 Add "const" specifier in prototypes
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   420
  const char *color;
f562b9af2de7 Add "const" specifier in prototypes
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   421
  const char *background   = settings_opt_get("color_background");
712
e1639629c87b Rename color options
Mikael Berthe <mikael@lilotux.net>
parents: 711
diff changeset
   422
  const char *backselected = settings_opt_get("color_bgrostersel");
e1639629c87b Rename color options
Mikael Berthe <mikael@lilotux.net>
parents: 711
diff changeset
   423
  const char *backstatus   = settings_opt_get("color_bgstatus");
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   424
  char *tmp;
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   425
  int i;
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   426
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   427
  // Initialize color attributes
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   428
  memset(COLOR_ATTRIB, 0, sizeof(COLOR_ATTRIB));
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   429
267
8d3d5bd52da3 Improve color configuration
mikael@frmp8452
parents: 265
diff changeset
   430
  // Default values
711
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
   431
  if (!background)   background   = "black";
267
8d3d5bd52da3 Improve color configuration
mikael@frmp8452
parents: 265
diff changeset
   432
  if (!backselected) backselected = "cyan";
711
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
   433
  if (!backstatus)   backstatus   = "blue";
267
8d3d5bd52da3 Improve color configuration
mikael@frmp8452
parents: 265
diff changeset
   434
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   435
  for (i=0; colors[i]; i++) {
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   436
    tmp = g_strdup_printf("color_%s", colors[i]);
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 276
diff changeset
   437
    color = settings_opt_get(tmp);
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   438
    g_free(tmp);
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   439
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   440
    if (color) {
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   441
      if (!strncmp(color, "bright", 6)) {
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   442
        COLOR_ATTRIB[i+1] = A_BOLD;
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   443
        color += 6;
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   444
      }
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   445
    }
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   446
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   447
    switch (i + 1) {
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   448
      case 1:
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   449
          init_pair(1, COLOR_BLACK, COLOR_WHITE);
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   450
          break;
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   451
      case 2:
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   452
          init_pair(2, COLOR_WHITE, COLOR_BLACK);
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   453
          break;
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   454
      case COLOR_GENERAL:
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   455
          init_pair(i+1, ((color) ? FindColor(color) : COLOR_WHITE),
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   456
                    FindColor(background));
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   457
          break;
785
7e0562e3bc83 Replace color_highlight with color_msgout
Mikael Berthe <mikael@lilotux.net>
parents: 779
diff changeset
   458
      case COLOR_MSGOUT:
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   459
          init_pair(i+1, ((color) ? FindColor(color) : COLOR_CYAN),
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   460
                    FindColor(background));
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   461
          break;
1204
e802ec0c02d2 Basic support for nick highlighting in MUC rooms (the whole line is colored)
Mikael Berthe <mikael@lilotux.net>
parents: 1190
diff changeset
   462
      case COLOR_MSGHL:
e802ec0c02d2 Basic support for nick highlighting in MUC rooms (the whole line is colored)
Mikael Berthe <mikael@lilotux.net>
parents: 1190
diff changeset
   463
          init_pair(i+1, ((color) ? FindColor(color) : COLOR_YELLOW),
e802ec0c02d2 Basic support for nick highlighting in MUC rooms (the whole line is colored)
Mikael Berthe <mikael@lilotux.net>
parents: 1190
diff changeset
   464
                    FindColor(background));
e802ec0c02d2 Basic support for nick highlighting in MUC rooms (the whole line is colored)
Mikael Berthe <mikael@lilotux.net>
parents: 1190
diff changeset
   465
          break;
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   466
      case COLOR_STATUS:
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   467
          init_pair(i+1, ((color) ? FindColor(color) : COLOR_WHITE),
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   468
                    FindColor(backstatus));
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   469
          break;
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   470
      case COLOR_ROSTER:
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   471
          init_pair(i+1, ((color) ? FindColor(color) : COLOR_GREEN),
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   472
                    FindColor(background));
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   473
          break;
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   474
      case COLOR_ROSTERSEL:
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   475
          init_pair(i+1, ((color) ? FindColor(color) : COLOR_BLUE),
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   476
                    FindColor(backselected));
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   477
          break;
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   478
      case COLOR_ROSTERSELNMSG:
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   479
          init_pair(i+1, ((color) ? FindColor(color) : COLOR_RED),
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   480
                    FindColor(backselected));
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   481
          break;
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   482
      case COLOR_ROSTERNMSG:
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   483
          init_pair(i+1, ((color) ? FindColor(color) : COLOR_RED),
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   484
                    FindColor(background));
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
   485
          break;
1268
dbc907b2d92f Add configurable colors for info and incoming messages (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
   486
      case COLOR_INFO:
dbc907b2d92f Add configurable colors for info and incoming messages (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
   487
          init_pair(i+1, ((color) ? FindColor(color) : COLOR_WHITE),
dbc907b2d92f Add configurable colors for info and incoming messages (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
   488
                    FindColor(background));
dbc907b2d92f Add configurable colors for info and incoming messages (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
   489
          break;
dbc907b2d92f Add configurable colors for info and incoming messages (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
   490
      case COLOR_MSGIN:
dbc907b2d92f Add configurable colors for info and incoming messages (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
   491
          init_pair(i+1, ((color) ? FindColor(color) : COLOR_WHITE),
dbc907b2d92f Add configurable colors for info and incoming messages (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
   492
                    FindColor(background));
dbc907b2d92f Add configurable colors for info and incoming messages (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
   493
          break;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   494
    }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   495
  }
1489
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   496
  for (i = COLOR_max; i < (COLOR_max + COLORS); i++)
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   497
    init_pair(i, i-COLOR_max, FindColor(background));
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   498
1298
af035a304bec colorable muc nick fix
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1296
diff changeset
   499
  if (!nickcols) {
1314
248e3f69dd9e Fix a bug in the nick_colors variable parsing
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
   500
    char *ncolors = g_strdup(settings_opt_get("nick_colors"));
1298
af035a304bec colorable muc nick fix
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1296
diff changeset
   501
    if (ncolors) {
1314
248e3f69dd9e Fix a bug in the nick_colors variable parsing
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
   502
      char *ncolor_start, *ncolor_end;
248e3f69dd9e Fix a bug in the nick_colors variable parsing
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
   503
      ncolor_start = ncolor_end = ncolors;
248e3f69dd9e Fix a bug in the nick_colors variable parsing
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
   504
248e3f69dd9e Fix a bug in the nick_colors variable parsing
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
   505
      while (*ncolor_end)
248e3f69dd9e Fix a bug in the nick_colors variable parsing
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
   506
        ncolor_end++;
248e3f69dd9e Fix a bug in the nick_colors variable parsing
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
   507
248e3f69dd9e Fix a bug in the nick_colors variable parsing
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
   508
      while (ncolors < ncolor_end && *ncolors) {
1298
af035a304bec colorable muc nick fix
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1296
diff changeset
   509
        if ((*ncolors == ' ') || (*ncolors == '\t')) {
1314
248e3f69dd9e Fix a bug in the nick_colors variable parsing
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
   510
          ncolors++;
1292
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   511
        } else {
1298
af035a304bec colorable muc nick fix
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1296
diff changeset
   512
          char *end = ncolors;
1489
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   513
          ccolor * cl;
1298
af035a304bec colorable muc nick fix
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1296
diff changeset
   514
          while (*end && (*end != ' ') && (*end != '\t'))
af035a304bec colorable muc nick fix
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1296
diff changeset
   515
            end++;
af035a304bec colorable muc nick fix
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1296
diff changeset
   516
          *end = '\0';
1314
248e3f69dd9e Fix a bug in the nick_colors variable parsing
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
   517
          cl = get_user_color(ncolors);
1489
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   518
          if (!cl) {
1298
af035a304bec colorable muc nick fix
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1296
diff changeset
   519
            scr_LogPrint(LPRINT_NORMAL, "Unknown color %s", ncolors);
af035a304bec colorable muc nick fix
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1296
diff changeset
   520
          } else {
af035a304bec colorable muc nick fix
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1296
diff changeset
   521
            nickcols = g_realloc(nickcols, (++nickcolcount) * sizeof *nickcols);
af035a304bec colorable muc nick fix
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1296
diff changeset
   522
            nickcols[nickcolcount-1] = cl;
af035a304bec colorable muc nick fix
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1296
diff changeset
   523
          }
1314
248e3f69dd9e Fix a bug in the nick_colors variable parsing
Mikael Berthe <mikael@lilotux.net>
parents: 1311
diff changeset
   524
          ncolors = end+1;
1292
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   525
        }
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   526
      }
1298
af035a304bec colorable muc nick fix
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1296
diff changeset
   527
      g_free(ncolor_start);
1292
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   528
    }
1298
af035a304bec colorable muc nick fix
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1296
diff changeset
   529
    if (!nickcols) {//Fallback to have something
af035a304bec colorable muc nick fix
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1296
diff changeset
   530
      nickcolcount = 1;
1489
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   531
			nickcols = g_new(ccolor*, 1);
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   532
			*nickcols = g_new(ccolor, 1);
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   533
      (*nickcols)->color_pair = COLOR_GENERAL;
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
   534
      (*nickcols)->color_attrib = A_NORMAL;
1298
af035a304bec colorable muc nick fix
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1296
diff changeset
   535
    }
1292
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
   536
  }
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   537
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   538
765
72626e9d60bd Create init_keycodes(), add 2 screen escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 764
diff changeset
   539
static void init_keycodes(void)
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   540
{
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   541
  add_keyseq("O5A", MKEY_EQUIV, 521); // Ctrl-Up
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   542
  add_keyseq("O5B", MKEY_EQUIV, 514); // Ctrl-Down
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   543
  add_keyseq("O5C", MKEY_EQUIV, 518); // Ctrl-Right
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   544
  add_keyseq("O5D", MKEY_EQUIV, 516); // Ctrl-Left
763
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   545
  add_keyseq("O6A", MKEY_EQUIV, 520); // Shift-Up
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   546
  add_keyseq("O6B", MKEY_EQUIV, 513); // Shift-Down
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   547
  add_keyseq("O6C", MKEY_EQUIV, 402); // Shift-Right
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   548
  add_keyseq("O6D", MKEY_EQUIV, 393); // Shift-Left
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   549
  add_keyseq("O2A", MKEY_EQUIV, 520); // Shift-Up
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   550
  add_keyseq("O2B", MKEY_EQUIV, 513); // Shift-Down
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   551
  add_keyseq("O2C", MKEY_EQUIV, 402); // Shift-Right
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   552
  add_keyseq("O2D", MKEY_EQUIV, 393); // Shift-Left
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   553
  add_keyseq("[5^", MKEY_CTRL_PGUP, 0);   // Ctrl-PageUp
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   554
  add_keyseq("[6^", MKEY_CTRL_PGDOWN, 0); // Ctrl-PageDown
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   555
  add_keyseq("[5@", MKEY_CTRL_SHIFT_PGUP, 0);   // Ctrl-Shift-PageUp
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   556
  add_keyseq("[6@", MKEY_CTRL_SHIFT_PGDOWN, 0); // Ctrl-Shift-PageDown
826
3a3c7a017904 Add Ctrl-Shift-{Home,End} key code sequences
Mikael Berthe <mikael@lilotux.net>
parents: 825
diff changeset
   557
  add_keyseq("[7@", MKEY_CTRL_SHIFT_HOME, 0); // Ctrl-Shift-Home
3a3c7a017904 Add Ctrl-Shift-{Home,End} key code sequences
Mikael Berthe <mikael@lilotux.net>
parents: 825
diff changeset
   558
  add_keyseq("[8@", MKEY_CTRL_SHIFT_END, 0);  // Ctrl-Shift-End
794
32d5298f9f8d Add a few keycode sequences
Mikael Berthe <mikael@lilotux.net>
parents: 790
diff changeset
   559
  add_keyseq("[8^", MKEY_CTRL_END, 0);  // Ctrl-End
32d5298f9f8d Add a few keycode sequences
Mikael Berthe <mikael@lilotux.net>
parents: 790
diff changeset
   560
  add_keyseq("[7^", MKEY_CTRL_HOME, 0); // Ctrl-Home
32d5298f9f8d Add a few keycode sequences
Mikael Berthe <mikael@lilotux.net>
parents: 790
diff changeset
   561
  add_keyseq("[2^", MKEY_CTRL_INS, 0);  // Ctrl-Insert
32d5298f9f8d Add a few keycode sequences
Mikael Berthe <mikael@lilotux.net>
parents: 790
diff changeset
   562
  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
   563
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   564
  // Xterm
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   565
  add_keyseq("[1;5A", MKEY_EQUIV, 521); // Ctrl-Up
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   566
  add_keyseq("[1;5B", MKEY_EQUIV, 514); // Ctrl-Down
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   567
  add_keyseq("[1;5C", MKEY_EQUIV, 518); // Ctrl-Right
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   568
  add_keyseq("[1;5D", MKEY_EQUIV, 516); // Ctrl-Left
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
   569
  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
   570
  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
   571
  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
   572
  add_keyseq("[1;6D", MKEY_EQUIV, 393); // Ctrl-Shift-Left
826
3a3c7a017904 Add Ctrl-Shift-{Home,End} key code sequences
Mikael Berthe <mikael@lilotux.net>
parents: 825
diff changeset
   573
  add_keyseq("[1;6H", MKEY_CTRL_SHIFT_HOME, 0); // Ctrl-Shift-Home
3a3c7a017904 Add Ctrl-Shift-{Home,End} key code sequences
Mikael Berthe <mikael@lilotux.net>
parents: 825
diff changeset
   574
  add_keyseq("[1;6F", MKEY_CTRL_SHIFT_END, 0);  // Ctrl-Shift-End
763
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   575
  add_keyseq("[1;2A", MKEY_EQUIV, 521); // Shift-Up
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   576
  add_keyseq("[1;2B", MKEY_EQUIV, 514); // Shift-Down
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   577
  add_keyseq("[5;5~", MKEY_CTRL_PGUP, 0);   // Ctrl-PageUp
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   578
  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
   579
  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
   580
  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
   581
  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
   582
  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
   583
768
0f6d25a02450 Add PuTTY escape keys for Ctrl-arrows
Mikael Berthe <mikael@lilotux.net>
parents: 766
diff changeset
   584
  // PuTTY
0f6d25a02450 Add PuTTY escape keys for Ctrl-arrows
Mikael Berthe <mikael@lilotux.net>
parents: 766
diff changeset
   585
  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
   586
  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
   587
  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
   588
  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
   589
762
96d46e00524a Add some key escape sequences for screen
Mikael Berthe <mikael@lilotux.net>
parents: 761
diff changeset
   590
  // screen
96d46e00524a Add some key escape sequences for screen
Mikael Berthe <mikael@lilotux.net>
parents: 761
diff changeset
   591
  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
   592
  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
   593
  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
   594
  add_keyseq("Od", MKEY_EQUIV, 516); // Ctrl-Left
763
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   595
  add_keyseq("[a", MKEY_EQUIV, 520); // Shift-Up
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   596
  add_keyseq("[b", MKEY_EQUIV, 513); // Shift-Down
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   597
  add_keyseq("[c", MKEY_EQUIV, 402); // Shift-Right
6866ee749225 More keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 762
diff changeset
   598
  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
   599
  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
   600
  add_keyseq("[6$", MKEY_SHIFT_PGDOWN, 0); // Shift-PageDown
1170
29f805d8412f Add some keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 1168
diff changeset
   601
29f805d8412f Add some keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 1168
diff changeset
   602
  // VT100
29f805d8412f Add some keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 1168
diff changeset
   603
  add_keyseq("[H", MKEY_EQUIV, KEY_HOME); // Home
29f805d8412f Add some keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 1168
diff changeset
   604
  add_keyseq("[F", MKEY_EQUIV, KEY_END);  // End
29f805d8412f Add some keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 1168
diff changeset
   605
29f805d8412f Add some keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 1168
diff changeset
   606
  // Konsole Linux
29f805d8412f Add some keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 1168
diff changeset
   607
  add_keyseq("[1~", MKEY_EQUIV, KEY_HOME); // Home
29f805d8412f Add some keycodes
Mikael Berthe <mikael@lilotux.net>
parents: 1168
diff changeset
   608
  add_keyseq("[4~", MKEY_EQUIV, KEY_END);  // End
765
72626e9d60bd Create init_keycodes(), add 2 screen escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 764
diff changeset
   609
}
72626e9d60bd Create init_keycodes(), add 2 screen escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 764
diff changeset
   610
1176
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   611
//  scr_init_bindings()
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   612
// Create default key bindings
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   613
// Return 0 if error and 1 if none
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   614
void scr_init_bindings(void)
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   615
{
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   616
  GString *sbuf = g_string_new("");
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   617
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   618
  // Common backspace key codes: 8, 127
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   619
  settings_set(SETTINGS_TYPE_BINDING, "8", "iline char_bdel");    // Ctrl-h
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   620
  settings_set(SETTINGS_TYPE_BINDING, "127", "iline char_bdel");
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   621
  g_string_printf(sbuf, "%d", KEY_BACKSPACE);
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   622
  settings_set(SETTINGS_TYPE_BINDING, sbuf->str, "iline char_bdel");
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   623
  g_string_printf(sbuf, "%d", KEY_DC);
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   624
  settings_set(SETTINGS_TYPE_BINDING, sbuf->str, "iline char_fdel");
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   625
  g_string_printf(sbuf, "%d", KEY_LEFT);
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   626
  settings_set(SETTINGS_TYPE_BINDING, sbuf->str, "iline bchar");
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   627
  g_string_printf(sbuf, "%d", KEY_RIGHT);
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   628
  settings_set(SETTINGS_TYPE_BINDING, sbuf->str, "iline fchar");
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   629
  settings_set(SETTINGS_TYPE_BINDING, "7", "iline compl_cancel"); // Ctrl-g
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   630
  g_string_printf(sbuf, "%d", KEY_UP);
1190
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
   631
  settings_set(SETTINGS_TYPE_BINDING, sbuf->str,
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
   632
               "iline hist_beginning_search_bwd");
1176
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   633
  g_string_printf(sbuf, "%d", KEY_DOWN);
1190
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
   634
  settings_set(SETTINGS_TYPE_BINDING, sbuf->str,
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
   635
               "iline hist_beginning_search_fwd");
1176
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   636
  g_string_printf(sbuf, "%d", KEY_PPAGE);
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   637
  settings_set(SETTINGS_TYPE_BINDING, sbuf->str, "roster up");
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   638
  g_string_printf(sbuf, "%d", KEY_NPAGE);
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   639
  settings_set(SETTINGS_TYPE_BINDING, sbuf->str, "roster down");
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   640
  g_string_printf(sbuf, "%d", KEY_HOME);
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   641
  settings_set(SETTINGS_TYPE_BINDING, sbuf->str, "iline iline_start");
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   642
  settings_set(SETTINGS_TYPE_BINDING, "1", "iline iline_start");  // Ctrl-a
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   643
  g_string_printf(sbuf, "%d", KEY_END);
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   644
  settings_set(SETTINGS_TYPE_BINDING, sbuf->str, "iline iline_end");
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   645
  settings_set(SETTINGS_TYPE_BINDING, "5", "iline iline_end");    // Ctrl-e
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   646
  // Ctrl-o (accept-line-and-down-history):
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   647
  settings_set(SETTINGS_TYPE_BINDING, "15", "iline iline_accept_down_hist");
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   648
  settings_set(SETTINGS_TYPE_BINDING, "21", "iline iline_bdel");  // Ctrl-u
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   649
  g_string_printf(sbuf, "%d", KEY_EOL);
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   650
  settings_set(SETTINGS_TYPE_BINDING, sbuf->str, "iline iline_fdel");
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   651
  settings_set(SETTINGS_TYPE_BINDING, "11", "iline iline_fdel");  // Ctrl-k
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   652
  settings_set(SETTINGS_TYPE_BINDING, "16", "buffer up");         // Ctrl-p
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   653
  settings_set(SETTINGS_TYPE_BINDING, "14", "buffer down");       // Ctrl-n
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   654
  settings_set(SETTINGS_TYPE_BINDING, "20", "iline char_swap");   // Ctrl-t
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   655
  settings_set(SETTINGS_TYPE_BINDING, "23", "iline word_bdel");   // Ctrl-w
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   656
  settings_set(SETTINGS_TYPE_BINDING, "M98", "iline bword");      // Meta-b
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   657
  settings_set(SETTINGS_TYPE_BINDING, "M102", "iline fword");     // Meta-f
1186
0158bd8ca9d6 Add a default binding to Meta-d (iline word_fdel)
Mikael Berthe <mikael@lilotux.net>
parents: 1185
diff changeset
   658
  settings_set(SETTINGS_TYPE_BINDING, "M100", "iline word_fdel"); // Meta-d
1176
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   659
  // Ctrl-Left  (2 codes):
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   660
  settings_set(SETTINGS_TYPE_BINDING, "515", "iline bword");
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   661
  settings_set(SETTINGS_TYPE_BINDING, "516", "iline bword");
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   662
  // Ctrl-Right (2 codes):
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   663
  settings_set(SETTINGS_TYPE_BINDING, "517", "iline fword");
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   664
  settings_set(SETTINGS_TYPE_BINDING, "518", "iline fword");
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   665
  settings_set(SETTINGS_TYPE_BINDING, "12", "screen_refresh");    // Ctrl-l
1503
c74cfe7fd848 Add option --show-roster to command chat_disable.
Mikael Berthe <mikael@lilotux.net>
parents: 1502
diff changeset
   666
  settings_set(SETTINGS_TYPE_BINDING, "27", "chat_disable --show-roster");// Esc
1185
5c34af370b67 Bind Meta-Esc (Esc-Esc) to chat_disable by default
Mikael Berthe <mikael@lilotux.net>
parents: 1179
diff changeset
   667
  settings_set(SETTINGS_TYPE_BINDING, "M27", "chat_disable");     // Esc-Esc
1176
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   668
  settings_set(SETTINGS_TYPE_BINDING, "4", "iline send_multiline"); // Ctrl-d
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   669
  settings_set(SETTINGS_TYPE_BINDING, "M117", "iline word_upcase"); // Meta-u
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   670
  settings_set(SETTINGS_TYPE_BINDING, "M108", "iline word_downcase"); // Meta-l
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   671
  settings_set(SETTINGS_TYPE_BINDING, "M99", "iline word_capit"); // Meta-c
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   672
1208
0dbe51d1e62e Add default binding for F1 (265) to /help
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
   673
  settings_set(SETTINGS_TYPE_BINDING, "265", "help"); // Bind F1 to help...
0dbe51d1e62e Add default binding for F1 (265) to /help
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
   674
1176
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   675
  g_string_free(sbuf, TRUE);
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   676
}
547a8ca7c1a8 Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents: 1173
diff changeset
   677
1229
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   678
//  is_speckey(key)
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   679
// Return TRUE if key is a special code, i.e. no char should be displayed on
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   680
// the screen.  It's not very nice, it's a workaround for the systems where
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   681
// isprint(KEY_PPAGE) returns TRUE...
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   682
static int is_speckey(int key)
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   683
{
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   684
  switch (key) {
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   685
    case 127:
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   686
    case 393:
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   687
    case 402:
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   688
    case KEY_BACKSPACE:
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   689
    case KEY_DC:
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   690
    case KEY_LEFT:
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   691
    case KEY_RIGHT:
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   692
    case KEY_UP:
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   693
    case KEY_DOWN:
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   694
    case KEY_PPAGE:
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   695
    case KEY_NPAGE:
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   696
    case KEY_HOME:
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   697
    case KEY_END:
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   698
    case KEY_EOL:
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   699
        return TRUE;
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   700
  }
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   701
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   702
  // Fn keys
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   703
  if (key >= 265 && key < 265+12)
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   704
    return TRUE;
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   705
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   706
  // Special key combinations
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   707
  if (key >= 513 && key <= 521)
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   708
    return TRUE;
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   709
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   710
  return FALSE;
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   711
}
e9ea1497ac9d Fix a key binding issue on FreeBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1228
diff changeset
   712
779
057ffe7c43dc Initialize locale charset earlier
Mikael Berthe <mikael@lilotux.net>
parents: 773
diff changeset
   713
void scr_InitLocaleCharSet(void)
057ffe7c43dc Initialize locale charset earlier
Mikael Berthe <mikael@lilotux.net>
parents: 773
diff changeset
   714
{
057ffe7c43dc Initialize locale charset earlier
Mikael Berthe <mikael@lilotux.net>
parents: 773
diff changeset
   715
  setlocale(LC_CTYPE, "");
1382
1447c5296977 Fix locale charset detection on some BSD systems
Mikael Berthe <mikael@lilotux.net>
parents: 1381
diff changeset
   716
#ifdef HAVE_LOCALCHARSET_H
1447c5296977 Fix locale charset detection on some BSD systems
Mikael Berthe <mikael@lilotux.net>
parents: 1381
diff changeset
   717
  LocaleCharSet = locale_charset();
1447c5296977 Fix locale charset detection on some BSD systems
Mikael Berthe <mikael@lilotux.net>
parents: 1381
diff changeset
   718
#else
779
057ffe7c43dc Initialize locale charset earlier
Mikael Berthe <mikael@lilotux.net>
parents: 773
diff changeset
   719
  LocaleCharSet = nl_langinfo(CODESET);
1382
1447c5296977 Fix locale charset detection on some BSD systems
Mikael Berthe <mikael@lilotux.net>
parents: 1381
diff changeset
   720
#endif
779
057ffe7c43dc Initialize locale charset earlier
Mikael Berthe <mikael@lilotux.net>
parents: 773
diff changeset
   721
  utf8_mode = (strcmp(LocaleCharSet, "UTF-8") == 0);
057ffe7c43dc Initialize locale charset earlier
Mikael Berthe <mikael@lilotux.net>
parents: 773
diff changeset
   722
}
057ffe7c43dc Initialize locale charset earlier
Mikael Berthe <mikael@lilotux.net>
parents: 773
diff changeset
   723
765
72626e9d60bd Create init_keycodes(), add 2 screen escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 764
diff changeset
   724
void scr_InitCurses(void)
72626e9d60bd Create init_keycodes(), add 2 screen escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 764
diff changeset
   725
{
72626e9d60bd Create init_keycodes(), add 2 screen escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 764
diff changeset
   726
  /* Key sequences initialization */
72626e9d60bd Create init_keycodes(), add 2 screen escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 764
diff changeset
   727
  init_keycodes();
762
96d46e00524a Add some key escape sequences for screen
Mikael Berthe <mikael@lilotux.net>
parents: 761
diff changeset
   728
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   729
  initscr();
382
4c6e8392e465 Use nodelay() instead of halfdelay()
Mikael Berthe <mikael@lilotux.net>
parents: 374
diff changeset
   730
  raw();
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   731
  noecho();
389
6e895f397474 Ncurses changes + Ctrl-C does not send a signal anylore
Mikael Berthe <mikael@lilotux.net>
parents: 388
diff changeset
   732
  nonl();
6e895f397474 Ncurses changes + Ctrl-C does not send a signal anylore
Mikael Berthe <mikael@lilotux.net>
parents: 388
diff changeset
   733
  intrflush(stdscr, FALSE);
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   734
  start_color();
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   735
  use_default_colors();
1561
2e86c1cc4eb1 Map mouse events to p* keycodes
franky
parents: 1558
diff changeset
   736
#ifdef NCURSES_MOUSE_VERSION
1563
c1d0f906d379 Add option "use_mouse"
franky
parents: 1561
diff changeset
   737
  if (settings_opt_get_int("use_mouse"))
c1d0f906d379 Add option "use_mouse"
franky
parents: 1561
diff changeset
   738
    mousemask(ALL_MOUSE_EVENTS, NULL);
1561
2e86c1cc4eb1 Map mouse events to p* keycodes
franky
parents: 1558
diff changeset
   739
#endif
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   740
1386
8e763c2c331f Add option 'escdelay'
Mikael Berthe <mikael@lilotux.net>
parents: 1382
diff changeset
   741
  if (settings_opt_get("escdelay")) {
8e763c2c331f Add option 'escdelay'
Mikael Berthe <mikael@lilotux.net>
parents: 1382
diff changeset
   742
#ifdef HAVE_ESCDELAY
8e763c2c331f Add option 'escdelay'
Mikael Berthe <mikael@lilotux.net>
parents: 1382
diff changeset
   743
    ESCDELAY = (unsigned) settings_opt_get_int("escdelay");
8e763c2c331f Add option 'escdelay'
Mikael Berthe <mikael@lilotux.net>
parents: 1382
diff changeset
   744
#else
8e763c2c331f Add option 'escdelay'
Mikael Berthe <mikael@lilotux.net>
parents: 1382
diff changeset
   745
    scr_LogPrint(LPRINT_LOGNORM, "ERROR: no ESCDELAY support.");
8e763c2c331f Add option 'escdelay'
Mikael Berthe <mikael@lilotux.net>
parents: 1382
diff changeset
   746
#endif
8e763c2c331f Add option 'escdelay'
Mikael Berthe <mikael@lilotux.net>
parents: 1382
diff changeset
   747
  }
8e763c2c331f Add option 'escdelay'
Mikael Berthe <mikael@lilotux.net>
parents: 1382
diff changeset
   748
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   749
  ParseColors();
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   750
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   751
  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
   752
  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
   753
  // 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
   754
  // 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
   755
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   756
  inputLine[0] = 0;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   757
  ptr_inputline = inputLine;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   758
1521
33f8f795abd2 Check for regex support in glib
Mikael Berthe <mikael@lilotux.net>
parents: 1520
diff changeset
   759
  if (settings_opt_get("url_regex")) {
33f8f795abd2 Check for regex support in glib
Mikael Berthe <mikael@lilotux.net>
parents: 1520
diff changeset
   760
#ifdef HAVE_GLIB_REGEX
1520
41d3457af815 Add option "url_regex"
franky@diable.fs
parents: 1519
diff changeset
   761
    url_regex = g_regex_new(settings_opt_get("url_regex"),
41d3457af815 Add option "url_regex"
franky@diable.fs
parents: 1519
diff changeset
   762
                            G_REGEX_OPTIMIZE, 0, NULL);
1521
33f8f795abd2 Check for regex support in glib
Mikael Berthe <mikael@lilotux.net>
parents: 1520
diff changeset
   763
#else
33f8f795abd2 Check for regex support in glib
Mikael Berthe <mikael@lilotux.net>
parents: 1520
diff changeset
   764
    scr_LogPrint(LPRINT_LOGNORM, "ERROR: Your glib version is too old, "
33f8f795abd2 Check for regex support in glib
Mikael Berthe <mikael@lilotux.net>
parents: 1520
diff changeset
   765
                 "cannot use url_regex.");
33f8f795abd2 Check for regex support in glib
Mikael Berthe <mikael@lilotux.net>
parents: 1520
diff changeset
   766
#endif // HAVE_GLIB_REGEX
33f8f795abd2 Check for regex support in glib
Mikael Berthe <mikael@lilotux.net>
parents: 1520
diff changeset
   767
  }
1520
41d3457af815 Add option "url_regex"
franky@diable.fs
parents: 1519
diff changeset
   768
966
d9acb7f2a3d1 Do not set Curses variable too early
Mikael Berthe <mikael@lilotux.net>
parents: 961
diff changeset
   769
  Curses = TRUE;
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   770
  return;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   771
}
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   772
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   773
void scr_TerminateCurses(void)
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   774
{
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   775
  if (!Curses) return;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   776
  clear();
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   777
  refresh();
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   778
  endwin();
1521
33f8f795abd2 Check for regex support in glib
Mikael Berthe <mikael@lilotux.net>
parents: 1520
diff changeset
   779
#ifdef HAVE_GLIB_REGEX
1520
41d3457af815 Add option "url_regex"
franky@diable.fs
parents: 1519
diff changeset
   780
  if (url_regex)
41d3457af815 Add option "url_regex"
franky@diable.fs
parents: 1519
diff changeset
   781
    g_regex_unref(url_regex);
1521
33f8f795abd2 Check for regex support in glib
Mikael Berthe <mikael@lilotux.net>
parents: 1520
diff changeset
   782
#endif
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   783
  Curses = FALSE;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   784
  return;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   785
}
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   786
1413
f89844a0448a Remove useless inlines
Mikael Berthe <mikael@lilotux.net>
parents: 1394
diff changeset
   787
void scr_Beep(void)
675
ae7016aae014 New "beep_on_message" option
Mikael Berthe <mikael@lilotux.net>
parents: 667
diff changeset
   788
{
ae7016aae014 New "beep_on_message" option
Mikael Berthe <mikael@lilotux.net>
parents: 667
diff changeset
   789
  beep();
ae7016aae014 New "beep_on_message" option
Mikael Berthe <mikael@lilotux.net>
parents: 667
diff changeset
   790
}
ae7016aae014 New "beep_on_message" option
Mikael Berthe <mikael@lilotux.net>
parents: 667
diff changeset
   791
1286
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   792
// This and following belongs to dynamic setting of time prefix
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   793
static const char *timeprefixes[] = {
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   794
  "%m-%d %H:%M ",
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   795
  "%H:%M ",
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   796
  " "
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   797
};
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   798
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   799
static const char *spectimeprefixes[] = {
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   800
  "%m-%d %H:%M:%S   ",
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   801
  "%H:%M:%S   ",
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   802
  "   "
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   803
};
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   804
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   805
static int timepreflengths[] = {
1376
a0deb5124ebf Check time_prefix value before using it
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
   806
  // (length of the corresponding timeprefix + 5)
1286
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   807
  17,
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   808
  11,
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   809
  6
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   810
};
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   811
1486
f83a51eaa5ed Fix multiline output in /buffer save
Mikael Berthe <mikael@lilotux.net>
parents: 1485
diff changeset
   812
static const char *gettprefix(void)
1286
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   813
{
1376
a0deb5124ebf Check time_prefix value before using it
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
   814
  guint n = settings_opt_get_int("time_prefix");
a0deb5124ebf Check time_prefix value before using it
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
   815
  return timeprefixes[(n < 3 ? n : 0)];
1286
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   816
}
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   817
1486
f83a51eaa5ed Fix multiline output in /buffer save
Mikael Berthe <mikael@lilotux.net>
parents: 1485
diff changeset
   818
static const char *getspectprefix(void)
1286
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   819
{
1376
a0deb5124ebf Check time_prefix value before using it
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
   820
  guint n = settings_opt_get_int("time_prefix");
a0deb5124ebf Check time_prefix value before using it
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
   821
  return spectimeprefixes[(n < 3 ? n : 0)];
1286
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   822
}
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   823
1487
f61ed2466f7c Minor style upgrade
Mikael Berthe <mikael@lilotux.net>
parents: 1486
diff changeset
   824
guint scr_getprefixwidth(void)
1286
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   825
{
1376
a0deb5124ebf Check time_prefix value before using it
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
   826
  guint n = settings_opt_get_int("time_prefix");
a0deb5124ebf Check time_prefix value before using it
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
   827
  return timepreflengths[(n < 3 ? n : 0)];
1286
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   828
}
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
   829
1518
63dc211a4c1a New command: /echo (display a message in the log window)
Mikael Berthe <mikael@lilotux.net>
parents: 1515
diff changeset
   830
//  scr_print_logwindow(string)
63dc211a4c1a New command: /echo (display a message in the log window)
Mikael Berthe <mikael@lilotux.net>
parents: 1515
diff changeset
   831
// Display the string in the log window.
63dc211a4c1a New command: /echo (display a message in the log window)
Mikael Berthe <mikael@lilotux.net>
parents: 1515
diff changeset
   832
// Note: The string must be in the user's locale!
63dc211a4c1a New command: /echo (display a message in the log window)
Mikael Berthe <mikael@lilotux.net>
parents: 1515
diff changeset
   833
void scr_print_logwindow(const char *string)
63dc211a4c1a New command: /echo (display a message in the log window)
Mikael Berthe <mikael@lilotux.net>
parents: 1515
diff changeset
   834
{
63dc211a4c1a New command: /echo (display a message in the log window)
Mikael Berthe <mikael@lilotux.net>
parents: 1515
diff changeset
   835
  time_t timestamp;
63dc211a4c1a New command: /echo (display a message in the log window)
Mikael Berthe <mikael@lilotux.net>
parents: 1515
diff changeset
   836
  char strtimestamp[64];
63dc211a4c1a New command: /echo (display a message in the log window)
Mikael Berthe <mikael@lilotux.net>
parents: 1515
diff changeset
   837
63dc211a4c1a New command: /echo (display a message in the log window)
Mikael Berthe <mikael@lilotux.net>
parents: 1515
diff changeset
   838
  timestamp = time(NULL);
63dc211a4c1a New command: /echo (display a message in the log window)
Mikael Berthe <mikael@lilotux.net>
parents: 1515
diff changeset
   839
  strftime(strtimestamp, 48, "[%H:%M:%S]", localtime(&timestamp));
63dc211a4c1a New command: /echo (display a message in the log window)
Mikael Berthe <mikael@lilotux.net>
parents: 1515
diff changeset
   840
  if (Curses) {
63dc211a4c1a New command: /echo (display a message in the log window)
Mikael Berthe <mikael@lilotux.net>
parents: 1515
diff changeset
   841
    wprintw(logWnd, "\n%s %s", strtimestamp, string);
63dc211a4c1a New command: /echo (display a message in the log window)
Mikael Berthe <mikael@lilotux.net>
parents: 1515
diff changeset
   842
    update_panels();
63dc211a4c1a New command: /echo (display a message in the log window)
Mikael Berthe <mikael@lilotux.net>
parents: 1515
diff changeset
   843
  } else {
63dc211a4c1a New command: /echo (display a message in the log window)
Mikael Berthe <mikael@lilotux.net>
parents: 1515
diff changeset
   844
    printf("%s %s\n", strtimestamp, string);
63dc211a4c1a New command: /echo (display a message in the log window)
Mikael Berthe <mikael@lilotux.net>
parents: 1515
diff changeset
   845
  }
63dc211a4c1a New command: /echo (display a message in the log window)
Mikael Berthe <mikael@lilotux.net>
parents: 1515
diff changeset
   846
}
63dc211a4c1a New command: /echo (display a message in the log window)
Mikael Berthe <mikael@lilotux.net>
parents: 1515
diff changeset
   847
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   848
//  scr_LogPrint(...)
1518
63dc211a4c1a New command: /echo (display a message in the log window)
Mikael Berthe <mikael@lilotux.net>
parents: 1515
diff changeset
   849
// Display a message in the log window and in the status buffer.
63dc211a4c1a New command: /echo (display a message in the log window)
Mikael Berthe <mikael@lilotux.net>
parents: 1515
diff changeset
   850
// Add the message to the tracelog file if the log flag is set.
771
ce4f8a2129a4 scr_LogPrint() can display UTF-8 strings
Mikael Berthe <mikael@lilotux.net>
parents: 770
diff changeset
   851
// 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
   852
void scr_LogPrint(unsigned int flag, const char *fmt, ...)
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   853
{
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   854
  time_t timestamp;
857
ef35a2bb40d7 scr_LogPrint(): do not use static buffer size
Mikael Berthe <mikael@lilotux.net>
parents: 851
diff changeset
   855
  char strtimestamp[64];
858
2683ad5d1003 Improve scr_LogPrint() for log/debug messages
Mikael Berthe <mikael@lilotux.net>
parents: 857
diff changeset
   856
  char *buffer, *btext;
1075
03bc225ad763 Improve scr_LogPrint() readability
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
   857
  char *convbuf1 = NULL, *convbuf2 = NULL;
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   858
  va_list ap;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   859
771
ce4f8a2129a4 scr_LogPrint() can display UTF-8 strings
Mikael Berthe <mikael@lilotux.net>
parents: 770
diff changeset
   860
  if (!(flag & ~LPRINT_NOTUTF8)) return; // Shouldn't happen
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
   861
857
ef35a2bb40d7 scr_LogPrint(): do not use static buffer size
Mikael Berthe <mikael@lilotux.net>
parents: 851
diff changeset
   862
  timestamp = time(NULL);
ef35a2bb40d7 scr_LogPrint(): do not use static buffer size
Mikael Berthe <mikael@lilotux.net>
parents: 851
diff changeset
   863
  strftime(strtimestamp, 48, "[%H:%M:%S]", localtime(&timestamp));
ef35a2bb40d7 scr_LogPrint(): do not use static buffer size
Mikael Berthe <mikael@lilotux.net>
parents: 851
diff changeset
   864
  va_start(ap, fmt);
858
2683ad5d1003 Improve scr_LogPrint() for log/debug messages
Mikael Berthe <mikael@lilotux.net>
parents: 857
diff changeset
   865
  btext = g_strdup_vprintf(fmt, ap);
857
ef35a2bb40d7 scr_LogPrint(): do not use static buffer size
Mikael Berthe <mikael@lilotux.net>
parents: 851
diff changeset
   866
  va_end(ap);
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   867
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
   868
  if (flag & LPRINT_NORMAL) {
771
ce4f8a2129a4 scr_LogPrint() can display UTF-8 strings
Mikael Berthe <mikael@lilotux.net>
parents: 770
diff changeset
   869
    char *buffer_locale;
851
da03534e46c7 Add startup log messages to the status buffer
Mikael Berthe <mikael@lilotux.net>
parents: 850
diff changeset
   870
    char *buf_specialwindow;
da03534e46c7 Add startup log messages to the status buffer
Mikael Berthe <mikael@lilotux.net>
parents: 850
diff changeset
   871
858
2683ad5d1003 Improve scr_LogPrint() for log/debug messages
Mikael Berthe <mikael@lilotux.net>
parents: 857
diff changeset
   872
    buffer = g_strdup_printf("%s %s", strtimestamp, btext);
2683ad5d1003 Improve scr_LogPrint() for log/debug messages
Mikael Berthe <mikael@lilotux.net>
parents: 857
diff changeset
   873
851
da03534e46c7 Add startup log messages to the status buffer
Mikael Berthe <mikael@lilotux.net>
parents: 850
diff changeset
   874
    // Convert buffer to current locale for wprintw()
771
ce4f8a2129a4 scr_LogPrint() can display UTF-8 strings
Mikael Berthe <mikael@lilotux.net>
parents: 770
diff changeset
   875
    if (!(flag & LPRINT_NOTUTF8))
1075
03bc225ad763 Improve scr_LogPrint() readability
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
   876
      buffer_locale = convbuf1 = from_utf8(buffer);
771
ce4f8a2129a4 scr_LogPrint() can display UTF-8 strings
Mikael Berthe <mikael@lilotux.net>
parents: 770
diff changeset
   877
    else
ce4f8a2129a4 scr_LogPrint() can display UTF-8 strings
Mikael Berthe <mikael@lilotux.net>
parents: 770
diff changeset
   878
      buffer_locale = buffer;
851
da03534e46c7 Add startup log messages to the status buffer
Mikael Berthe <mikael@lilotux.net>
parents: 850
diff changeset
   879
884
9e6d9f0cf9eb scr_LogPrint(): Add a warning for UTF-8 -> locale conversion failures
Mikael Berthe <mikael@lilotux.net>
parents: 880
diff changeset
   880
    if (!buffer_locale) {
9e6d9f0cf9eb scr_LogPrint(): Add a warning for UTF-8 -> locale conversion failures
Mikael Berthe <mikael@lilotux.net>
parents: 880
diff changeset
   881
      wprintw(logWnd,
9e6d9f0cf9eb scr_LogPrint(): Add a warning for UTF-8 -> locale conversion failures
Mikael Berthe <mikael@lilotux.net>
parents: 880
diff changeset
   882
              "\n%s*Error: cannot convert string to locale.", strtimestamp);
9e6d9f0cf9eb scr_LogPrint(): Add a warning for UTF-8 -> locale conversion failures
Mikael Berthe <mikael@lilotux.net>
parents: 880
diff changeset
   883
      update_panels();
9e6d9f0cf9eb scr_LogPrint(): Add a warning for UTF-8 -> locale conversion failures
Mikael Berthe <mikael@lilotux.net>
parents: 880
diff changeset
   884
      g_free(buffer);
897
a05b5a16a06a Fix memory leak in scr_LogPrint()
Mikael Berthe <mikael@lilotux.net>
parents: 891
diff changeset
   885
      g_free(btext);
884
9e6d9f0cf9eb scr_LogPrint(): Add a warning for UTF-8 -> locale conversion failures
Mikael Berthe <mikael@lilotux.net>
parents: 880
diff changeset
   886
      return;
9e6d9f0cf9eb scr_LogPrint(): Add a warning for UTF-8 -> locale conversion failures
Mikael Berthe <mikael@lilotux.net>
parents: 880
diff changeset
   887
    }
9e6d9f0cf9eb scr_LogPrint(): Add a warning for UTF-8 -> locale conversion failures
Mikael Berthe <mikael@lilotux.net>
parents: 880
diff changeset
   888
851
da03534e46c7 Add startup log messages to the status buffer
Mikael Berthe <mikael@lilotux.net>
parents: 850
diff changeset
   889
    // For the special status buffer, we need utf-8, but without the timestamp
da03534e46c7 Add startup log messages to the status buffer
Mikael Berthe <mikael@lilotux.net>
parents: 850
diff changeset
   890
    if (flag & LPRINT_NOTUTF8)
1075
03bc225ad763 Improve scr_LogPrint() readability
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
   891
      buf_specialwindow = convbuf2 = to_utf8(btext);
851
da03534e46c7 Add startup log messages to the status buffer
Mikael Berthe <mikael@lilotux.net>
parents: 850
diff changeset
   892
    else
858
2683ad5d1003 Improve scr_LogPrint() for log/debug messages
Mikael Berthe <mikael@lilotux.net>
parents: 857
diff changeset
   893
      buf_specialwindow = btext;
851
da03534e46c7 Add startup log messages to the status buffer
Mikael Berthe <mikael@lilotux.net>
parents: 850
diff changeset
   894
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
   895
    if (Curses) {
771
ce4f8a2129a4 scr_LogPrint() can display UTF-8 strings
Mikael Berthe <mikael@lilotux.net>
parents: 770
diff changeset
   896
      wprintw(logWnd, "\n%s", buffer_locale);
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
   897
      update_panels();
850
d0781ca2dd08 Use new status buffer window
Mikael Berthe <mikael@lilotux.net>
parents: 849
diff changeset
   898
      scr_WriteInWindow(NULL, buf_specialwindow, timestamp,
1290
e42f48103609 Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1286
diff changeset
   899
                        HBB_PREFIX_SPECIAL, FALSE, 0);
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
   900
    } else {
771
ce4f8a2129a4 scr_LogPrint() can display UTF-8 strings
Mikael Berthe <mikael@lilotux.net>
parents: 770
diff changeset
   901
      printf("%s\n", buffer_locale);
851
da03534e46c7 Add startup log messages to the status buffer
Mikael Berthe <mikael@lilotux.net>
parents: 850
diff changeset
   902
      // ncurses are not initialized yet, so we call directly hbuf routine
da03534e46c7 Add startup log messages to the status buffer
Mikael Berthe <mikael@lilotux.net>
parents: 850
diff changeset
   903
      hbuf_add_line(&statushbuf, buf_specialwindow, timestamp,
1290
e42f48103609 Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1286
diff changeset
   904
        HBB_PREFIX_SPECIAL, 0, 0, 0);
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
   905
    }
851
da03534e46c7 Add startup log messages to the status buffer
Mikael Berthe <mikael@lilotux.net>
parents: 850
diff changeset
   906
1075
03bc225ad763 Improve scr_LogPrint() readability
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
   907
    g_free(convbuf1);
03bc225ad763 Improve scr_LogPrint() readability
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
   908
    g_free(convbuf2);
858
2683ad5d1003 Improve scr_LogPrint() for log/debug messages
Mikael Berthe <mikael@lilotux.net>
parents: 857
diff changeset
   909
    g_free(buffer);
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
   910
  }
412
9c640ee3bae3 Display full date in the log file
Mikael Berthe <mikael@lilotux.net>
parents: 393
diff changeset
   911
857
ef35a2bb40d7 scr_LogPrint(): do not use static buffer size
Mikael Berthe <mikael@lilotux.net>
parents: 851
diff changeset
   912
  if (flag & (LPRINT_LOG|LPRINT_DEBUG)) {
ef35a2bb40d7 scr_LogPrint(): do not use static buffer size
Mikael Berthe <mikael@lilotux.net>
parents: 851
diff changeset
   913
    strftime(strtimestamp, 23, "[%Y-%m-%d %H:%M:%S]", localtime(&timestamp));
858
2683ad5d1003 Improve scr_LogPrint() for log/debug messages
Mikael Berthe <mikael@lilotux.net>
parents: 857
diff changeset
   914
    buffer = g_strdup_printf("%s %s\n", strtimestamp, btext);
857
ef35a2bb40d7 scr_LogPrint(): do not use static buffer size
Mikael Berthe <mikael@lilotux.net>
parents: 851
diff changeset
   915
    ut_WriteLog(flag, buffer);
ef35a2bb40d7 scr_LogPrint(): do not use static buffer size
Mikael Berthe <mikael@lilotux.net>
parents: 851
diff changeset
   916
    g_free(buffer);
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   917
  }
897
a05b5a16a06a Fix memory leak in scr_LogPrint()
Mikael Berthe <mikael@lilotux.net>
parents: 891
diff changeset
   918
  g_free(btext);
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   919
}
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
   920
1156
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   921
static winbuf *scr_SearchWindow(const char *winId, int special)
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   922
{
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   923
  char *id;
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   924
  winbuf *wbp;
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   925
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   926
  if (special)
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   927
    return statusWindow; // Only one special window atm.
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   928
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   929
  if (!winId)
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   930
    return NULL;
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   931
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   932
  id = g_strdup(winId);
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   933
  mc_strtolower(id);
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   934
  wbp = g_hash_table_lookup(winbufhash, id);
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   935
  g_free(id);
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   936
  return wbp;
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   937
}
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   938
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   939
int scr_BuddyBufferExists(const char *bjid)
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   940
{
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   941
  return (scr_SearchWindow(bjid, FALSE) != NULL);
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   942
}
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   943
1133
9dd28a56128f Do not create one panel per contact
Mikael Berthe <mikael@lilotux.net>
parents: 1131
diff changeset
   944
//  scr_new_buddy(title, dontshow)
1139
104676e3389b Update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1138
diff changeset
   945
// Note: title (aka winId/jid) can be NULL for special buffers
1133
9dd28a56128f Do not create one panel per contact
Mikael Berthe <mikael@lilotux.net>
parents: 1131
diff changeset
   946
static winbuf *scr_new_buddy(const char *title, int dont_show)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   947
{
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   948
  winbuf *tmp;
393
f8f3c7493457 Whitespace cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 389
diff changeset
   949
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
   950
  tmp = g_new0(winbuf, 1);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   951
1133
9dd28a56128f Do not create one panel per contact
Mikael Berthe <mikael@lilotux.net>
parents: 1131
diff changeset
   952
  tmp->win = activechatWnd;
9dd28a56128f Do not create one panel per contact
Mikael Berthe <mikael@lilotux.net>
parents: 1131
diff changeset
   953
  tmp->panel = activechatPanel;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   954
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
   955
  if (!dont_show) {
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   956
    currentWindow = tmp;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   957
  } else {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   958
    if (currentWindow)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   959
      top_panel(currentWindow->panel);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   960
    else
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   961
      top_panel(chatPanel);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   962
  }
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
   963
  update_panels();
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   964
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
   965
  // If title is NULL, this is a special buffer
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
   966
  if (title) {
1078
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
   967
    char *id;
1156
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   968
    id = hlog_get_log_jid(title);
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   969
    if (id) {
1160
14f5876b5555 Slight optimization + line wrapping
Mikael Berthe <mikael@lilotux.net>
parents: 1159
diff changeset
   970
      winbuf *wb = scr_SearchWindow(id, FALSE);
14f5876b5555 Slight optimization + line wrapping
Mikael Berthe <mikael@lilotux.net>
parents: 1159
diff changeset
   971
      if (!wb)
14f5876b5555 Slight optimization + line wrapping
Mikael Berthe <mikael@lilotux.net>
parents: 1159
diff changeset
   972
        wb = scr_new_buddy(id, TRUE);
14f5876b5555 Slight optimization + line wrapping
Mikael Berthe <mikael@lilotux.net>
parents: 1159
diff changeset
   973
      tmp->bd=wb->bd;
1156
cae430fcd385 Mcabber will load symlinked histories only once, now.
Frank Zschockelt
parents: 1154
diff changeset
   974
      g_free(id);
1159
53c0c5be43fa Small fixes, typos and cleanups
Mikael Berthe <mikael@lilotux.net>
parents: 1157
diff changeset
   975
    } else {  // Load buddy history from file (if enabled)
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
   976
      tmp->bd = g_new0(buffdata, 1);
1159
53c0c5be43fa Small fixes, typos and cleanups
Mikael Berthe <mikael@lilotux.net>
parents: 1157
diff changeset
   977
      hlog_read_history(title, &tmp->bd->hbuf,
1487
f61ed2466f7c Minor style upgrade
Mikael Berthe <mikael@lilotux.net>
parents: 1486
diff changeset
   978
                        maxX - Roster_Width - scr_getprefixwidth());
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
   979
    }
181
4a0bde661562 [/trunk] Changeset 193 by mikael
mikael
parents: 180
diff changeset
   980
1078
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
   981
    id = g_strdup(title);
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
   982
    mc_strtolower(id);
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
   983
    g_hash_table_insert(winbufhash, id, tmp);
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
   984
  } else {
1159
53c0c5be43fa Small fixes, typos and cleanups
Mikael Berthe <mikael@lilotux.net>
parents: 1157
diff changeset
   985
    tmp->bd = g_new0(buffdata, 1);
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
   986
  }
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   987
  return tmp;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   988
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   989
1483
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
   990
//  scr_line_prefix(line, pref, preflen)
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
   991
// Use data from the hbb_line structure and write the prefix
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
   992
// to pref (not exceeding preflen, trailing null byte included).
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
   993
void scr_line_prefix(hbb_line *line, char *pref, guint preflen)
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
   994
{
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
   995
  char date[64];
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
   996
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
   997
  if (line->timestamp &&
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
   998
      !(line->flags & (HBB_PREFIX_SPECIAL|HBB_PREFIX_CONT))) {
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
   999
    strftime(date, 30, gettprefix(), localtime(&line->timestamp));
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1000
  } else
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1001
    strcpy(date, "           ");
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1002
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1003
  if (!(line->flags & HBB_PREFIX_CONT)) {
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1004
    if (line->flags & HBB_PREFIX_INFO) {
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1005
      char dir = '*';
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1006
      if (line->flags & HBB_PREFIX_IN)
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1007
        dir = '<';
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1008
      else if (line->flags & HBB_PREFIX_OUT)
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1009
        dir = '>';
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1010
      g_snprintf(pref, preflen, "%s*%c* ", date, dir);
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1011
    } else if (line->flags & HBB_PREFIX_ERR) {
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1012
      char dir = '#';
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1013
      if (line->flags & HBB_PREFIX_IN)
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1014
        dir = '<';
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1015
      else if (line->flags & HBB_PREFIX_OUT)
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1016
        dir = '>';
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1017
      g_snprintf(pref, preflen, "%s#%c# ", date, dir);
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1018
    } else if (line->flags & HBB_PREFIX_IN) {
1484
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1483
diff changeset
  1019
      char cryptflag;
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1483
diff changeset
  1020
      if (line->flags & HBB_PREFIX_PGPCRYPT)
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1483
diff changeset
  1021
        cryptflag = '~';
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1483
diff changeset
  1022
      else if (line->flags & HBB_PREFIX_OTRCRYPT)
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1483
diff changeset
  1023
        cryptflag = 'O';
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1483
diff changeset
  1024
      else
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1483
diff changeset
  1025
        cryptflag = '=';
1483
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1026
      g_snprintf(pref, preflen, "%s<%c= ", date, cryptflag);
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1027
    } else if (line->flags & HBB_PREFIX_OUT) {
1484
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1483
diff changeset
  1028
      char cryptflag;
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1483
diff changeset
  1029
      if (line->flags & HBB_PREFIX_PGPCRYPT)
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1483
diff changeset
  1030
        cryptflag = '~';
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1483
diff changeset
  1031
      else if (line->flags & HBB_PREFIX_OTRCRYPT)
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1483
diff changeset
  1032
        cryptflag = 'O';
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1483
diff changeset
  1033
      else
1488
b393b8cee171 Fix small mistake in changeset 7b36b91a4388
Mikael Berthe <mikael@lilotux.net>
parents: 1487
diff changeset
  1034
        cryptflag = '-';
1483
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1035
      g_snprintf(pref, preflen, "%s-%c> ", date, cryptflag);
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1036
    } else if (line->flags & HBB_PREFIX_SPECIAL) {
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1037
      strftime(date, 30, getspectprefix(), localtime(&line->timestamp));
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1038
      g_snprintf(pref, preflen, "%s   ", date);
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1039
    } else {
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1040
      g_snprintf(pref, preflen, "%s    ", date);
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1041
    }
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1042
  } else {
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1043
    g_snprintf(pref, preflen, "                ");
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1044
  }
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1045
}
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1046
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1047
//  scr_UpdateWindow()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1048
// (Re-)Display the given chat window.
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
  1049
static void scr_UpdateWindow(winbuf *win_entry)
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1050
{
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1051
  int n;
1486
f83a51eaa5ed Fix multiline output in /buffer save
Mikael Berthe <mikael@lilotux.net>
parents: 1485
diff changeset
  1052
  int width;
f83a51eaa5ed Fix multiline output in /buffer save
Mikael Berthe <mikael@lilotux.net>
parents: 1485
diff changeset
  1053
  guint prefixwidth;
1483
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1054
  char pref[96];
184
b5aa2b9c425a [/trunk] Changeset 196 by mikael
mikael
parents: 181
diff changeset
  1055
  hbb_line **lines, *line;
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1056
  GList *hbuf_head;
1291
9f64f548ac16 Better way of writing the nick
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1290
diff changeset
  1057
  int color;
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1058
1077
c51ca5225516 Remove useless WindowWidth function
Mikael Berthe <mikael@lilotux.net>
parents: 1076
diff changeset
  1059
  width = getmaxx(win_entry->win);
1487
f61ed2466f7c Minor style upgrade
Mikael Berthe <mikael@lilotux.net>
parents: 1486
diff changeset
  1060
  prefixwidth = scr_getprefixwidth();
1486
f83a51eaa5ed Fix multiline output in /buffer save
Mikael Berthe <mikael@lilotux.net>
parents: 1485
diff changeset
  1061
  prefixwidth = MIN(prefixwidth, sizeof pref);
108
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  1062
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  1063
  // Should the window be empty?
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1064
  if (win_entry->bd->cleared) {
168
6ad156673b19 [/trunk] Changeset 180 by mikael
mikael
parents: 167
diff changeset
  1065
    werase(win_entry->win);
108
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  1066
    return;
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  1067
  }
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  1068
1160
14f5876b5555 Slight optimization + line wrapping
Mikael Berthe <mikael@lilotux.net>
parents: 1159
diff changeset
  1069
  // win_entry->bd->top is the top message of the screen.  If it set to NULL,
14f5876b5555 Slight optimization + line wrapping
Mikael Berthe <mikael@lilotux.net>
parents: 1159
diff changeset
  1070
  // we are displaying the last messages.
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1071
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1072
  // We will show the last CHAT_WIN_HEIGHT lines.
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1073
  // Let's find out where it begins.
1160
14f5876b5555 Slight optimization + line wrapping
Mikael Berthe <mikael@lilotux.net>
parents: 1159
diff changeset
  1074
  if (!win_entry->bd->top || (g_list_position(g_list_first(win_entry->bd->hbuf),
14f5876b5555 Slight optimization + line wrapping
Mikael Berthe <mikael@lilotux.net>
parents: 1159
diff changeset
  1075
                                              win_entry->bd->top) == -1)) {
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1076
    // Move up CHAT_WIN_HEIGHT lines
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1077
    win_entry->bd->hbuf = g_list_last(win_entry->bd->hbuf);
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1078
    hbuf_head = win_entry->bd->hbuf;
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1079
    win_entry->bd->top = NULL; // (Just to make sure)
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1080
    n = 0;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1081
    while (hbuf_head && (n < CHAT_WIN_HEIGHT-1) && g_list_previous(hbuf_head)) {
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1082
      hbuf_head = g_list_previous(hbuf_head);
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1083
      n++;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1084
    }
873
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  1085
    // If the buffer is locked, remember current "top" line for the next time.
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1086
    if (win_entry->bd->lock)
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1087
      win_entry->bd->top = hbuf_head;
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1088
  } else
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1089
    hbuf_head = win_entry->bd->top;
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1090
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1091
  // Get the last CHAT_WIN_HEIGHT lines.
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1092
  lines = hbuf_get_lines(hbuf_head, CHAT_WIN_HEIGHT);
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1093
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1094
  // Display these lines
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1095
  for (n = 0; n < CHAT_WIN_HEIGHT; n++) {
168
6ad156673b19 [/trunk] Changeset 180 by mikael
mikael
parents: 167
diff changeset
  1096
    wmove(win_entry->win, n, 0);
184
b5aa2b9c425a [/trunk] Changeset 196 by mikael
mikael
parents: 181
diff changeset
  1097
    line = *(lines+n);
b5aa2b9c425a [/trunk] Changeset 196 by mikael
mikael
parents: 181
diff changeset
  1098
    if (line) {
1204
e802ec0c02d2 Basic support for nick highlighting in MUC rooms (the whole line is colored)
Mikael Berthe <mikael@lilotux.net>
parents: 1190
diff changeset
  1099
      if (line->flags & HBB_PREFIX_HLIGHT_OUT)
1291
9f64f548ac16 Better way of writing the nick
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1290
diff changeset
  1100
        color = COLOR_MSGOUT;
1204
e802ec0c02d2 Basic support for nick highlighting in MUC rooms (the whole line is colored)
Mikael Berthe <mikael@lilotux.net>
parents: 1190
diff changeset
  1101
      else if (line->flags & HBB_PREFIX_HLIGHT)
1291
9f64f548ac16 Better way of writing the nick
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1290
diff changeset
  1102
        color = COLOR_MSGHL;
1268
dbc907b2d92f Add configurable colors for info and incoming messages (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
  1103
      else if (line->flags & HBB_PREFIX_INFO)
1291
9f64f548ac16 Better way of writing the nick
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1290
diff changeset
  1104
        color = COLOR_INFO;
1268
dbc907b2d92f Add configurable colors for info and incoming messages (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
  1105
      else if (line->flags & HBB_PREFIX_IN)
1291
9f64f548ac16 Better way of writing the nick
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1290
diff changeset
  1106
        color = COLOR_MSGIN;
9f64f548ac16 Better way of writing the nick
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1290
diff changeset
  1107
      else
9f64f548ac16 Better way of writing the nick
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1290
diff changeset
  1108
        color = COLOR_GENERAL;
9f64f548ac16 Better way of writing the nick
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1290
diff changeset
  1109
9f64f548ac16 Better way of writing the nick
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1290
diff changeset
  1110
      if (color != COLOR_GENERAL)
9f64f548ac16 Better way of writing the nick
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1290
diff changeset
  1111
        wattrset(win_entry->win, get_color(color));
1268
dbc907b2d92f Add configurable colors for info and incoming messages (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
  1112
1483
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1113
      // Generate the prefix area and display it
1486
f83a51eaa5ed Fix multiline output in /buffer save
Mikael Berthe <mikael@lilotux.net>
parents: 1485
diff changeset
  1114
      scr_line_prefix(line, pref, prefixwidth);
1483
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1115
      wprintw(win_entry->win, pref);
729
39f67cade02c Use bold font for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 728
diff changeset
  1116
1286
02ad6200df26 Add selectable time prefixes (vorner)
Mikael Berthe <mikael@lilotux.net>
parents: 1284
diff changeset
  1117
      // Make sure we are at the right position
1376
a0deb5124ebf Check time_prefix value before using it
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
  1118
      wmove(win_entry->win, n, prefixwidth-1);
a0deb5124ebf Check time_prefix value before using it
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
  1119
a0deb5124ebf Check time_prefix value before using it
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
  1120
      // The MUC nick - overwrite with proper color
1294
86caabe72f3a Color only incoming messages
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1292
diff changeset
  1121
      if (line->mucnicklen) {
1476
77afd831f8f7 Avoid mixed declarations and code
Mikael Berthe <mikael@lilotux.net>
parents: 1457
diff changeset
  1122
        char *mucjid;
77afd831f8f7 Avoid mixed declarations and code
Mikael Berthe <mikael@lilotux.net>
parents: 1457
diff changeset
  1123
        char tmp;
77afd831f8f7 Avoid mixed declarations and code
Mikael Berthe <mikael@lilotux.net>
parents: 1457
diff changeset
  1124
        nickcolor *actual = NULL;
77afd831f8f7 Avoid mixed declarations and code
Mikael Berthe <mikael@lilotux.net>
parents: 1457
diff changeset
  1125
        muccoltype type, *typetmp;
77afd831f8f7 Avoid mixed declarations and code
Mikael Berthe <mikael@lilotux.net>
parents: 1457
diff changeset
  1126
1376
a0deb5124ebf Check time_prefix value before using it
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
  1127
        // Store the char after the nick
1476
77afd831f8f7 Avoid mixed declarations and code
Mikael Berthe <mikael@lilotux.net>
parents: 1457
diff changeset
  1128
        tmp = line->text[line->mucnicklen];
77afd831f8f7 Avoid mixed declarations and code
Mikael Berthe <mikael@lilotux.net>
parents: 1457
diff changeset
  1129
        type = glob_muccol;
1376
a0deb5124ebf Check time_prefix value before using it
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
  1130
        // Terminate the string after the nick
1290
e42f48103609 Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1286
diff changeset
  1131
        line->text[line->mucnicklen] = '\0';
1476
77afd831f8f7 Avoid mixed declarations and code
Mikael Berthe <mikael@lilotux.net>
parents: 1457
diff changeset
  1132
        mucjid = g_utf8_strdown(CURRENT_JID, -1);
1292
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
  1133
        if (muccolors) {
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
  1134
          typetmp = g_hash_table_lookup(muccolors, mucjid);
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
  1135
          if (typetmp)
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
  1136
            type = *typetmp;
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
  1137
        }
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
  1138
        g_free(mucjid);
1510
f6d4e20b9caa MUC nickname colors depend on nicknames now
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1505
diff changeset
  1139
        // Need to generate a color for the specified nick?
1292
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
  1140
        if ((type == MC_ALL) && (!nickcolors ||
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
  1141
            !g_hash_table_lookup(nickcolors, line->text))) {
1476
77afd831f8f7 Avoid mixed declarations and code
Mikael Berthe <mikael@lilotux.net>
parents: 1457
diff changeset
  1142
          char *snick, *mnick;
77afd831f8f7 Avoid mixed declarations and code
Mikael Berthe <mikael@lilotux.net>
parents: 1457
diff changeset
  1143
          nickcolor *nc;
1510
f6d4e20b9caa MUC nickname colors depend on nicknames now
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1505
diff changeset
  1144
          const char *p = line->text;
f6d4e20b9caa MUC nickname colors depend on nicknames now
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1505
diff changeset
  1145
          unsigned int nicksum = 0;
1476
77afd831f8f7 Avoid mixed declarations and code
Mikael Berthe <mikael@lilotux.net>
parents: 1457
diff changeset
  1146
          snick = g_strdup(line->text);
77afd831f8f7 Avoid mixed declarations and code
Mikael Berthe <mikael@lilotux.net>
parents: 1457
diff changeset
  1147
          mnick = g_strdup(line->text);
77afd831f8f7 Avoid mixed declarations and code
Mikael Berthe <mikael@lilotux.net>
parents: 1457
diff changeset
  1148
          nc = g_new(nickcolor, 1);
1292
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
  1149
          ensure_string_htable(&nickcolors, NULL);
1510
f6d4e20b9caa MUC nickname colors depend on nicknames now
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1505
diff changeset
  1150
          while (*p)
f6d4e20b9caa MUC nickname colors depend on nicknames now
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1505
diff changeset
  1151
            nicksum += *p++;
f6d4e20b9caa MUC nickname colors depend on nicknames now
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1505
diff changeset
  1152
          nc->color = nickcols[nicksum % nickcolcount];
1381
40095d413da9 Fix compilation on OpenBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1376
diff changeset
  1153
          nc->manual = FALSE;
1292
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
  1154
          *snick = '<';
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
  1155
          snick[strlen(snick)-1] = '>';
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
  1156
          *mnick = '*';
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
  1157
          mnick[strlen(mnick)-1] = ' ';
1376
a0deb5124ebf Check time_prefix value before using it
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
  1158
          // Insert them
1292
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
  1159
          g_hash_table_insert(nickcolors, snick, nc);
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
  1160
          g_hash_table_insert(nickcolors, mnick, nc);
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
  1161
        }
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
  1162
        if (nickcolors)
382ec54b584e Muc nick coloring functionality
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1291
diff changeset
  1163
          actual = g_hash_table_lookup(nickcolors, line->text);
1294
86caabe72f3a Color only incoming messages
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1292
diff changeset
  1164
        if (actual && ((type == MC_ALL) || (actual->manual))
86caabe72f3a Color only incoming messages
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1292
diff changeset
  1165
            && (line->flags & HBB_PREFIX_IN) &&
86caabe72f3a Color only incoming messages
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1292
diff changeset
  1166
           (!(line->flags & HBB_PREFIX_HLIGHT_OUT)))
1489
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
  1167
          wattrset(win_entry->win, compose_color(actual->color));
1290
e42f48103609 Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1286
diff changeset
  1168
        wprintw(win_entry->win, "%s", line->text);
1376
a0deb5124ebf Check time_prefix value before using it
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
  1169
        // Return the char
1290
e42f48103609 Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1286
diff changeset
  1170
        line->text[line->mucnicklen] = tmp;
1376
a0deb5124ebf Check time_prefix value before using it
Mikael Berthe <mikael@lilotux.net>
parents: 1359
diff changeset
  1171
        // Return the color back
1291
9f64f548ac16 Better way of writing the nick
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1290
diff changeset
  1172
        wattrset(win_entry->win, get_color(color));
1290
e42f48103609 Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1286
diff changeset
  1173
      }
729
39f67cade02c Use bold font for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 728
diff changeset
  1174
1333
e30a9d907105 Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents: 1314
diff changeset
  1175
      // Display text line
e30a9d907105 Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents: 1314
diff changeset
  1176
      wprintw(win_entry->win, "%s", line->text+line->mucnicklen);
1291
9f64f548ac16 Better way of writing the nick
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1290
diff changeset
  1177
      wclrtoeol(win_entry->win);
9f64f548ac16 Better way of writing the nick
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1290
diff changeset
  1178
1268
dbc907b2d92f Add configurable colors for info and incoming messages (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
  1179
      // Return the color back
1291
9f64f548ac16 Better way of writing the nick
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1290
diff changeset
  1180
      if (color != COLOR_GENERAL)
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
  1181
        wattrset(win_entry->win, get_color(COLOR_GENERAL));
1483
e74cc83e7158 Refactor scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
  1182
184
b5aa2b9c425a [/trunk] Changeset 196 by mikael
mikael
parents: 181
diff changeset
  1183
      g_free(line->text);
898
c65b71dcda94 Fix memory leak in scr_UpdateWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 897
diff changeset
  1184
      g_free(line);
168
6ad156673b19 [/trunk] Changeset 180 by mikael
mikael
parents: 167
diff changeset
  1185
    } else {
6ad156673b19 [/trunk] Changeset 180 by mikael
mikael
parents: 167
diff changeset
  1186
      wclrtobot(win_entry->win);
6ad156673b19 [/trunk] Changeset 180 by mikael
mikael
parents: 167
diff changeset
  1187
      break;
75
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
  1188
    }
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1189
  }
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1190
  g_free(lines);
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1191
}
1159
53c0c5be43fa Small fixes, typos and cleanups
Mikael Berthe <mikael@lilotux.net>
parents: 1157
diff changeset
  1192
53c0c5be43fa Small fixes, typos and cleanups
Mikael Berthe <mikael@lilotux.net>
parents: 1157
diff changeset
  1193
static winbuf *scr_CreateWindow(const char *winId, int special, int dont_show)
1154
f746d91c5d3b Rearranged duplicated code in screen.c
franky@teufel.fs
parents: 1142
diff changeset
  1194
{
f746d91c5d3b Rearranged duplicated code in screen.c
franky@teufel.fs
parents: 1142
diff changeset
  1195
  if (special) {
f746d91c5d3b Rearranged duplicated code in screen.c
franky@teufel.fs
parents: 1142
diff changeset
  1196
    if (!statusWindow) {
f746d91c5d3b Rearranged duplicated code in screen.c
franky@teufel.fs
parents: 1142
diff changeset
  1197
      statusWindow = scr_new_buddy(NULL, dont_show);
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1198
      statusWindow->bd->hbuf = statushbuf;
1154
f746d91c5d3b Rearranged duplicated code in screen.c
franky@teufel.fs
parents: 1142
diff changeset
  1199
    }
f746d91c5d3b Rearranged duplicated code in screen.c
franky@teufel.fs
parents: 1142
diff changeset
  1200
    return statusWindow;
f746d91c5d3b Rearranged duplicated code in screen.c
franky@teufel.fs
parents: 1142
diff changeset
  1201
  } else {
f746d91c5d3b Rearranged duplicated code in screen.c
franky@teufel.fs
parents: 1142
diff changeset
  1202
    return scr_new_buddy(winId, dont_show);
f746d91c5d3b Rearranged duplicated code in screen.c
franky@teufel.fs
parents: 1142
diff changeset
  1203
  }
f746d91c5d3b Rearranged duplicated code in screen.c
franky@teufel.fs
parents: 1142
diff changeset
  1204
}
f746d91c5d3b Rearranged duplicated code in screen.c
franky@teufel.fs
parents: 1142
diff changeset
  1205
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1206
//  scr_ShowWindow()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1207
// Display the chat window with the given identifier.
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1208
// "special" must be true if this is a special buffer window.
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1209
static void scr_ShowWindow(const char *winId, int special)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1210
{
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1211
  winbuf *win_entry;
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1212
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1213
  win_entry = scr_SearchWindow(winId, special);
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1214
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1215
  if (!win_entry) {
1154
f746d91c5d3b Rearranged duplicated code in screen.c
franky@teufel.fs
parents: 1142
diff changeset
  1216
    win_entry = scr_CreateWindow(winId, special, FALSE);
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1217
  }
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1218
180
42a33611233b [/trunk] Changeset 192 by mikael
mikael
parents: 178
diff changeset
  1219
  top_panel(win_entry->panel);
42a33611233b [/trunk] Changeset 192 by mikael
mikael
parents: 178
diff changeset
  1220
  currentWindow = win_entry;
42a33611233b [/trunk] Changeset 192 by mikael
mikael
parents: 178
diff changeset
  1221
  chatmode = TRUE;
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1222
  if (!win_entry->bd->lock)
889
ae93e69aaaaf Fix up pending message flag for the status special buffer
Mikael Berthe <mikael@lilotux.net>
parents: 888
diff changeset
  1223
    roster_msg_setflag(winId, special, FALSE);
ae93e69aaaaf Fix up pending message flag for the status special buffer
Mikael Berthe <mikael@lilotux.net>
parents: 888
diff changeset
  1224
  if (!special)
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1225
    roster_setflags(winId, ROSTER_FLAG_LOCK, TRUE);
874
293e8955075c Display a flag in the chat status line when the buffer is locked
Mikael Berthe <mikael@lilotux.net>
parents: 873
diff changeset
  1226
  update_roster = TRUE;
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1227
180
42a33611233b [/trunk] Changeset 192 by mikael
mikael
parents: 178
diff changeset
  1228
  // Refresh the window
42a33611233b [/trunk] Changeset 192 by mikael
mikael
parents: 178
diff changeset
  1229
  scr_UpdateWindow(win_entry);
42a33611233b [/trunk] Changeset 192 by mikael
mikael
parents: 178
diff changeset
  1230
42a33611233b [/trunk] Changeset 192 by mikael
mikael
parents: 178
diff changeset
  1231
  // Finished :)
42a33611233b [/trunk] Changeset 192 by mikael
mikael
parents: 178
diff changeset
  1232
  update_panels();
142
bb6fe91589b9 [/trunk] Changeset 154 by mikael
mikael
parents: 140
diff changeset
  1233
bb6fe91589b9 [/trunk] Changeset 154 by mikael
mikael
parents: 140
diff changeset
  1234
  top_panel(inputPanel);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1235
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1236
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1237
//  scr_ShowBuddyWindow()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1238
// Display the chat window buffer for the current buddy.
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1239
void scr_ShowBuddyWindow(void)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1240
{
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1056
diff changeset
  1241
  const gchar *bjid;
140
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
  1242
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1243
  if (!current_buddy) {
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1056
diff changeset
  1244
    bjid = NULL;
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1245
  } else {
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1056
diff changeset
  1246
    bjid = CURRENT_JID;
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1247
    if (buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_SPECIAL) {
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1248
      scr_ShowWindow(buddy_getname(BUDDATA(current_buddy)), TRUE);
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1249
      return;
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1250
    }
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1251
  }
140
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
  1252
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1056
diff changeset
  1253
  if (!bjid) {
140
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
  1254
    top_panel(chatPanel);
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1255
    top_panel(inputPanel);
140
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
  1256
    currentWindow = NULL;
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  1257
    return;
140
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
  1258
  }
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
  1259
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1056
diff changeset
  1260
  scr_ShowWindow(bjid, FALSE);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1261
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1262
865
cee8d6be04e1 Improve changeset a3db3ee8b99e, do not enable chatmode when refreshing
Mikael Berthe <mikael@lilotux.net>
parents: 858
diff changeset
  1263
//  scr_UpdateBuddyWindow()
cee8d6be04e1 Improve changeset a3db3ee8b99e, do not enable chatmode when refreshing
Mikael Berthe <mikael@lilotux.net>
parents: 858
diff changeset
  1264
// (Re)Display the current window.
cee8d6be04e1 Improve changeset a3db3ee8b99e, do not enable chatmode when refreshing
Mikael Berthe <mikael@lilotux.net>
parents: 858
diff changeset
  1265
// If chatmode is enabled, call scr_ShowBuddyWindow(),
cee8d6be04e1 Improve changeset a3db3ee8b99e, do not enable chatmode when refreshing
Mikael Berthe <mikael@lilotux.net>
parents: 858
diff changeset
  1266
// else display the chat window.
cee8d6be04e1 Improve changeset a3db3ee8b99e, do not enable chatmode when refreshing
Mikael Berthe <mikael@lilotux.net>
parents: 858
diff changeset
  1267
inline void scr_UpdateBuddyWindow(void)
cee8d6be04e1 Improve changeset a3db3ee8b99e, do not enable chatmode when refreshing
Mikael Berthe <mikael@lilotux.net>
parents: 858
diff changeset
  1268
{
cee8d6be04e1 Improve changeset a3db3ee8b99e, do not enable chatmode when refreshing
Mikael Berthe <mikael@lilotux.net>
parents: 858
diff changeset
  1269
  if (chatmode) {
cee8d6be04e1 Improve changeset a3db3ee8b99e, do not enable chatmode when refreshing
Mikael Berthe <mikael@lilotux.net>
parents: 858
diff changeset
  1270
    scr_ShowBuddyWindow();
cee8d6be04e1 Improve changeset a3db3ee8b99e, do not enable chatmode when refreshing
Mikael Berthe <mikael@lilotux.net>
parents: 858
diff changeset
  1271
    return;
cee8d6be04e1 Improve changeset a3db3ee8b99e, do not enable chatmode when refreshing
Mikael Berthe <mikael@lilotux.net>
parents: 858
diff changeset
  1272
  }
cee8d6be04e1 Improve changeset a3db3ee8b99e, do not enable chatmode when refreshing
Mikael Berthe <mikael@lilotux.net>
parents: 858
diff changeset
  1273
cee8d6be04e1 Improve changeset a3db3ee8b99e, do not enable chatmode when refreshing
Mikael Berthe <mikael@lilotux.net>
parents: 858
diff changeset
  1274
  top_panel(chatPanel);
cee8d6be04e1 Improve changeset a3db3ee8b99e, do not enable chatmode when refreshing
Mikael Berthe <mikael@lilotux.net>
parents: 858
diff changeset
  1275
  top_panel(inputPanel);
cee8d6be04e1 Improve changeset a3db3ee8b99e, do not enable chatmode when refreshing
Mikael Berthe <mikael@lilotux.net>
parents: 858
diff changeset
  1276
}
cee8d6be04e1 Improve changeset a3db3ee8b99e, do not enable chatmode when refreshing
Mikael Berthe <mikael@lilotux.net>
parents: 858
diff changeset
  1277
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1278
//  scr_WriteInWindow()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1279
// Write some text in the winId window (this usually is a jid).
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1280
// Use winId == NULL for the special status buffer.
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1281
// 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
  1282
// If this window doesn't exist, it is created.
184
b5aa2b9c425a [/trunk] Changeset 196 by mikael
mikael
parents: 181
diff changeset
  1283
void scr_WriteInWindow(const char *winId, const char *text, time_t timestamp,
1290
e42f48103609 Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1286
diff changeset
  1284
                       unsigned int prefix_flags, int force_show,
e42f48103609 Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1286
diff changeset
  1285
                       unsigned mucnicklen)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1286
{
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
  1287
  winbuf *win_entry;
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 771
diff changeset
  1288
  char *text_locale;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1289
  int dont_show = FALSE;
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1290
  int special;
1142
0e27177882c7 Small fix for the max_history_blocks option
Mikael Berthe <mikael@lilotux.net>
parents: 1141
diff changeset
  1291
  guint num_history_blocks;
873
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  1292
  bool setmsgflg = FALSE;
1296
7a0eaa53bd53 Further nick colors fixes
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1295
diff changeset
  1293
  char *nicktmp, *nicklocaltmp;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1294
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1295
  // Look for the window entry.
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1296
  special = (winId == NULL);
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1297
  win_entry = scr_SearchWindow(winId, special);
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1298
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1299
  // Do we have to really show the window?
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1300
  if (!chatmode)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1301
    dont_show = TRUE;
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1302
  else if ((!force_show) && ((!currentWindow || (currentWindow != win_entry))))
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1303
    dont_show = TRUE;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1304
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1305
  // If the window entry doesn't exist yet, let's create it.
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1306
  if (!win_entry) {
1154
f746d91c5d3b Rearranged duplicated code in screen.c
franky@teufel.fs
parents: 1142
diff changeset
  1307
    win_entry = scr_CreateWindow(winId, special, dont_show);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1308
  }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1309
220
8dfdc6f1778e [/trunk] Changeset 232 by mikael
mikael
parents: 197
diff changeset
  1310
  // The message must be displayed -> update top pointer
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1311
  if (win_entry->bd->cleared)
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1312
    win_entry->bd->top = g_list_last(win_entry->bd->hbuf);
220
8dfdc6f1778e [/trunk] Changeset 232 by mikael
mikael
parents: 197
diff changeset
  1313
1142
0e27177882c7 Small fix for the max_history_blocks option
Mikael Berthe <mikael@lilotux.net>
parents: 1141
diff changeset
  1314
  // Make sure we do not free the buffer while it's locked or when
0e27177882c7 Small fix for the max_history_blocks option
Mikael Berthe <mikael@lilotux.net>
parents: 1141
diff changeset
  1315
  // top is set.
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1316
  if (win_entry->bd->lock || win_entry->bd->top)
1142
0e27177882c7 Small fix for the max_history_blocks option
Mikael Berthe <mikael@lilotux.net>
parents: 1141
diff changeset
  1317
    num_history_blocks = 0U;
0e27177882c7 Small fix for the max_history_blocks option
Mikael Berthe <mikael@lilotux.net>
parents: 1141
diff changeset
  1318
  else
0e27177882c7 Small fix for the max_history_blocks option
Mikael Berthe <mikael@lilotux.net>
parents: 1141
diff changeset
  1319
    num_history_blocks = get_max_history_blocks();
0e27177882c7 Small fix for the max_history_blocks option
Mikael Berthe <mikael@lilotux.net>
parents: 1141
diff changeset
  1320
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 771
diff changeset
  1321
  text_locale = from_utf8(text);
1296
7a0eaa53bd53 Further nick colors fixes
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1295
diff changeset
  1322
  //Convert the nick alone and compute its length
7a0eaa53bd53 Further nick colors fixes
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1295
diff changeset
  1323
  if (mucnicklen) {
7a0eaa53bd53 Further nick colors fixes
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1295
diff changeset
  1324
    nicktmp = g_strndup(text, mucnicklen);
7a0eaa53bd53 Further nick colors fixes
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1295
diff changeset
  1325
    nicklocaltmp = from_utf8(nicktmp);
7a0eaa53bd53 Further nick colors fixes
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1295
diff changeset
  1326
    mucnicklen = strlen(nicklocaltmp);
7a0eaa53bd53 Further nick colors fixes
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1295
diff changeset
  1327
    g_free(nicklocaltmp);
7a0eaa53bd53 Further nick colors fixes
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1295
diff changeset
  1328
    g_free(nicktmp);
7a0eaa53bd53 Further nick colors fixes
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1295
diff changeset
  1329
  }
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1330
  hbuf_add_line(&win_entry->bd->hbuf, text_locale, timestamp, prefix_flags,
1487
f61ed2466f7c Minor style upgrade
Mikael Berthe <mikael@lilotux.net>
parents: 1486
diff changeset
  1331
                maxX - Roster_Width - scr_getprefixwidth(), num_history_blocks,
1333
e30a9d907105 Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents: 1314
diff changeset
  1332
                mucnicklen);
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 771
diff changeset
  1333
  g_free(text_locale);
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1334
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1335
  if (win_entry->bd->cleared) {
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1336
    win_entry->bd->cleared = FALSE;
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1337
    if (g_list_next(win_entry->bd->top))
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1338
      win_entry->bd->top = g_list_next(win_entry->bd->top);
220
8dfdc6f1778e [/trunk] Changeset 232 by mikael
mikael
parents: 197
diff changeset
  1339
  }
8dfdc6f1778e [/trunk] Changeset 232 by mikael
mikael
parents: 197
diff changeset
  1340
8dfdc6f1778e [/trunk] Changeset 232 by mikael
mikael
parents: 197
diff changeset
  1341
  // Make sure the last line appears in the window; update top if necessary
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1342
  if (!win_entry->bd->lock && win_entry->bd->top) {
220
8dfdc6f1778e [/trunk] Changeset 232 by mikael
mikael
parents: 197
diff changeset
  1343
    int dist;
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1344
    GList *first = g_list_first(win_entry->bd->hbuf);
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1345
    dist = g_list_position(first, g_list_last(win_entry->bd->hbuf)) -
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1346
           g_list_position(first, win_entry->bd->top);
220
8dfdc6f1778e [/trunk] Changeset 232 by mikael
mikael
parents: 197
diff changeset
  1347
    if (dist >= CHAT_WIN_HEIGHT)
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1348
      win_entry->bd->top = NULL;
108
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  1349
  }
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  1350
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1351
  if (!dont_show) {
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1352
    if (win_entry->bd->lock)
873
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  1353
      setmsgflg = TRUE;
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1354
    // Show and refresh the window
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1355
    top_panel(win_entry->panel);
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1356
    scr_UpdateWindow(win_entry);
142
bb6fe91589b9 [/trunk] Changeset 154 by mikael
mikael
parents: 140
diff changeset
  1357
    top_panel(inputPanel);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1358
    update_panels();
873
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  1359
  } else if (!(prefix_flags & HBB_PREFIX_NOFLAG)) {
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  1360
    setmsgflg = TRUE;
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  1361
  }
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  1362
  if (setmsgflg && !special) {
889
ae93e69aaaaf Fix up pending message flag for the status special buffer
Mikael Berthe <mikael@lilotux.net>
parents: 888
diff changeset
  1363
    if (special && !winId)
ae93e69aaaaf Fix up pending message flag for the status special buffer
Mikael Berthe <mikael@lilotux.net>
parents: 888
diff changeset
  1364
      winId = SPECIAL_BUFFER_STATUS_ID;
ae93e69aaaaf Fix up pending message flag for the status special buffer
Mikael Berthe <mikael@lilotux.net>
parents: 888
diff changeset
  1365
    roster_msg_setflag(winId, special, TRUE);
30
4ea2df449381 [/trunk] Changeset 46 by mikael
mikael
parents: 29
diff changeset
  1366
    update_roster = TRUE;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1367
  }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1368
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1369
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1370
//  scr_UpdateMainStatus()
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1371
// Redraw the main (bottom) status line.
724
264375fe7159 Fix a roster refresh issue
Mikael Berthe <mikael@lilotux.net>
parents: 723
diff changeset
  1372
void scr_UpdateMainStatus(int forceupdate)
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1373
{
773
e25b8a348ebd Screen updating functions use UTF-8
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
  1374
  char *sm = from_utf8(jb_getstatusmsg());
1514
939e2957f8a8 Add option "info" (suggested by lego)
franky@diable
parents: 1513
diff changeset
  1375
  const char *info = settings_opt_get("info");
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1376
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1377
  werase(mainstatusWnd);
1515
9013d23f0a86 Forgot those poor non-utf8 locale-souls
franky@diable
parents: 1514
diff changeset
  1378
  if (info) {
1519
ac5a2c262098 Cosmetics
Mikael Berthe <mikael@lilotux.net>
parents: 1518
diff changeset
  1379
    char *info_locale = from_utf8(info);
1514
939e2957f8a8 Add option "info" (suggested by lego)
franky@diable
parents: 1513
diff changeset
  1380
    mvwprintw(mainstatusWnd, 0, 0, "%c[%c] %s: %s",
939e2957f8a8 Add option "info" (suggested by lego)
franky@diable
parents: 1513
diff changeset
  1381
              (unread_msg(NULL) ? '#' : ' '),
939e2957f8a8 Add option "info" (suggested by lego)
franky@diable
parents: 1513
diff changeset
  1382
              imstatus2char[jb_getstatus()],
1519
ac5a2c262098 Cosmetics
Mikael Berthe <mikael@lilotux.net>
parents: 1518
diff changeset
  1383
              info_locale, (sm ? sm : ""));
ac5a2c262098 Cosmetics
Mikael Berthe <mikael@lilotux.net>
parents: 1518
diff changeset
  1384
    g_free(info_locale);
1515
9013d23f0a86 Forgot those poor non-utf8 locale-souls
franky@diable
parents: 1514
diff changeset
  1385
  } else
1514
939e2957f8a8 Add option "info" (suggested by lego)
franky@diable
parents: 1513
diff changeset
  1386
    mvwprintw(mainstatusWnd, 0, 0, "%c[%c] %s",
939e2957f8a8 Add option "info" (suggested by lego)
franky@diable
parents: 1513
diff changeset
  1387
              (unread_msg(NULL) ? '#' : ' '),
939e2957f8a8 Add option "info" (suggested by lego)
franky@diable
parents: 1513
diff changeset
  1388
              imstatus2char[jb_getstatus()], (sm ? sm : ""));
724
264375fe7159 Fix a roster refresh issue
Mikael Berthe <mikael@lilotux.net>
parents: 723
diff changeset
  1389
  if (forceupdate) {
264375fe7159 Fix a roster refresh issue
Mikael Berthe <mikael@lilotux.net>
parents: 723
diff changeset
  1390
    top_panel(inputPanel);
264375fe7159 Fix a roster refresh issue
Mikael Berthe <mikael@lilotux.net>
parents: 723
diff changeset
  1391
    update_panels();
264375fe7159 Fix a roster refresh issue
Mikael Berthe <mikael@lilotux.net>
parents: 723
diff changeset
  1392
  }
773
e25b8a348ebd Screen updating functions use UTF-8
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
  1393
  g_free(sm);
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1394
}
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1395
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1396
//  scr_DrawMainWindow()
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  1397
// 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
  1398
//
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1399
// 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
  1400
// expert... :-\   Mikael.
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1401
//
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1402
void scr_DrawMainWindow(unsigned int fullinit)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1403
{
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1404
  int requested_size;
961
95659cf9ea1a Display mcabber version in the status window
Mikael Berthe <mikael@lilotux.net>
parents: 952
diff changeset
  1405
  gchar *ver, *message;
972
11b632d824f6 Add option 'log_win_on_top'
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
  1406
  int chat_y_pos, chatstatus_y_pos, log_y_pos;
973
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1407
  int roster_x_pos, chat_x_pos;
518
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
  1408
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
  1409
  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
  1410
  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
  1411
  if (requested_size > 0) {
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1412
    if (maxY > requested_size + 3)
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1413
      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
  1414
    else
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
  1415
      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
  1416
  } else if (requested_size < 0) {
518
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
  1417
    Log_Win_Height = 3;
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
  1418
  }
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
  1419
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
  1420
  if (maxY < Log_Win_Height+2) {
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
  1421
    if (maxY < 5) {
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
  1422
      Log_Win_Height = 3;
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
  1423
      maxY = Log_Win_Height+2;
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
  1424
    } else {
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
  1425
      Log_Win_Height = maxY - 2;
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
  1426
    }
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
  1427
  }
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
  1428
707
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1429
  if (roster_hidden) {
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1430
    Roster_Width = 0;
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1431
  } else {
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1432
    requested_size = settings_opt_get_int("roster_width");
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1433
    if (requested_size > 1)
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1434
      Roster_Width = requested_size;
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1435
    else if (requested_size == 1)
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1436
      Roster_Width = 2;
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1437
    else
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1438
      Roster_Width = DEFAULT_ROSTER_WIDTH;
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1439
  }
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1440
972
11b632d824f6 Add option 'log_win_on_top'
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
  1441
  log_win_on_top = (settings_opt_get_int("log_win_on_top") == 1);
973
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1442
  roster_win_on_right = (settings_opt_get_int("roster_win_on_right") == 1);
972
11b632d824f6 Add option 'log_win_on_top'
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
  1443
11b632d824f6 Add option 'log_win_on_top'
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
  1444
  if (log_win_on_top) {
11b632d824f6 Add option 'log_win_on_top'
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
  1445
    chat_y_pos = Log_Win_Height-1;
11b632d824f6 Add option 'log_win_on_top'
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
  1446
    log_y_pos = 0;
11b632d824f6 Add option 'log_win_on_top'
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
  1447
    chatstatus_y_pos = Log_Win_Height-2;
11b632d824f6 Add option 'log_win_on_top'
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
  1448
  } else {
11b632d824f6 Add option 'log_win_on_top'
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
  1449
    chat_y_pos = 0;
11b632d824f6 Add option 'log_win_on_top'
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
  1450
    log_y_pos = CHAT_WIN_HEIGHT+1;
11b632d824f6 Add option 'log_win_on_top'
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
  1451
    chatstatus_y_pos = CHAT_WIN_HEIGHT;
11b632d824f6 Add option 'log_win_on_top'
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
  1452
  }
11b632d824f6 Add option 'log_win_on_top'
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
  1453
973
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1454
  if (roster_win_on_right) {
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1455
    roster_x_pos = maxX - Roster_Width;
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1456
    chat_x_pos = 0;
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1457
  } else {
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1458
    roster_x_pos = 0;
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1459
    chat_x_pos = Roster_Width;
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1460
  }
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1461
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  1462
  if (fullinit) {
1078
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
  1463
    if (!winbufhash)
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
  1464
      winbufhash = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  1465
    /* Create windows */
973
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1466
    rosterWnd = newwin(CHAT_WIN_HEIGHT, Roster_Width, chat_y_pos, roster_x_pos);
972
11b632d824f6 Add option 'log_win_on_top'
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
  1467
    chatWnd   = newwin(CHAT_WIN_HEIGHT, maxX - Roster_Width, chat_y_pos,
973
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1468
                       chat_x_pos);
1133
9dd28a56128f Do not create one panel per contact
Mikael Berthe <mikael@lilotux.net>
parents: 1131
diff changeset
  1469
    activechatWnd = newwin(CHAT_WIN_HEIGHT, maxX - Roster_Width, chat_y_pos,
9dd28a56128f Do not create one panel per contact
Mikael Berthe <mikael@lilotux.net>
parents: 1131
diff changeset
  1470
                           chat_x_pos);
972
11b632d824f6 Add option 'log_win_on_top'
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
  1471
    logWnd    = newwin(Log_Win_Height-2, maxX, log_y_pos, 0);
11b632d824f6 Add option 'log_win_on_top'
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
  1472
    chatstatusWnd = newwin(1, maxX, chatstatus_y_pos, 0);
711
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
  1473
    mainstatusWnd = newwin(1, maxX, maxY-2, 0);
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  1474
    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
  1475
    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
  1476
      scr_TerminateCurses();
6e4e667c5571 Fix a segfault when starting mcabber in a really small terminal
Mikael Berthe <mikael@lilotux.net>
parents: 339
diff changeset
  1477
      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
  1478
      exit(EXIT_FAILURE);
6e4e667c5571 Fix a segfault when starting mcabber in a really small terminal
Mikael Berthe <mikael@lilotux.net>
parents: 339
diff changeset
  1479
    }
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
  1480
    wbkgd(rosterWnd,      get_color(COLOR_GENERAL));
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
  1481
    wbkgd(chatWnd,        get_color(COLOR_GENERAL));
1133
9dd28a56128f Do not create one panel per contact
Mikael Berthe <mikael@lilotux.net>
parents: 1131
diff changeset
  1482
    wbkgd(activechatWnd,  get_color(COLOR_GENERAL));
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
  1483
    wbkgd(logWnd,         get_color(COLOR_GENERAL));
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
  1484
    wbkgd(chatstatusWnd,  get_color(COLOR_STATUS));
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
  1485
    wbkgd(mainstatusWnd,  get_color(COLOR_STATUS));
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  1486
  } else {
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1487
    /* Resize/move windows */
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1488
    wresize(rosterWnd, CHAT_WIN_HEIGHT, Roster_Width);
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1489
    wresize(chatWnd, CHAT_WIN_HEIGHT, maxX - Roster_Width);
711
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
  1490
    wresize(logWnd, Log_Win_Height-2, maxX);
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  1491
973
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1492
    mvwin(chatWnd, chat_y_pos, chat_x_pos);
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1493
    mvwin(rosterWnd, chat_y_pos, roster_x_pos);
972
11b632d824f6 Add option 'log_win_on_top'
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
  1494
    mvwin(logWnd, log_y_pos, 0);
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  1495
711
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
  1496
    // Resize & move chat status window
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
  1497
    wresize(chatstatusWnd, 1, maxX);
972
11b632d824f6 Add option 'log_win_on_top'
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
  1498
    mvwin(chatstatusWnd, chatstatus_y_pos, 0);
711
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
  1499
    // Resize & move main status window
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
  1500
    wresize(mainstatusWnd, 1, maxX);
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
  1501
    mvwin(mainstatusWnd, maxY-2, 0);
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
  1502
    // Resize & move input line window
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  1503
    wresize(inputWnd, 1, maxX);
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  1504
    mvwin(inputWnd, maxY-1, 0);
168
6ad156673b19 [/trunk] Changeset 180 by mikael
mikael
parents: 167
diff changeset
  1505
6ad156673b19 [/trunk] Changeset 180 by mikael
mikael
parents: 167
diff changeset
  1506
    werase(chatWnd);
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  1507
  }
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1508
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1509
  /* Draw/init windows */
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1510
961
95659cf9ea1a Display mcabber version in the status window
Mikael Berthe <mikael@lilotux.net>
parents: 952
diff changeset
  1511
  ver = mcabber_version();
95659cf9ea1a Display mcabber version in the status window
Mikael Berthe <mikael@lilotux.net>
parents: 952
diff changeset
  1512
  message = g_strdup_printf("MCabber version %s.\n", ver);
95659cf9ea1a Display mcabber version in the status window
Mikael Berthe <mikael@lilotux.net>
parents: 952
diff changeset
  1513
  mvwprintw(chatWnd, 0, 0, message);
1455
bec235cd28a8 Misc. documentation updates
Mikael Berthe <mikael@lilotux.net>
parents: 1454
diff changeset
  1514
  mvwprintw(chatWnd, 1, 0, "http://mcabber.com/");
961
95659cf9ea1a Display mcabber version in the status window
Mikael Berthe <mikael@lilotux.net>
parents: 952
diff changeset
  1515
  g_free(ver);
95659cf9ea1a Display mcabber version in the status window
Mikael Berthe <mikael@lilotux.net>
parents: 952
diff changeset
  1516
  g_free(message);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1517
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  1518
  // Auto-scrolling in log window
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
  1519
  scrollok(logWnd, TRUE);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1520
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1521
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1522
  if (fullinit) {
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  1523
    // Enable keypad (+ special keys)
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  1524
    keypad(inputWnd, TRUE);
1457
3a537b4d7f8d Fix UTF-8 on MirBSD (Thorsten Glaser)
Mikael Berthe <mikael@lilotux.net>
parents: 1455
diff changeset
  1525
#ifdef __MirBSD__
3a537b4d7f8d Fix UTF-8 on MirBSD (Thorsten Glaser)
Mikael Berthe <mikael@lilotux.net>
parents: 1455
diff changeset
  1526
    wtimeout(inputWnd, 50 /* ms */);
3a537b4d7f8d Fix UTF-8 on MirBSD (Thorsten Glaser)
Mikael Berthe <mikael@lilotux.net>
parents: 1455
diff changeset
  1527
#else
382
4c6e8392e465 Use nodelay() instead of halfdelay()
Mikael Berthe <mikael@lilotux.net>
parents: 374
diff changeset
  1528
    nodelay(inputWnd, TRUE);
1457
3a537b4d7f8d Fix UTF-8 on MirBSD (Thorsten Glaser)
Mikael Berthe <mikael@lilotux.net>
parents: 1455
diff changeset
  1529
#endif
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  1530
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1531
    // Create panels
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1532
    rosterPanel = new_panel(rosterWnd);
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1533
    chatPanel   = new_panel(chatWnd);
1133
9dd28a56128f Do not create one panel per contact
Mikael Berthe <mikael@lilotux.net>
parents: 1131
diff changeset
  1534
    activechatPanel = new_panel(activechatWnd);
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1535
    logPanel    = new_panel(logWnd);
711
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
  1536
    chatstatusPanel = new_panel(chatstatusWnd);
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
  1537
    mainstatusPanel = new_panel(mainstatusWnd);
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1538
    inputPanel  = new_panel(inputWnd);
232
9a6ba4b38e63 [/trunk] Changeset 245 by mikael
mikael
parents: 220
diff changeset
  1539
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1540
    // Build the buddylist at least once, to make sure the special buffer
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1541
    // is added
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1542
    buddylist_build();
1093
6ca9a65df21f Do not rewrap buffer lines when the chat window width doesn't change
Mikael Berthe <mikael@lilotux.net>
parents: 1089
diff changeset
  1543
6ca9a65df21f Do not rewrap buffer lines when the chat window width doesn't change
Mikael Berthe <mikael@lilotux.net>
parents: 1089
diff changeset
  1544
    // Init prev_chatwidth; this variable will be used to prevent us
6ca9a65df21f Do not rewrap buffer lines when the chat window width doesn't change
Mikael Berthe <mikael@lilotux.net>
parents: 1089
diff changeset
  1545
    // from rewrapping buffers when the width doesn't change.
1487
f61ed2466f7c Minor style upgrade
Mikael Berthe <mikael@lilotux.net>
parents: 1486
diff changeset
  1546
    prev_chatwidth = maxX - Roster_Width - scr_getprefixwidth();
851
da03534e46c7 Add startup log messages to the status buffer
Mikael Berthe <mikael@lilotux.net>
parents: 850
diff changeset
  1547
    // Wrap existing status buffer lines
1093
6ca9a65df21f Do not rewrap buffer lines when the chat window width doesn't change
Mikael Berthe <mikael@lilotux.net>
parents: 1089
diff changeset
  1548
    hbuf_rebuild(&statushbuf, prev_chatwidth);
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1549
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  1550
#ifndef UNICODE
232
9a6ba4b38e63 [/trunk] Changeset 245 by mikael
mikael
parents: 220
diff changeset
  1551
    if (utf8_mode)
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  1552
      scr_LogPrint(LPRINT_NORMAL,
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  1553
                   "WARNING: Compiled without full UTF-8 support!");
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  1554
#endif
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  1555
  } else {
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  1556
    // Update panels
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  1557
    replace_panel(rosterPanel, rosterWnd);
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  1558
    replace_panel(chatPanel, chatWnd);
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  1559
    replace_panel(logPanel, logWnd);
711
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
  1560
    replace_panel(chatstatusPanel, chatstatusWnd);
75dde88f1884 Introduce status lines
Mikael Berthe <mikael@lilotux.net>
parents: 709
diff changeset
  1561
    replace_panel(mainstatusPanel, mainstatusWnd);
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  1562
    replace_panel(inputPanel, inputWnd);
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1563
  }
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1564
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1565
  // We'll need to redraw the roster
149
9f74832eb4f8 [/trunk] Changeset 161 by mikael
mikael
parents: 148
diff changeset
  1566
  update_roster = TRUE;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1567
  return;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1568
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1569
1078
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
  1570
static void resize_win_buffer(gpointer key, gpointer value, gpointer data)
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1571
{
1078
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
  1572
  winbuf *wbp = value;
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
  1573
  struct dimensions *dim = data;
973
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1574
  int chat_x_pos, chat_y_pos;
1093
6ca9a65df21f Do not rewrap buffer lines when the chat window width doesn't change
Mikael Berthe <mikael@lilotux.net>
parents: 1089
diff changeset
  1575
  int new_chatwidth;
972
11b632d824f6 Add option 'log_win_on_top'
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
  1576
1078
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
  1577
  if (!(wbp && wbp->win))
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
  1578
    return;
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
  1579
972
11b632d824f6 Add option 'log_win_on_top'
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
  1580
  if (log_win_on_top)
11b632d824f6 Add option 'log_win_on_top'
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
  1581
    chat_y_pos = Log_Win_Height-1;
11b632d824f6 Add option 'log_win_on_top'
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
  1582
  else
11b632d824f6 Add option 'log_win_on_top'
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
  1583
    chat_y_pos = 0;
11b632d824f6 Add option 'log_win_on_top'
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
  1584
973
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1585
  if (roster_win_on_right)
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1586
    chat_x_pos = 0;
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1587
  else
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1588
    chat_x_pos = Roster_Width;
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1589
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1590
  // Resize/move buddy window
1078
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
  1591
  wresize(wbp->win, dim->l, dim->c);
973
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1592
  mvwin(wbp->win, chat_y_pos, chat_x_pos);
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1593
  werase(wbp->win);
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1594
  // If a panel exists, replace the old window with the new
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1595
  if (wbp->panel)
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1596
    replace_panel(wbp->panel, wbp->win);
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1597
  // Redo line wrapping
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1598
  wbp->bd->top = hbuf_previous_persistent(wbp->bd->top);
1093
6ca9a65df21f Do not rewrap buffer lines when the chat window width doesn't change
Mikael Berthe <mikael@lilotux.net>
parents: 1089
diff changeset
  1599
1487
f61ed2466f7c Minor style upgrade
Mikael Berthe <mikael@lilotux.net>
parents: 1486
diff changeset
  1600
  new_chatwidth = maxX - Roster_Width - scr_getprefixwidth();
1093
6ca9a65df21f Do not rewrap buffer lines when the chat window width doesn't change
Mikael Berthe <mikael@lilotux.net>
parents: 1089
diff changeset
  1601
  if (new_chatwidth != prev_chatwidth)
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1602
    hbuf_rebuild(&wbp->bd->hbuf, new_chatwidth);
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1603
}
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1604
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1605
//  scr_Resize()
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1606
// Function called when the window is resized.
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  1607
// - Resize windows
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1608
// - Rewrap lines in each buddy buffer
1059
875d2c9d399c Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1058
diff changeset
  1609
void scr_Resize(void)
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1610
{
1078
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
  1611
  struct dimensions dim;
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1612
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1613
  // First, update the global variables
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1614
  getmaxyx(stdscr, maxY, maxX);
518
9480a76471b6 Update Log_Win_Height when refreshing the screen
Mikael Berthe <mikael@lilotux.net>
parents: 515
diff changeset
  1615
  // 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
  1616
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1617
  // Make sure the cursor stays inside the window
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1618
  check_offset(0);
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1619
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  1620
  // Resize windows and update panels
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1621
  scr_DrawMainWindow(FALSE);
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1622
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1623
  // Resize all buddy windows
1078
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
  1624
  dim.l = CHAT_WIN_HEIGHT;
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
  1625
  dim.c = maxX - Roster_Width;
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
  1626
  if (dim.c < 1)
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
  1627
    dim.c = 1;
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
  1628
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
  1629
  // Resize all buffers
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
  1630
  g_hash_table_foreach(winbufhash, resize_win_buffer, &dim);
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1631
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1632
  // Resize/move special status buffer
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1633
  if (statusWindow)
1078
7866dbaf67a6 Use a hash for the list of win buffers
Mikael Berthe <mikael@lilotux.net>
parents: 1077
diff changeset
  1634
    resize_win_buffer(NULL, statusWindow, &dim);
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  1635
1093
6ca9a65df21f Do not rewrap buffer lines when the chat window width doesn't change
Mikael Berthe <mikael@lilotux.net>
parents: 1089
diff changeset
  1636
  // Update prev_chatwidth, now that all buffers have been resized
1487
f61ed2466f7c Minor style upgrade
Mikael Berthe <mikael@lilotux.net>
parents: 1486
diff changeset
  1637
  prev_chatwidth = maxX - Roster_Width - scr_getprefixwidth();
1093
6ca9a65df21f Do not rewrap buffer lines when the chat window width doesn't change
Mikael Berthe <mikael@lilotux.net>
parents: 1089
diff changeset
  1638
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1639
  // Refresh current buddy window
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  1640
  if (chatmode)
151
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1641
    scr_ShowBuddyWindow();
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1642
}
b69c0b7a23e3 [/trunk] Changeset 163 by mikael
mikael
parents: 149
diff changeset
  1643
721
9cf31c9b1dc4 Use room topic as a description in the chat status line
Mikael Berthe <mikael@lilotux.net>
parents: 720
diff changeset
  1644
//  scr_UpdateChatStatus(forceupdate)
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1645
// Redraw the buddy status bar.
939
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 936
diff changeset
  1646
// Set forceupdate to TRUE if update_panels() 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
  1647
void scr_UpdateChatStatus(int forceupdate)
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1648
{
848
a9161d2dc414 Introduce special buffer stuff
Mikael Berthe <mikael@lilotux.net>
parents: 843
diff changeset
  1649
  unsigned short btype, isgrp, ismuc, isspe;
1502
50dbbca69b55 Small style improvement of buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1489
diff changeset
  1650
  const char *btypetext = "Unknown";
717
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1651
  const char *fullname;
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1652
  const char *msg = NULL;
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1653
  char status;
773
e25b8a348ebd Screen updating functions use UTF-8
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
  1654
  char *buf, *buf_locale;
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1655
718
b41799901abd Add a new_message flag (#) in the main status line
Mikael Berthe <mikael@lilotux.net>
parents: 717
diff changeset
  1656
  // 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
  1657
  // at least to refresh the pending message flag.
724
264375fe7159 Fix a roster refresh issue
Mikael Berthe <mikael@lilotux.net>
parents: 723
diff changeset
  1658
  scr_UpdateMainStatus(FALSE);
718
b41799901abd Add a new_message flag (#) in the main status line
Mikael Berthe <mikael@lilotux.net>
parents: 717
diff changeset
  1659
806
3521e34f722a Fix a segfault when not connected to a server
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
  1660
  // Clear the line
3521e34f722a Fix a segfault when not connected to a server
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
  1661
  werase(chatstatusWnd);
3521e34f722a Fix a segfault when not connected to a server
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
  1662
3521e34f722a Fix a segfault when not connected to a server
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
  1663
  if (!current_buddy) {
3521e34f722a Fix a segfault when not connected to a server
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
  1664
    if (forceupdate) {
3521e34f722a Fix a segfault when not connected to a server
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
  1665
      update_panels();
3521e34f722a Fix a segfault when not connected to a server
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
  1666
    }
3521e34f722a Fix a segfault when not connected to a server
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
  1667
    return;
3521e34f722a Fix a segfault when not connected to a server
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
  1668
  }
3521e34f722a Fix a segfault when not connected to a server
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
  1669
717
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1670
  fullname = buddy_getname(BUDDATA(current_buddy));
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1671
  btype = buddy_gettype(BUDDATA(current_buddy));
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1672
1502
50dbbca69b55 Small style improvement of buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1489
diff changeset
  1673
  isgrp = ismuc = isspe = 0;
50dbbca69b55 Small style improvement of buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1489
diff changeset
  1674
  if (btype & ROSTER_TYPE_USER) {
50dbbca69b55 Small style improvement of buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1489
diff changeset
  1675
    btypetext = "Buddy";
50dbbca69b55 Small style improvement of buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1489
diff changeset
  1676
  } else if (btype & ROSTER_TYPE_GROUP) {
50dbbca69b55 Small style improvement of buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1489
diff changeset
  1677
    btypetext = "Group";
50dbbca69b55 Small style improvement of buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1489
diff changeset
  1678
    isgrp = 1;
50dbbca69b55 Small style improvement of buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1489
diff changeset
  1679
  } else if (btype & ROSTER_TYPE_AGENT) {
50dbbca69b55 Small style improvement of buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1489
diff changeset
  1680
    btypetext = "Agent";
50dbbca69b55 Small style improvement of buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1489
diff changeset
  1681
  } else if (btype & ROSTER_TYPE_ROOM) {
50dbbca69b55 Small style improvement of buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1489
diff changeset
  1682
    btypetext = "Room";
50dbbca69b55 Small style improvement of buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1489
diff changeset
  1683
    ismuc = 1;
50dbbca69b55 Small style improvement of buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1489
diff changeset
  1684
  } else if (btype & ROSTER_TYPE_SPECIAL) {
50dbbca69b55 Small style improvement of buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1489
diff changeset
  1685
    btypetext = "Special buffer";
50dbbca69b55 Small style improvement of buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1489
diff changeset
  1686
    isspe = 1;
50dbbca69b55 Small style improvement of buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1489
diff changeset
  1687
  }
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1688
1513
9d78b571e693 Show '#' for unread message per buddy on the buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1511
diff changeset
  1689
  if (chatmode) {
9d78b571e693 Show '#' for unread message per buddy on the buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1511
diff changeset
  1690
    wprintw(chatstatusWnd, "~");
9d78b571e693 Show '#' for unread message per buddy on the buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1511
diff changeset
  1691
  } else {
9d78b571e693 Show '#' for unread message per buddy on the buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1511
diff changeset
  1692
    unsigned short bflags = buddy_getflags(BUDDATA(current_buddy));
9d78b571e693 Show '#' for unread message per buddy on the buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1511
diff changeset
  1693
    if (bflags & ROSTER_FLAG_MSG) {
9d78b571e693 Show '#' for unread message per buddy on the buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1511
diff changeset
  1694
      // There is an unread message from the current buddy
9d78b571e693 Show '#' for unread message per buddy on the buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1511
diff changeset
  1695
      wprintw(chatstatusWnd, "#");
9d78b571e693 Show '#' for unread message per buddy on the buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1511
diff changeset
  1696
    }
9d78b571e693 Show '#' for unread message per buddy on the buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1511
diff changeset
  1697
  }
9d78b571e693 Show '#' for unread message per buddy on the buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1511
diff changeset
  1698
874
293e8955075c Display a flag in the chat status line when the buffer is locked
Mikael Berthe <mikael@lilotux.net>
parents: 873
diff changeset
  1699
  if (chatmode && !isgrp) {
293e8955075c Display a flag in the chat status line when the buffer is locked
Mikael Berthe <mikael@lilotux.net>
parents: 873
diff changeset
  1700
    winbuf *win_entry;
293e8955075c Display a flag in the chat status line when the buffer is locked
Mikael Berthe <mikael@lilotux.net>
parents: 873
diff changeset
  1701
    win_entry = scr_SearchWindow(buddy_getjid(BUDDATA(current_buddy)), isspe);
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  1702
    if (win_entry && win_entry->bd->lock)
874
293e8955075c Display a flag in the chat status line when the buffer is locked
Mikael Berthe <mikael@lilotux.net>
parents: 873
diff changeset
  1703
      mvwprintw(chatstatusWnd, 0, 0, "*");
293e8955075c Display a flag in the chat status line when the buffer is locked
Mikael Berthe <mikael@lilotux.net>
parents: 873
diff changeset
  1704
  }
293e8955075c Display a flag in the chat status line when the buffer is locked
Mikael Berthe <mikael@lilotux.net>
parents: 873
diff changeset
  1705
848
a9161d2dc414 Introduce special buffer stuff
Mikael Berthe <mikael@lilotux.net>
parents: 843
diff changeset
  1706
  if (isgrp || isspe) {
773
e25b8a348ebd Screen updating functions use UTF-8
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
  1707
    buf_locale = from_utf8(fullname);
1502
50dbbca69b55 Small style improvement of buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1489
diff changeset
  1708
    mvwprintw(chatstatusWnd, 0, 5, "%s: %s", btypetext, buf_locale);
773
e25b8a348ebd Screen updating functions use UTF-8
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
  1709
    g_free(buf_locale);
716
ba1137a01078 Add a chatmode flag (©) in the chat status line
Mikael Berthe <mikael@lilotux.net>
parents: 715
diff changeset
  1710
    if (forceupdate) {
ba1137a01078 Add a chatmode flag (©) in the chat status line
Mikael Berthe <mikael@lilotux.net>
parents: 715
diff changeset
  1711
      update_panels();
ba1137a01078 Add a chatmode flag (©) in the chat status line
Mikael Berthe <mikael@lilotux.net>
parents: 715
diff changeset
  1712
    }
717
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1713
    return;
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1714
  }
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1715
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1716
  status = '?';
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1717
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1718
  if (ismuc) {
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1719
    if (buddy_getinsideroom(BUDDATA(current_buddy)))
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1720
      status = 'C';
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1721
    else
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1722
      status = 'x';
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1723
  } else if (jb_getstatus() != offline) {
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1724
    enum imstatus budstate;
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1725
    budstate = buddy_getstatus(BUDDATA(current_buddy), NULL);
790
5d4ad1d77da4 Kill a few gcc4 warnings
Mikael Berthe <mikael@lilotux.net>
parents: 785
diff changeset
  1726
    if (budstate < imstatus_size)
717
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1727
      status = imstatus2char[budstate];
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1728
  }
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1729
1502
50dbbca69b55 Small style improvement of buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1489
diff changeset
  1730
  // No status message for MUC rooms
50dbbca69b55 Small style improvement of buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1489
diff changeset
  1731
  if (!ismuc) {
1522
5ef122b2bb75 Use the status string of the most likely resource in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 1521
diff changeset
  1732
    GSList *resources, *p_res, *p_next_res;
1072
2a3cfb98bd5e Fix memory leaks after calls to buddy_getresources()
Mikael Berthe <mikael@lilotux.net>
parents: 1059
diff changeset
  1733
    resources = buddy_getresources(BUDDATA(current_buddy));
1522
5ef122b2bb75 Use the status string of the most likely resource in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 1521
diff changeset
  1734
5ef122b2bb75 Use the status string of the most likely resource in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 1521
diff changeset
  1735
    for (p_res = resources ; p_res ; p_res = p_next_res) {
5ef122b2bb75 Use the status string of the most likely resource in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 1521
diff changeset
  1736
      p_next_res = g_slist_next(p_res);
5ef122b2bb75 Use the status string of the most likely resource in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 1521
diff changeset
  1737
      // Store the status message of the latest resource (highest priority)
5ef122b2bb75 Use the status string of the most likely resource in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 1521
diff changeset
  1738
      if (!p_next_res)
5ef122b2bb75 Use the status string of the most likely resource in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 1521
diff changeset
  1739
        msg = buddy_getstatusmsg(BUDDATA(current_buddy), p_res->data);
1072
2a3cfb98bd5e Fix memory leaks after calls to buddy_getresources()
Mikael Berthe <mikael@lilotux.net>
parents: 1059
diff changeset
  1740
      g_free(p_res->data);
1522
5ef122b2bb75 Use the status string of the most likely resource in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 1521
diff changeset
  1741
    }
1072
2a3cfb98bd5e Fix memory leaks after calls to buddy_getresources()
Mikael Berthe <mikael@lilotux.net>
parents: 1059
diff changeset
  1742
    g_slist_free(resources);
1502
50dbbca69b55 Small style improvement of buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1489
diff changeset
  1743
  } else {
721
9cf31c9b1dc4 Use room topic as a description in the chat status line
Mikael Berthe <mikael@lilotux.net>
parents: 720
diff changeset
  1744
    msg = buddy_gettopic(BUDDATA(current_buddy));
717
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1745
  }
1502
50dbbca69b55 Small style improvement of buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1489
diff changeset
  1746
50dbbca69b55 Small style improvement of buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1489
diff changeset
  1747
  if (msg)
50dbbca69b55 Small style improvement of buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1489
diff changeset
  1748
    buf = g_strdup_printf("[%c] %s: %s -- %s", status, btypetext, fullname, msg);
50dbbca69b55 Small style improvement of buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1489
diff changeset
  1749
  else
50dbbca69b55 Small style improvement of buddy status line
Maxim Vuets <maxim.vuets@gmail.com>
parents: 1489
diff changeset
  1750
    buf = g_strdup_printf("[%c] %s: %s", status, btypetext, fullname);
717
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1751
  replace_nl_with_dots(buf);
773
e25b8a348ebd Screen updating functions use UTF-8
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
  1752
  buf_locale = from_utf8(buf);
e25b8a348ebd Screen updating functions use UTF-8
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
  1753
  mvwprintw(chatstatusWnd, 0, 1, "%s", buf_locale);
e25b8a348ebd Screen updating functions use UTF-8
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
  1754
  g_free(buf_locale);
717
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1755
  g_free(buf);
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1756
996
f4d6570e2628 Chatstates: display contact chatstate in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
  1757
  // Display chatstates of the contact, if available.
f4d6570e2628 Chatstates: display contact chatstate in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
  1758
  if (btype & ROSTER_TYPE_USER) {
f4d6570e2628 Chatstates: display contact chatstate in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
  1759
    char eventchar = 0;
f4d6570e2628 Chatstates: display contact chatstate in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
  1760
    guint event;
f4d6570e2628 Chatstates: display contact chatstate in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
  1761
f4d6570e2628 Chatstates: display contact chatstate in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
  1762
    // We do not specify the resource here, so one of the resources with the
f4d6570e2628 Chatstates: display contact chatstate in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
  1763
    // highest priority will be used.
f4d6570e2628 Chatstates: display contact chatstate in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
  1764
    event = buddy_resource_getevents(BUDDATA(current_buddy), NULL);
f4d6570e2628 Chatstates: display contact chatstate in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
  1765
f4d6570e2628 Chatstates: display contact chatstate in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
  1766
    if (event == ROSTER_EVENT_ACTIVE)
f4d6570e2628 Chatstates: display contact chatstate in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
  1767
      eventchar = 'A';
f4d6570e2628 Chatstates: display contact chatstate in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
  1768
    else if (event == ROSTER_EVENT_COMPOSING)
f4d6570e2628 Chatstates: display contact chatstate in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
  1769
      eventchar = 'C';
f4d6570e2628 Chatstates: display contact chatstate in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
  1770
    else if (event == ROSTER_EVENT_PAUSED)
f4d6570e2628 Chatstates: display contact chatstate in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
  1771
      eventchar = 'P';
f4d6570e2628 Chatstates: display contact chatstate in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
  1772
    else if (event == ROSTER_EVENT_INACTIVE)
f4d6570e2628 Chatstates: display contact chatstate in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
  1773
      eventchar = 'I';
f4d6570e2628 Chatstates: display contact chatstate in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
  1774
    else if (event == ROSTER_EVENT_GONE)
f4d6570e2628 Chatstates: display contact chatstate in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
  1775
      eventchar = 'G';
f4d6570e2628 Chatstates: display contact chatstate in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
  1776
f4d6570e2628 Chatstates: display contact chatstate in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
  1777
    if (eventchar)
f4d6570e2628 Chatstates: display contact chatstate in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
  1778
      mvwprintw(chatstatusWnd, 0, maxX-3, "[%c]", eventchar);
f4d6570e2628 Chatstates: display contact chatstate in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
  1779
  }
f4d6570e2628 Chatstates: display contact chatstate in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
  1780
f4d6570e2628 Chatstates: display contact chatstate in the chat status bar
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
  1781
717
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1782
  if (forceupdate) {
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1783
    update_panels();
8ce2bfdc4143 Reindent update_chat_status_window()
Mikael Berthe <mikael@lilotux.net>
parents: 716
diff changeset
  1784
  }
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1785
}
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1786
1504
9fafea381eb8 Show the number of unfiltered contacts in folded groups
franky
parents: 1503
diff changeset
  1787
void increment_if_buddy_not_filtered(gpointer rosterdata, void *param)
9fafea381eb8 Show the number of unfiltered contacts in folded groups
franky
parents: 1503
diff changeset
  1788
{
9fafea381eb8 Show the number of unfiltered contacts in folded groups
franky
parents: 1503
diff changeset
  1789
  int *p = param;
9fafea381eb8 Show the number of unfiltered contacts in folded groups
franky
parents: 1503
diff changeset
  1790
  if (buddylist_is_status_filtered(buddy_getstatus(rosterdata, NULL)))
9fafea381eb8 Show the number of unfiltered contacts in folded groups
franky
parents: 1503
diff changeset
  1791
    *p=*p+1;
9fafea381eb8 Show the number of unfiltered contacts in folded groups
franky
parents: 1503
diff changeset
  1792
}
9fafea381eb8 Show the number of unfiltered contacts in folded groups
franky
parents: 1503
diff changeset
  1793
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  1794
//  scr_DrawRoster()
328
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  1795
// Display the buddylist (not really the roster) on the screen
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1796
void scr_DrawRoster(void)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1797
{
735
2f027806cd48 Some code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 731
diff changeset
  1798
  static int offset = 0;
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1799
  char *name, *rline;
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1800
  int maxx, maxy;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1801
  GList *buddy;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1802
  int i, n;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1803
  int rOffset;
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1804
  int cursor_backup;
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1805
  char status, pending;
164
faf534be8ff0 [/trunk] Changeset 176 by mikael
mikael
parents: 159
diff changeset
  1806
  enum imstatus currentstatus = jb_getstatus();
973
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1807
  int x_pos;
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1808
123
1bdf882bed98 [/trunk] Changeset 136 by mikael
mikael
parents: 121
diff changeset
  1809
  // We can reset update_roster
1bdf882bed98 [/trunk] Changeset 136 by mikael
mikael
parents: 121
diff changeset
  1810
  update_roster = FALSE;
1bdf882bed98 [/trunk] Changeset 136 by mikael
mikael
parents: 121
diff changeset
  1811
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1812
  getmaxyx(rosterWnd, maxy, maxx);
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1813
  maxx--;  // Last char is for vertical border
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1814
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1815
  cursor_backup = curs_set(0);
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1816
724
264375fe7159 Fix a roster refresh issue
Mikael Berthe <mikael@lilotux.net>
parents: 723
diff changeset
  1817
  if (!buddylist)
264375fe7159 Fix a roster refresh issue
Mikael Berthe <mikael@lilotux.net>
parents: 723
diff changeset
  1818
    offset = 0;
264375fe7159 Fix a roster refresh issue
Mikael Berthe <mikael@lilotux.net>
parents: 723
diff changeset
  1819
  else
264375fe7159 Fix a roster refresh issue
Mikael Berthe <mikael@lilotux.net>
parents: 723
diff changeset
  1820
    scr_UpdateChatStatus(FALSE);
264375fe7159 Fix a roster refresh issue
Mikael Berthe <mikael@lilotux.net>
parents: 723
diff changeset
  1821
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1822
  // Cleanup of roster window
168
6ad156673b19 [/trunk] Changeset 180 by mikael
mikael
parents: 167
diff changeset
  1823
  werase(rosterWnd);
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1824
707
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1825
  if (Roster_Width) {
973
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1826
    int line_x_pos = roster_win_on_right ? 0 : Roster_Width-1;
707
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1827
    // Redraw the vertical line (not very good...)
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
  1828
    wattrset(rosterWnd, get_color(COLOR_GENERAL));
707
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1829
    for (i=0 ; i < CHAT_WIN_HEIGHT ; i++)
973
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1830
      mvwaddch(rosterWnd, i, line_x_pos, ACS_VLINE);
707
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1831
  }
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1832
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1833
  // 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
  1834
  if (!buddylist || !Roster_Width) {
123
1bdf882bed98 [/trunk] Changeset 136 by mikael
mikael
parents: 121
diff changeset
  1835
    update_panels();
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1836
    curs_set(cursor_backup);
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1837
    return;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1838
  }
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1839
84
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
  1840
  // Update offset if necessary
680
1f8987e0e56c Try to display as many buddylist items as possible
Mikael Berthe <mikael@lilotux.net>
parents: 679
diff changeset
  1841
  // 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
  1842
  i = g_list_length(buddylist) - maxy;
682
f3945593432e Small fix in scr_DrawRoster()
Mikael Berthe <mikael@lilotux.net>
parents: 680
diff changeset
  1843
  if (i < 0)
f3945593432e Small fix in scr_DrawRoster()
Mikael Berthe <mikael@lilotux.net>
parents: 680
diff changeset
  1844
    i = 0;
f3945593432e Small fix in scr_DrawRoster()
Mikael Berthe <mikael@lilotux.net>
parents: 680
diff changeset
  1845
  if (i < offset)
680
1f8987e0e56c Try to display as many buddylist items as possible
Mikael Berthe <mikael@lilotux.net>
parents: 679
diff changeset
  1846
    offset = i;
1f8987e0e56c Try to display as many buddylist items as possible
Mikael Berthe <mikael@lilotux.net>
parents: 679
diff changeset
  1847
  // b) Make sure the current_buddy is visible
84
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
  1848
  i = g_list_position(buddylist, current_buddy);
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
  1849
  if (i == -1) { // This is bad
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
  1850
    scr_LogPrint(LPRINT_NORMAL, "Doh! Can't find current selected buddy!!");
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1851
    curs_set(cursor_backup);
84
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
  1852
    return;
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
  1853
  } else if (i < offset) {
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
  1854
    offset = i;
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
  1855
  } else if (i+1 > offset + maxy) {
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
  1856
    offset = i + 1 - maxy;
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
  1857
  }
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1858
973
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1859
  if (roster_win_on_right)
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1860
    x_pos = 1; // 1 char offset (vertical line)
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1861
  else
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1862
    x_pos = 0;
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1863
1026
fc6060707022 [BP] Fixes truncating utf-8 buddy names (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 966
diff changeset
  1864
  name = g_new0(char, 4*Roster_Width);
fc6060707022 [BP] Fixes truncating utf-8 buddy names (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 966
diff changeset
  1865
  rline = g_new0(char, 4*Roster_Width+1);
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1866
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1867
  buddy = buddylist;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1868
  rOffset = offset;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1869
84
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
  1870
  for (i=0; i<maxy && buddy; buddy = g_list_next(buddy)) {
848
a9161d2dc414 Introduce special buffer stuff
Mikael Berthe <mikael@lilotux.net>
parents: 843
diff changeset
  1871
    unsigned short bflags, btype, ismsg, isgrp, ismuc, ishid, isspe;
773
e25b8a348ebd Screen updating functions use UTF-8
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
  1872
    gchar *rline_locale;
1072
2a3cfb98bd5e Fix memory leaks after calls to buddy_getresources()
Mikael Berthe <mikael@lilotux.net>
parents: 1059
diff changeset
  1873
    GSList *resources, *p_res;
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1874
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1875
    bflags = buddy_getflags(BUDDATA(buddy));
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1876
    btype = buddy_gettype(BUDDATA(buddy));
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1877
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1878
    ismsg = bflags & ROSTER_FLAG_MSG;
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1879
    ishid = bflags & ROSTER_FLAG_HIDE;
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1880
    isgrp = btype  & ROSTER_TYPE_GROUP;
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1881
    ismuc = btype  & ROSTER_TYPE_ROOM;
848
a9161d2dc414 Introduce special buffer stuff
Mikael Berthe <mikael@lilotux.net>
parents: 843
diff changeset
  1882
    isspe = btype  & ROSTER_TYPE_SPECIAL;
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1883
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1884
    if (rOffset > 0) {
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1885
      rOffset--;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1886
      continue;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1887
    }
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1888
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1889
    status = '?';
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1890
    pending = ' ';
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1891
986
ed697234bd39 Chat states receival (Alexis Hildebrandt)
Mikael Berthe <mikael@lilotux.net>
parents: 981
diff changeset
  1892
    resources = buddy_getresources(BUDDATA(buddy));
1072
2a3cfb98bd5e Fix memory leaks after calls to buddy_getresources()
Mikael Berthe <mikael@lilotux.net>
parents: 1059
diff changeset
  1893
    for (p_res = resources ; p_res ; p_res = g_slist_next(p_res)) {
986
ed697234bd39 Chat states receival (Alexis Hildebrandt)
Mikael Berthe <mikael@lilotux.net>
parents: 981
diff changeset
  1894
      guint events = buddy_resource_getevents(BUDDATA(buddy),
1072
2a3cfb98bd5e Fix memory leaks after calls to buddy_getresources()
Mikael Berthe <mikael@lilotux.net>
parents: 1059
diff changeset
  1895
                                              p_res ? p_res->data : "");
2a3cfb98bd5e Fix memory leaks after calls to buddy_getresources()
Mikael Berthe <mikael@lilotux.net>
parents: 1059
diff changeset
  1896
      if ((events & ROSTER_EVENT_PAUSED) && pending != '+')
992
b37348c2aa79 Chatstates: display "paused" states in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 991
diff changeset
  1897
        pending = '.';
1072
2a3cfb98bd5e Fix memory leaks after calls to buddy_getresources()
Mikael Berthe <mikael@lilotux.net>
parents: 1059
diff changeset
  1898
      if (events & ROSTER_EVENT_COMPOSING)
987
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
  1899
        pending = '+';
1072
2a3cfb98bd5e Fix memory leaks after calls to buddy_getresources()
Mikael Berthe <mikael@lilotux.net>
parents: 1059
diff changeset
  1900
      g_free(p_res->data);
986
ed697234bd39 Chat states receival (Alexis Hildebrandt)
Mikael Berthe <mikael@lilotux.net>
parents: 981
diff changeset
  1901
    }
1072
2a3cfb98bd5e Fix memory leaks after calls to buddy_getresources()
Mikael Berthe <mikael@lilotux.net>
parents: 1059
diff changeset
  1902
    g_slist_free(resources);
986
ed697234bd39 Chat states receival (Alexis Hildebrandt)
Mikael Berthe <mikael@lilotux.net>
parents: 981
diff changeset
  1903
149
9f74832eb4f8 [/trunk] Changeset 161 by mikael
mikael
parents: 148
diff changeset
  1904
    // Display message notice if there is a message flag, but not
9f74832eb4f8 [/trunk] Changeset 161 by mikael
mikael
parents: 148
diff changeset
  1905
    // for unfolded groups.
9f74832eb4f8 [/trunk] Changeset 161 by mikael
mikael
parents: 148
diff changeset
  1906
    if (ismsg && (!isgrp || ishid)) {
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1907
      pending = '#';
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1908
    }
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1909
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1910
    if (ismuc) {
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1911
      if (buddy_getinsideroom(BUDDATA(buddy)))
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1912
        status = 'C';
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1913
      else
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1914
        status = 'x';
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1915
    } else if (currentstatus != offline) {
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1916
      enum imstatus budstate;
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1917
      budstate = buddy_getstatus(BUDDATA(buddy), NULL);
790
5d4ad1d77da4 Kill a few gcc4 warnings
Mikael Berthe <mikael@lilotux.net>
parents: 785
diff changeset
  1918
      if (budstate < imstatus_size)
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1919
        status = imstatus2char[budstate];
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1920
    }
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1921
    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
  1922
      if (pending == '#')
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
  1923
        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
  1924
      else
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
  1925
        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
  1926
      // The 3 following lines aim at coloring the whole line
973
e693cbe33802 Add option 'roster_win_on_right'
Mikael Berthe <mikael@lilotux.net>
parents: 972
diff changeset
  1927
      wmove(rosterWnd, i, x_pos);
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1928
      for (n = 0; n < maxx; n++)
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1929
        waddch(rosterWnd, ' ');
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1930
    } else {
149
9f74832eb4f8 [/trunk] Changeset 161 by mikael
mikael
parents: 148
diff changeset
  1931
      if (pending == '#')
739
0d5fb1d9077c Allow "bright" text colors
Mikael Berthe <mikael@lilotux.net>
parents: 735
diff changeset
  1932
        wattrset(rosterWnd, get_color(COLOR_ROSTERNMSG));
1272
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
  1933
      else {
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
  1934
        int color = get_color(COLOR_ROSTER);
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
  1935
        if ((!isspe) && (!isgrp)) {//Look for color rules
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
  1936
          GSList *head;
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
  1937
          const char *jid = buddy_getjid(BUDDATA(buddy));
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
  1938
          for (head = rostercolrules; head; head = g_slist_next(head)) {
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
  1939
            rostercolor *rc = head->data;
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
  1940
            if (g_pattern_match_string(rc->compiled, jid) &&
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
  1941
                (!strcmp("*", rc->status) || strchr(rc->status, status))) {
1489
e9c71ce96dca Fixed the colorhandling for mucnicks and /color roster
franky@veqlargh.fs
parents: 1488
diff changeset
  1942
              color = compose_color(rc->color);
1272
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
  1943
              break;
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
  1944
            }
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
  1945
          }
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
  1946
        }
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
  1947
        wattrset(rosterWnd, color);
033576acac4c Add configurable roster colors (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents: 1268
diff changeset
  1948
      }
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1949
    }
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1950
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1951
    if (Roster_Width > 7)
1026
fc6060707022 [BP] Fixes truncating utf-8 buddy names (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 966
diff changeset
  1952
      g_utf8_strncpy(name, buddy_getname(BUDDATA(buddy)), Roster_Width-7);
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1953
    else
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1954
      name[0] = 0;
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1955
149
9f74832eb4f8 [/trunk] Changeset 161 by mikael
mikael
parents: 148
diff changeset
  1956
    if (isgrp) {
1504
9fafea381eb8 Show the number of unfiltered contacts in folded groups
franky
parents: 1503
diff changeset
  1957
      if (ishid){
9fafea381eb8 Show the number of unfiltered contacts in folded groups
franky
parents: 1503
diff changeset
  1958
        int group_count = 0;
9fafea381eb8 Show the number of unfiltered contacts in folded groups
franky
parents: 1503
diff changeset
  1959
        foreach_group_member(BUDDATA(buddy), increment_if_buddy_not_filtered,
9fafea381eb8 Show the number of unfiltered contacts in folded groups
franky
parents: 1503
diff changeset
  1960
                             &group_count);
9fafea381eb8 Show the number of unfiltered contacts in folded groups
franky
parents: 1503
diff changeset
  1961
        snprintf(rline, 4*Roster_Width, " %c+++ %s (%i)", pending, name,
9fafea381eb8 Show the number of unfiltered contacts in folded groups
franky
parents: 1503
diff changeset
  1962
               group_count);
9fafea381eb8 Show the number of unfiltered contacts in folded groups
franky
parents: 1503
diff changeset
  1963
      }
133
a27b22e3b3a1 [/trunk] Changeset 146 by mikael
mikael
parents: 129
diff changeset
  1964
      else
1504
9fafea381eb8 Show the number of unfiltered contacts in folded groups
franky
parents: 1503
diff changeset
  1965
        snprintf(rline, 4*Roster_Width, " %c--- %s", pending, name);
848
a9161d2dc414 Introduce special buffer stuff
Mikael Berthe <mikael@lilotux.net>
parents: 843
diff changeset
  1966
    } else if (isspe) {
1168
eb05f960613f Fix UTF-8 group names in the roster (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 1160
diff changeset
  1967
      snprintf(rline, 4*Roster_Width, " %c%s", pending, name);
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1968
    } else {
824
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1969
      char sepleft  = '[';
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1970
      char sepright = ']';
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1971
      if (btype & ROSTER_TYPE_USER) {
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1972
        guint subtype = buddy_getsubscription(BUDDATA(buddy));
832
7c210263c661 Small scr_DrawRoster() fix
Mikael Berthe <mikael@lilotux.net>
parents: 828
diff changeset
  1973
        if (status == '_' && !(subtype & sub_to))
824
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1974
          status = '?';
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1975
        if (!(subtype & sub_from)) {
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1976
          sepleft  = '{';
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1977
          sepright = '}';
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1978
        }
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1979
      }
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1980
1026
fc6060707022 [BP] Fixes truncating utf-8 buddy names (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 966
diff changeset
  1981
      snprintf(rline, 4*Roster_Width,
824
37ef269330f0 Show incomplete subscriptions in the roster
Mikael Berthe <mikael@lilotux.net>
parents: 822
diff changeset
  1982
               " %c%c%c%c %s", pending, sepleft, status, sepright, name);
133
a27b22e3b3a1 [/trunk] Changeset 146 by mikael
mikael
parents: 129
diff changeset
  1983
    }
84
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
  1984
773
e25b8a348ebd Screen updating functions use UTF-8
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
  1985
    rline_locale = from_utf8(rline);
981
553b8ecf901f Fixes truncating of utf-8 buddy names (again)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 980
diff changeset
  1986
    mvwprintw(rosterWnd, i, x_pos, "%s", rline_locale);
773
e25b8a348ebd Screen updating functions use UTF-8
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
  1987
    g_free(rline_locale);
84
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
  1988
    i++;
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1989
  }
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1990
701
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1991
  g_free(rline);
6c100adfbfb6 Add setting "roster_width" (variable buddylist width)
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
  1992
  g_free(name);
142
bb6fe91589b9 [/trunk] Changeset 154 by mikael
mikael
parents: 140
diff changeset
  1993
  top_panel(inputPanel);
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  1994
  update_panels();
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 712
diff changeset
  1995
  curs_set(cursor_backup);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1996
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  1997
707
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1998
//  scr_RosterVisibility(status)
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  1999
// Set the roster visibility:
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  2000
// status=1   Show roster
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  2001
// status=0   Hide roster
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  2002
// status=-1  Toggle roster status
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  2003
void scr_RosterVisibility(int status)
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  2004
{
708
ed326697e4ed scr_RosterVisibility(): do not refresh when it is not needed
Mikael Berthe <mikael@lilotux.net>
parents: 707
diff changeset
  2005
  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
  2006
707
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  2007
  if (status > 0)
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  2008
    roster_hidden = FALSE;
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  2009
  else if (status == 0)
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  2010
    roster_hidden = TRUE;
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  2011
  else
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  2012
    roster_hidden = !roster_hidden;
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  2013
708
ed326697e4ed scr_RosterVisibility(): do not refresh when it is not needed
Mikael Berthe <mikael@lilotux.net>
parents: 707
diff changeset
  2014
  if (roster_hidden != old_roster_status) {
ed326697e4ed scr_RosterVisibility(): do not refresh when it is not needed
Mikael Berthe <mikael@lilotux.net>
parents: 707
diff changeset
  2015
    // 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
  2016
    scr_Resize();
ed326697e4ed scr_RosterVisibility(): do not refresh when it is not needed
Mikael Berthe <mikael@lilotux.net>
parents: 707
diff changeset
  2017
    redrawwin(stdscr);
ed326697e4ed scr_RosterVisibility(): do not refresh when it is not needed
Mikael Berthe <mikael@lilotux.net>
parents: 707
diff changeset
  2018
  }
707
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  2019
}
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 701
diff changeset
  2020
1521
33f8f795abd2 Check for regex support in glib
Mikael Berthe <mikael@lilotux.net>
parents: 1520
diff changeset
  2021
#ifdef HAVE_GLIB_REGEX
33f8f795abd2 Check for regex support in glib
Mikael Berthe <mikael@lilotux.net>
parents: 1520
diff changeset
  2022
static inline void scr_LogUrls(const gchar *string)
1520
41d3457af815 Add option "url_regex"
franky@diable.fs
parents: 1519
diff changeset
  2023
{
41d3457af815 Add option "url_regex"
franky@diable.fs
parents: 1519
diff changeset
  2024
  GMatchInfo *match_info;
41d3457af815 Add option "url_regex"
franky@diable.fs
parents: 1519
diff changeset
  2025
  GError *error = NULL;
41d3457af815 Add option "url_regex"
franky@diable.fs
parents: 1519
diff changeset
  2026
41d3457af815 Add option "url_regex"
franky@diable.fs
parents: 1519
diff changeset
  2027
  g_regex_match_full(url_regex, string, -1, 0, 0, &match_info, &error);
41d3457af815 Add option "url_regex"
franky@diable.fs
parents: 1519
diff changeset
  2028
  while (g_match_info_matches(match_info)) {
41d3457af815 Add option "url_regex"
franky@diable.fs
parents: 1519
diff changeset
  2029
    gchar *url = g_match_info_fetch(match_info, 0);
41d3457af815 Add option "url_regex"
franky@diable.fs
parents: 1519
diff changeset
  2030
    scr_print_logwindow(url);
41d3457af815 Add option "url_regex"
franky@diable.fs
parents: 1519
diff changeset
  2031
    g_free(url);
41d3457af815 Add option "url_regex"
franky@diable.fs
parents: 1519
diff changeset
  2032
    g_match_info_next(match_info, &error);
41d3457af815 Add option "url_regex"
franky@diable.fs
parents: 1519
diff changeset
  2033
  }
41d3457af815 Add option "url_regex"
franky@diable.fs
parents: 1519
diff changeset
  2034
  g_match_info_free(match_info);
41d3457af815 Add option "url_regex"
franky@diable.fs
parents: 1519
diff changeset
  2035
}
1521
33f8f795abd2 Check for regex support in glib
Mikael Berthe <mikael@lilotux.net>
parents: 1520
diff changeset
  2036
#endif
1520
41d3457af815 Add option "url_regex"
franky@diable.fs
parents: 1519
diff changeset
  2037
1558
3df441efb7c2 Fix gcc warnings related to inline/static uses
Mikael Berthe <mikael@lilotux.net>
parents: 1522
diff changeset
  2038
void scr_WriteMessage(const char *bjid, const char *text,
3df441efb7c2 Fix gcc warnings related to inline/static uses
Mikael Berthe <mikael@lilotux.net>
parents: 1522
diff changeset
  2039
                      time_t timestamp, guint prefix_flags,
3df441efb7c2 Fix gcc warnings related to inline/static uses
Mikael Berthe <mikael@lilotux.net>
parents: 1522
diff changeset
  2040
                      unsigned mucnicklen)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  2041
{
727
1c3620668857 Expand tabs when reading history files
Mikael Berthe <mikael@lilotux.net>
parents: 726
diff changeset
  2042
  char *xtext;
725
1aff92625bdb Expand tabs when receiving a message
Mikael Berthe <mikael@lilotux.net>
parents: 724
diff changeset
  2043
726
51be2bc1a820 Better tab expansion
Mikael Berthe <mikael@lilotux.net>
parents: 725
diff changeset
  2044
  if (!timestamp) timestamp = time(NULL);
725
1aff92625bdb Expand tabs when receiving a message
Mikael Berthe <mikael@lilotux.net>
parents: 724
diff changeset
  2045
1122
648fe6f715a6 Filter out ^M (0x0d) characters in incoming messages
Mikael Berthe <mikael@lilotux.net>
parents: 1115
diff changeset
  2046
  xtext = ut_expand_tabs(text); // Expand tabs and filter out some chars
726
51be2bc1a820 Better tab expansion
Mikael Berthe <mikael@lilotux.net>
parents: 725
diff changeset
  2047
1290
e42f48103609 Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1286
diff changeset
  2048
  scr_WriteInWindow(bjid, xtext, timestamp, prefix_flags, FALSE, mucnicklen);
725
1aff92625bdb Expand tabs when receiving a message
Mikael Berthe <mikael@lilotux.net>
parents: 724
diff changeset
  2049
1aff92625bdb Expand tabs when receiving a message
Mikael Berthe <mikael@lilotux.net>
parents: 724
diff changeset
  2050
  if (xtext != (char*)text)
1aff92625bdb Expand tabs when receiving a message
Mikael Berthe <mikael@lilotux.net>
parents: 724
diff changeset
  2051
    g_free(xtext);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  2052
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  2053
726
51be2bc1a820 Better tab expansion
Mikael Berthe <mikael@lilotux.net>
parents: 725
diff changeset
  2054
// If prefix is NULL, HBB_PREFIX_IN is supposed.
51be2bc1a820 Better tab expansion
Mikael Berthe <mikael@lilotux.net>
parents: 725
diff changeset
  2055
void scr_WriteIncomingMessage(const char *jidfrom, const char *text,
1290
e42f48103609 Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1286
diff changeset
  2056
        time_t timestamp, guint prefix, unsigned mucnicklen)
726
51be2bc1a820 Better tab expansion
Mikael Berthe <mikael@lilotux.net>
parents: 725
diff changeset
  2057
{
1055
6eb1efea75d0 PGP: Visual encryption flag
Mikael Berthe <mikael@lilotux.net>
parents: 1050
diff changeset
  2058
  if (!(prefix &
1204
e802ec0c02d2 Basic support for nick highlighting in MUC rooms (the whole line is colored)
Mikael Berthe <mikael@lilotux.net>
parents: 1190
diff changeset
  2059
        ~HBB_PREFIX_NOFLAG & ~HBB_PREFIX_HLIGHT & ~HBB_PREFIX_HLIGHT_OUT &
1484
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1483
diff changeset
  2060
        ~HBB_PREFIX_PGPCRYPT & ~HBB_PREFIX_OTRCRYPT))
726
51be2bc1a820 Better tab expansion
Mikael Berthe <mikael@lilotux.net>
parents: 725
diff changeset
  2061
    prefix |= HBB_PREFIX_IN;
51be2bc1a820 Better tab expansion
Mikael Berthe <mikael@lilotux.net>
parents: 725
diff changeset
  2062
1521
33f8f795abd2 Check for regex support in glib
Mikael Berthe <mikael@lilotux.net>
parents: 1520
diff changeset
  2063
#ifdef HAVE_GLIB_REGEX
1520
41d3457af815 Add option "url_regex"
franky@diable.fs
parents: 1519
diff changeset
  2064
  if (url_regex)
41d3457af815 Add option "url_regex"
franky@diable.fs
parents: 1519
diff changeset
  2065
    scr_LogUrls(text);
1521
33f8f795abd2 Check for regex support in glib
Mikael Berthe <mikael@lilotux.net>
parents: 1520
diff changeset
  2066
#endif
1290
e42f48103609 Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1286
diff changeset
  2067
  scr_WriteMessage(jidfrom, text, timestamp, prefix, mucnicklen);
726
51be2bc1a820 Better tab expansion
Mikael Berthe <mikael@lilotux.net>
parents: 725
diff changeset
  2068
}
51be2bc1a820 Better tab expansion
Mikael Berthe <mikael@lilotux.net>
parents: 725
diff changeset
  2069
1055
6eb1efea75d0 PGP: Visual encryption flag
Mikael Berthe <mikael@lilotux.net>
parents: 1050
diff changeset
  2070
void scr_WriteOutgoingMessage(const char *jidto, const char *text, guint prefix)
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents: 44
diff changeset
  2071
{
1115
922a9ae1a17e Fix /say_to to a member of a folded group
Mikael Berthe <mikael@lilotux.net>
parents: 1093
diff changeset
  2072
  GSList *roster_elt;
922a9ae1a17e Fix /say_to to a member of a folded group
Mikael Berthe <mikael@lilotux.net>
parents: 1093
diff changeset
  2073
  roster_elt = roster_find(jidto, jidsearch,
922a9ae1a17e Fix /say_to to a member of a folded group
Mikael Berthe <mikael@lilotux.net>
parents: 1093
diff changeset
  2074
                           ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_ROOM);
922a9ae1a17e Fix /say_to to a member of a folded group
Mikael Berthe <mikael@lilotux.net>
parents: 1093
diff changeset
  2075
1333
e30a9d907105 Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents: 1314
diff changeset
  2076
  scr_WriteMessage(jidto, text,
e30a9d907105 Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents: 1314
diff changeset
  2077
                   0, prefix|HBB_PREFIX_OUT|HBB_PREFIX_HLIGHT_OUT, 0);
1115
922a9ae1a17e Fix /say_to to a member of a folded group
Mikael Berthe <mikael@lilotux.net>
parents: 1093
diff changeset
  2078
922a9ae1a17e Fix /say_to to a member of a folded group
Mikael Berthe <mikael@lilotux.net>
parents: 1093
diff changeset
  2079
  // Show jidto's buffer unless the buddy is not in the buddylist
922a9ae1a17e Fix /say_to to a member of a folded group
Mikael Berthe <mikael@lilotux.net>
parents: 1093
diff changeset
  2080
  if (roster_elt && g_list_position(buddylist, roster_elt->data) != -1)
922a9ae1a17e Fix /say_to to a member of a folded group
Mikael Berthe <mikael@lilotux.net>
parents: 1093
diff changeset
  2081
    scr_ShowWindow(jidto, FALSE);
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents: 44
diff changeset
  2082
}
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents: 44
diff changeset
  2083
935
97e6a6da2b2c Fix ncurses #include (again)
Mikael Berthe <mikael@lilotux.net>
parents: 933
diff changeset
  2084
static inline void set_autoaway(bool setaway)
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2085
{
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2086
  static enum imstatus oldstatus;
521
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  2087
  static char *oldmsg;
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2088
  Autoaway = setaway;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2089
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2090
  if (setaway) {
521
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  2091
    const char *msg, *prevmsg;
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2092
    oldstatus = jb_getstatus();
521
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  2093
    if (oldmsg) {
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  2094
      g_free(oldmsg);
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  2095
      oldmsg = NULL;
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  2096
    }
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  2097
    prevmsg = jb_getstatusmsg();
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2098
    msg = settings_opt_get("message_autoaway");
521
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  2099
    if (!msg)
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  2100
      msg = prevmsg;
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  2101
    if (prevmsg)
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  2102
      oldmsg = g_strdup(prevmsg);
1056
5b3ecae91c95 PGP: sign auto-away presence too
Mikael Berthe <mikael@lilotux.net>
parents: 1055
diff changeset
  2103
    jb_setstatus(away, NULL, msg, FALSE);
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2104
  } else {
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2105
    // Back
1050
ea71d31a2607 PGP: Do not sign presence messages to chatrooms
Mikael Berthe <mikael@lilotux.net>
parents: 1037
diff changeset
  2106
    jb_setstatus(oldstatus, NULL, (oldmsg ? oldmsg : ""), FALSE);
521
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  2107
    if (oldmsg) {
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  2108
      g_free(oldmsg);
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  2109
      oldmsg = NULL;
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 518
diff changeset
  2110
    }
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2111
  }
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2112
}
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2113
991
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2114
long int scr_GetAutoAwayTimeout(time_t now)
939
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 936
diff changeset
  2115
{
940
fc30221b952d Fix an autoaway problem
Mikael Berthe <mikael@lilotux.net>
parents: 939
diff changeset
  2116
  enum imstatus cur_st;
939
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 936
diff changeset
  2117
  unsigned int autoaway_timeout = settings_opt_get_int("autoaway");
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 936
diff changeset
  2118
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 936
diff changeset
  2119
  if (Autoaway || !autoaway_timeout)
940
fc30221b952d Fix an autoaway problem
Mikael Berthe <mikael@lilotux.net>
parents: 939
diff changeset
  2120
    return 86400;
939
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 936
diff changeset
  2121
940
fc30221b952d Fix an autoaway problem
Mikael Berthe <mikael@lilotux.net>
parents: 939
diff changeset
  2122
  cur_st = jb_getstatus();
fc30221b952d Fix an autoaway problem
Mikael Berthe <mikael@lilotux.net>
parents: 939
diff changeset
  2123
  // Auto-away is disabled for the following states
fc30221b952d Fix an autoaway problem
Mikael Berthe <mikael@lilotux.net>
parents: 939
diff changeset
  2124
  if ((cur_st != available) && (cur_st != freeforchat))
fc30221b952d Fix an autoaway problem
Mikael Berthe <mikael@lilotux.net>
parents: 939
diff changeset
  2125
    return 86400;
fc30221b952d Fix an autoaway problem
Mikael Berthe <mikael@lilotux.net>
parents: 939
diff changeset
  2126
fc30221b952d Fix an autoaway problem
Mikael Berthe <mikael@lilotux.net>
parents: 939
diff changeset
  2127
  if (now >= LastActivity + (time_t)autoaway_timeout)
939
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 936
diff changeset
  2128
    return 0;
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 936
diff changeset
  2129
  else
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 936
diff changeset
  2130
    return LastActivity + (time_t)autoaway_timeout - now;
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 936
diff changeset
  2131
}
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 936
diff changeset
  2132
991
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2133
//  set_chatstate(state)
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2134
// Set the current chat state (0=active, 1=composing, 2=paused)
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2135
// If the chat state has changed, call jb_send_chatstate()
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2136
static inline void set_chatstate(int state)
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2137
{
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2138
#if defined JEP0022 || defined JEP0085
993
0759f4c7da68 Add option 'disable_chatstates'
Mikael Berthe <mikael@lilotux.net>
parents: 992
diff changeset
  2139
  if (chatstates_disabled)
0759f4c7da68 Add option 'disable_chatstates'
Mikael Berthe <mikael@lilotux.net>
parents: 992
diff changeset
  2140
    return;
991
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2141
  if (!chatmode)
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2142
    state = 0;
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2143
  if (state != chatstate) {
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2144
    chatstate = state;
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2145
    if (current_buddy &&
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2146
        buddy_gettype(BUDDATA(current_buddy)) == ROSTER_TYPE_USER) {
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2147
      guint jep_state;
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2148
      if (chatstate == 1)
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2149
        jep_state = ROSTER_EVENT_COMPOSING;
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2150
      else if (chatstate == 2)
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2151
        jep_state = ROSTER_EVENT_PAUSED;
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2152
      else
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2153
        jep_state = ROSTER_EVENT_ACTIVE;
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2154
      jb_send_chatstate(BUDDATA(current_buddy), jep_state);
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2155
    }
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2156
    if (!chatstate)
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2157
      chatstate_timestamp = 0;
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2158
  }
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2159
#endif
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2160
}
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2161
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2162
#if defined JEP0022 || defined JEP0085
1558
3df441efb7c2 Fix gcc warnings related to inline/static uses
Mikael Berthe <mikael@lilotux.net>
parents: 1522
diff changeset
  2163
long int scr_GetChatStatesTimeout(time_t now)
991
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2164
{
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2165
  // Check if we're currently composing...
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2166
  if (chatstate != 1 || !chatstate_timestamp)
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2167
    return 86400;
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2168
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2169
  // If the timeout is reached, let's change the state right now.
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2170
  if (now >= chatstate_timestamp + COMPOSING_TIMEOUT) {
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2171
    chatstate_timestamp = now;
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2172
    set_chatstate(2);
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2173
    return 86400;
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2174
  }
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2175
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2176
 return chatstate_timestamp + COMPOSING_TIMEOUT - now;
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2177
}
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2178
#endif
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  2179
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2180
// Check if we should enter/leave automatic away status
935
97e6a6da2b2c Fix ncurses #include (again)
Mikael Berthe <mikael@lilotux.net>
parents: 933
diff changeset
  2181
void scr_CheckAutoAway(int activity)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  2182
{
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2183
  enum imstatus cur_st;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2184
  unsigned int autoaway_timeout = settings_opt_get_int("autoaway");
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2185
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2186
  if (Autoaway && activity) set_autoaway(FALSE);
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2187
  if (!autoaway_timeout) return;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2188
  if (!LastActivity || activity) time(&LastActivity);
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2189
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2190
  cur_st = jb_getstatus();
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2191
  // Auto-away is disabled for the following states
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2192
  if ((cur_st != available) && (cur_st != freeforchat))
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2193
    return;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2194
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2195
  if (!activity) {
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2196
    time_t now;
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2197
    time(&now);
735
2f027806cd48 Some code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 731
diff changeset
  2198
    if (!Autoaway && (now > LastActivity + (time_t)autoaway_timeout))
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2199
      set_autoaway(TRUE);
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  2200
  }
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  2201
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  2202
328
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  2203
//  set_current_buddy(newbuddy)
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  2204
// 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
  2205
// 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
  2206
static void set_current_buddy(GList *newbuddy)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  2207
{
328
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  2208
  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
  2209
  /* 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
  2210
   * 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
  2211
   * buddy_getstatus() call.
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  2212
   */
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  2213
329
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  2214
  if (!current_buddy || !newbuddy)  return;
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  2215
  if (newbuddy == current_buddy)    return;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  2216
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 987
diff changeset
  2217
  // We're moving to another buddy.  We're thus inactive wrt current_buddy.
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 987
diff changeset
  2218
  set_chatstate(0);
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 987
diff changeset
  2219
  // We don't want the chatstate to be changed again right now.
1381
40095d413da9 Fix compilation on OpenBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1376
diff changeset
  2220
  lock_chatstate = TRUE;
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 987
diff changeset
  2221
438
b44be19d6229 Handle multiple resources for the same buddy
Mikael Berthe <mikael@lilotux.net>
parents: 419
diff changeset
  2222
  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
  2223
  buddy_setflags(BUDDATA(current_buddy), ROSTER_FLAG_LOCK, FALSE);
330
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 329
diff changeset
  2224
  if (chatmode)
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 329
diff changeset
  2225
    alternate_buddy = current_buddy;
328
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  2226
  current_buddy = newbuddy;
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  2227
  // 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
  2228
  if (chatmode)
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  2229
    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
  2230
  // 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
  2231
  // 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
  2232
  // and hide_offline_buddies is TRUE.  In which case we need to rebuild.
1311
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2233
  if (!(buddylist_get_filter() & 1<<prev_st))
328
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  2234
    buddylist_build();
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  2235
  update_roster = TRUE;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  2236
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  2237
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  2238
//  scr_RosterTop()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  2239
// Go to the first buddy in the buddylist
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  2240
void scr_RosterTop(void)
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  2241
{
328
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  2242
  set_current_buddy(buddylist);
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  2243
  if (chatmode)
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  2244
    scr_ShowBuddyWindow();
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  2245
}
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  2246
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  2247
//  scr_RosterBottom()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  2248
// Go to the last buddy in the buddylist
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  2249
void scr_RosterBottom(void)
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  2250
{
328
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  2251
  set_current_buddy(g_list_last(buddylist));
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  2252
  if (chatmode)
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  2253
    scr_ShowBuddyWindow();
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  2254
}
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  2255
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  2256
//  scr_RosterUp()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  2257
// Go to the previous buddy in the buddylist
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  2258
void scr_RosterUp(void)
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  2259
{
328
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  2260
  set_current_buddy(g_list_previous(current_buddy));
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  2261
  if (chatmode)
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  2262
    scr_ShowBuddyWindow();
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  2263
}
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  2264
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  2265
//  scr_RosterDown()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  2266
// Go to the next buddy in the buddylist
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  2267
void scr_RosterDown(void)
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  2268
{
328
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  2269
  set_current_buddy(g_list_next(current_buddy));
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  2270
  if (chatmode)
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
  2271
    scr_ShowBuddyWindow();
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  2272
}
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
  2273
1086
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2274
//  scr_RosterPrevGroup()
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2275
// Go to the previous group in the buddylist
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2276
void scr_RosterPrevGroup(void)
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2277
{
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2278
  GList *bud;
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2279
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2280
  for (bud = current_buddy ; bud ; ) {
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2281
    bud = g_list_previous(bud);
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2282
    if (!bud)
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2283
      break;
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2284
    if (buddy_gettype(BUDDATA(bud)) & ROSTER_TYPE_GROUP) {
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2285
      set_current_buddy(bud);
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2286
      if (chatmode)
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2287
        scr_ShowBuddyWindow();
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2288
      break;
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2289
    }
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2290
  }
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2291
}
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2292
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2293
//  scr_RosterNextGroup()
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2294
// Go to the next group in the buddylist
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2295
void scr_RosterNextGroup(void)
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2296
{
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2297
  GList *bud;
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2298
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2299
  for (bud = current_buddy ; bud ; ) {
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2300
    bud = g_list_next(bud);
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2301
    if (!bud)
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2302
      break;
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2303
    if (buddy_gettype(BUDDATA(bud)) & ROSTER_TYPE_GROUP) {
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2304
      set_current_buddy(bud);
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2305
      if (chatmode)
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2306
        scr_ShowBuddyWindow();
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2307
      break;
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2308
    }
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2309
  }
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2310
}
5e2e647e781b Add command /roster group_prev|group_next and update documentation
Mikael Berthe <mikael@lilotux.net>
parents: 1083
diff changeset
  2311
265
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 263
diff changeset
  2312
//  scr_RosterSearch(str)
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 263
diff changeset
  2313
// Look forward for a buddy with jid/name containing str.
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 263
diff changeset
  2314
void scr_RosterSearch(char *str)
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 263
diff changeset
  2315
{
328
83d129adde03 Add set_current_buddy() function, to reduce code duplication
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
  2316
  set_current_buddy(buddy_search(str));
265
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 263
diff changeset
  2317
  if (chatmode)
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 263
diff changeset
  2318
    scr_ShowBuddyWindow();
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 263
diff changeset
  2319
}
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 263
diff changeset
  2320
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1056
diff changeset
  2321
//  scr_RosterJumpJid(bjid)
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1056
diff changeset
  2322
// Jump to buddy bjid.
480
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  2323
// 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
  2324
void scr_RosterJumpJid(char *barejid)
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  2325
{
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  2326
  GSList *roster_elt;
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  2327
  // Look for an existing buddy
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  2328
  roster_elt = roster_find(barejid, jidsearch,
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  2329
                 ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_ROOM);
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  2330
  // Create it if necessary
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  2331
  if (!roster_elt)
603
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 602
diff changeset
  2332
    roster_elt = roster_add_user(barejid, NULL, NULL, ROSTER_TYPE_USER,
1355
9716cf8a0726 Add on_server flag
Mikael Berthe <mikael@lilotux.net>
parents: 1345
diff changeset
  2333
                                 sub_none, -1);
480
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  2334
  // Set a lock to see it in the buddylist
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  2335
  buddy_setflags(BUDDATA(roster_elt), ROSTER_FLAG_LOCK, TRUE);
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  2336
  buddylist_build();
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  2337
  // Jump to the buddy
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  2338
  set_current_buddy(buddy_search_jid(barejid));
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  2339
  if (chatmode)
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  2340
    scr_ShowBuddyWindow();
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  2341
}
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 464
diff changeset
  2342
236
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
  2343
//  scr_RosterUnreadMessage(next)
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
  2344
// 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
  2345
// 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
  2346
// message from unread_list.
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
  2347
void scr_RosterUnreadMessage(int next)
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
  2348
{
329
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  2349
  gpointer unread_ptr;
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  2350
  gpointer refbuddata;
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  2351
  GList *nbuddy;
236
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
  2352
329
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  2353
  if (!current_buddy) return;
236
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
  2354
329
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  2355
  if (next) refbuddata = BUDDATA(current_buddy);
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  2356
  else      refbuddata = NULL;
236
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
  2357
329
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  2358
  unread_ptr = unread_msg(refbuddata);
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  2359
  if (!unread_ptr) return;
236
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
  2360
889
ae93e69aaaaf Fix up pending message flag for the status special buffer
Mikael Berthe <mikael@lilotux.net>
parents: 888
diff changeset
  2361
  if (!(buddy_gettype(unread_ptr) & ROSTER_TYPE_SPECIAL)) {
ae93e69aaaaf Fix up pending message flag for the status special buffer
Mikael Berthe <mikael@lilotux.net>
parents: 888
diff changeset
  2362
    gpointer ngroup;
ae93e69aaaaf Fix up pending message flag for the status special buffer
Mikael Berthe <mikael@lilotux.net>
parents: 888
diff changeset
  2363
    // If buddy is in a folded group, we need to expand it
ae93e69aaaaf Fix up pending message flag for the status special buffer
Mikael Berthe <mikael@lilotux.net>
parents: 888
diff changeset
  2364
    ngroup = buddy_getgroup(unread_ptr);
ae93e69aaaaf Fix up pending message flag for the status special buffer
Mikael Berthe <mikael@lilotux.net>
parents: 888
diff changeset
  2365
    if (buddy_getflags(ngroup) & ROSTER_FLAG_HIDE) {
ae93e69aaaaf Fix up pending message flag for the status special buffer
Mikael Berthe <mikael@lilotux.net>
parents: 888
diff changeset
  2366
      buddy_setflags(ngroup, ROSTER_FLAG_HIDE, FALSE);
ae93e69aaaaf Fix up pending message flag for the status special buffer
Mikael Berthe <mikael@lilotux.net>
parents: 888
diff changeset
  2367
      buddylist_build();
ae93e69aaaaf Fix up pending message flag for the status special buffer
Mikael Berthe <mikael@lilotux.net>
parents: 888
diff changeset
  2368
    }
329
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  2369
  }
236
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
  2370
329
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  2371
  nbuddy = g_list_find(buddylist, unread_ptr);
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  2372
  if (nbuddy) {
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  2373
    set_current_buddy(nbuddy);
7c53bf62a2a2 scr_RosterUnreadMessage() uses set_current_buddy()
Mikael Berthe <mikael@lilotux.net>
parents: 328
diff changeset
  2374
    if (chatmode) scr_ShowBuddyWindow();
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
  2375
  } else
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
  2376
    scr_LogPrint(LPRINT_LOGNORM, "Error: nbuddy == NULL"); // should not happen
236
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
  2377
}
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
  2378
330
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 329
diff changeset
  2379
//  scr_RosterJumpAlternate()
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 329
diff changeset
  2380
// Try to jump to alternate (== previous) buddy
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 329
diff changeset
  2381
void scr_RosterJumpAlternate(void)
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  2382
{
330
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 329
diff changeset
  2383
  if (!alternate_buddy || g_list_position(buddylist, alternate_buddy) == -1)
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 329
diff changeset
  2384
    return;
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 329
diff changeset
  2385
  set_current_buddy(alternate_buddy);
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 329
diff changeset
  2386
  if (chatmode)
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 329
diff changeset
  2387
    scr_ShowBuddyWindow();
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 329
diff changeset
  2388
}
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 329
diff changeset
  2389
1311
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2390
//  scr_RosterDisplay(filter)
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2391
// Set the roster filter mask.  If filter is null/empty, the current
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2392
// mask is displayed.
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2393
void scr_RosterDisplay(const char *filter)
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2394
{
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2395
  guchar status;
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2396
  enum imstatus budstate;
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2397
  char strfilter[imstatus_size+1];
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2398
  char *psfilter;
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2399
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2400
  if (filter && *filter) {
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2401
    int show_all = (*filter == '*');
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2402
    status = 0;
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2403
    for (budstate = 0; budstate < imstatus_size-1; budstate++)
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2404
      if (strchr(filter, imstatus2char[budstate]) || show_all)
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2405
        status |= 1<<budstate;
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2406
    buddylist_set_filter(status);
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2407
    buddylist_build();
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2408
    update_roster = TRUE;
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2409
    return;
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2410
  }
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2411
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2412
  // Display current filter
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2413
  psfilter = strfilter;
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2414
  status = buddylist_get_filter();
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2415
  for (budstate = 0; budstate < imstatus_size-1; budstate++)
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2416
    if (status & 1<<budstate)
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2417
      *psfilter++ = imstatus2char[budstate];
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2418
  *psfilter = '\0';
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2419
  scr_LogPrint(LPRINT_NORMAL, "Roster status filter: %s", strfilter);
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2420
}
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1298
diff changeset
  2421
369
499170ed71c9 Rename some buffer commands, for homogeneity
Mikael Berthe <mikael@lilotux.net>
parents: 365
diff changeset
  2422
//  scr_BufferScrollUpDown()
508
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  2423
// Scroll up/down the current buddy window,
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  2424
// - half a screen if nblines is 0,
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  2425
// - up if updown == -1, down if updown == 1
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  2426
void scr_BufferScrollUpDown(int updown, unsigned int nblines)
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  2427
{
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
  2428
  winbuf *win_entry;
508
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  2429
  int n, nbl;
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  2430
  GList *hbuf_top;
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  2431
  guint isspe;
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  2432
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  2433
  // Get win_entry
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  2434
  if (!current_buddy) return;
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  2435
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  2436
  isspe = buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_SPECIAL;
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  2437
  win_entry  = scr_SearchWindow(CURRENT_JID, isspe);
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  2438
  if (!win_entry) return;
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  2439
508
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  2440
  if (!nblines) {
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  2441
    // Scroll half a screen (or less)
512
1744664332cd Fix "/buffer up"
Mikael Berthe <mikael@lilotux.net>
parents: 508
diff changeset
  2442
    nbl = CHAT_WIN_HEIGHT/2;
508
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  2443
  } else {
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  2444
    nbl = nblines;
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  2445
  }
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2446
  hbuf_top = win_entry->bd->top;
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  2447
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  2448
  if (updown == -1) {   // UP
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  2449
    if (!hbuf_top) {
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2450
      hbuf_top = g_list_last(win_entry->bd->hbuf);
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2451
      if (!win_entry->bd->cleared) {
512
1744664332cd Fix "/buffer up"
Mikael Berthe <mikael@lilotux.net>
parents: 508
diff changeset
  2452
        if (!nblines) nbl = nbl*3 - 1;
1744664332cd Fix "/buffer up"
Mikael Berthe <mikael@lilotux.net>
parents: 508
diff changeset
  2453
        else nbl += CHAT_WIN_HEIGHT - 1;
1744664332cd Fix "/buffer up"
Mikael Berthe <mikael@lilotux.net>
parents: 508
diff changeset
  2454
      } else {
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2455
        win_entry->bd->cleared = FALSE;
512
1744664332cd Fix "/buffer up"
Mikael Berthe <mikael@lilotux.net>
parents: 508
diff changeset
  2456
      }
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  2457
    }
508
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  2458
    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
  2459
      hbuf_top = g_list_previous(hbuf_top);
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2460
    win_entry->bd->top = hbuf_top;
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  2461
  } else {              // DOWN
508
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 503
diff changeset
  2462
    for (n=0 ; hbuf_top && n < nbl ; n++)
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  2463
      hbuf_top = g_list_next(hbuf_top);
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2464
    win_entry->bd->top = hbuf_top;
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  2465
    // Check if we are at the bottom
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  2466
    for (n=0 ; hbuf_top && n < CHAT_WIN_HEIGHT-1 ; n++)
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  2467
      hbuf_top = g_list_next(hbuf_top);
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  2468
    if (!hbuf_top)
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2469
      win_entry->bd->top = NULL; // End reached
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  2470
  }
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  2471
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  2472
  // Refresh the window
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  2473
  scr_UpdateWindow(win_entry);
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  2474
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  2475
  // Finished :)
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  2476
  update_panels();
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  2477
}
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
  2478
369
499170ed71c9 Rename some buffer commands, for homogeneity
Mikael Berthe <mikael@lilotux.net>
parents: 365
diff changeset
  2479
//  scr_BufferClear()
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  2480
// 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
  2481
void scr_BufferClear(void)
108
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  2482
{
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
  2483
  winbuf *win_entry;
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  2484
  guint isspe;
108
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  2485
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  2486
  // Get win_entry
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  2487
  if (!current_buddy) return;
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  2488
  isspe = buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_SPECIAL;
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  2489
  win_entry = scr_SearchWindow(CURRENT_JID, isspe);
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  2490
  if (!win_entry) return;
108
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  2491
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2492
  win_entry->bd->cleared = TRUE;
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2493
  win_entry->bd->top = NULL;
108
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  2494
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  2495
  // Refresh the window
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  2496
  scr_UpdateWindow(win_entry);
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  2497
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  2498
  // Finished :)
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  2499
  update_panels();
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  2500
}
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
  2501
1138
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2502
//  buffer_purge()
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2503
// key: winId/jid
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2504
// value: winbuf structure
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2505
// data: int, set to 1 if the buffer should be closed.
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2506
// NOTE: does not work for special buffers.
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2507
static void buffer_purge(gpointer key, gpointer value, gpointer data)
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2508
{
1225
0e9e9724d643 Fix a bad type cast in buffer_purge()
Mikael Berthe <mikael@lilotux.net>
parents: 1209
diff changeset
  2509
  int *p_closebuf = data;
1138
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2510
  winbuf *win_entry = value;
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2511
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2512
  // Delete the current hbuf
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2513
  hbuf_free(&win_entry->bd->hbuf);
1138
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2514
1225
0e9e9724d643 Fix a bad type cast in buffer_purge()
Mikael Berthe <mikael@lilotux.net>
parents: 1209
diff changeset
  2515
  if (*p_closebuf) {
1138
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2516
    g_hash_table_remove(winbufhash, key);
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2517
  } else {
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2518
    win_entry->bd->cleared = FALSE;
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2519
    win_entry->bd->top = NULL;
1138
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2520
  }
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2521
}
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2522
1279
8bbc764139ef Implement /buffer close|purge [jid]
Mikael Berthe <mikael@lilotux.net>
parents: 1272
diff changeset
  2523
//  scr_BufferPurge(closebuf, jid)
8bbc764139ef Implement /buffer close|purge [jid]
Mikael Berthe <mikael@lilotux.net>
parents: 1272
diff changeset
  2524
// Purge/Drop the current buddy buffer or jid's buffer if jid != NULL.
1135
5d7c05932b13 Add command /buffer close
Mikael Berthe <mikael@lilotux.net>
parents: 1133
diff changeset
  2525
// If closebuf is 1, close the buffer.
1279
8bbc764139ef Implement /buffer close|purge [jid]
Mikael Berthe <mikael@lilotux.net>
parents: 1272
diff changeset
  2526
void scr_BufferPurge(int closebuf, const char *jid)
866
b30df2ab457f Add "/buffer purge"
Mikael Berthe <mikael@lilotux.net>
parents: 865
diff changeset
  2527
{
b30df2ab457f Add "/buffer purge"
Mikael Berthe <mikael@lilotux.net>
parents: 865
diff changeset
  2528
  winbuf *win_entry;
b30df2ab457f Add "/buffer purge"
Mikael Berthe <mikael@lilotux.net>
parents: 865
diff changeset
  2529
  guint isspe;
1225
0e9e9724d643 Fix a bad type cast in buffer_purge()
Mikael Berthe <mikael@lilotux.net>
parents: 1209
diff changeset
  2530
  guint *p_closebuf;
1279
8bbc764139ef Implement /buffer close|purge [jid]
Mikael Berthe <mikael@lilotux.net>
parents: 1272
diff changeset
  2531
  const char *cjid;
1345
8e4e741787be Small change to buffer close
Mikael Berthe <mikael@lilotux.net>
parents: 1333
diff changeset
  2532
  guint hold_chatmode = FALSE;
1279
8bbc764139ef Implement /buffer close|purge [jid]
Mikael Berthe <mikael@lilotux.net>
parents: 1272
diff changeset
  2533
8bbc764139ef Implement /buffer close|purge [jid]
Mikael Berthe <mikael@lilotux.net>
parents: 1272
diff changeset
  2534
  if (jid) {
8bbc764139ef Implement /buffer close|purge [jid]
Mikael Berthe <mikael@lilotux.net>
parents: 1272
diff changeset
  2535
    cjid = jid;
8bbc764139ef Implement /buffer close|purge [jid]
Mikael Berthe <mikael@lilotux.net>
parents: 1272
diff changeset
  2536
    isspe = FALSE;
1345
8e4e741787be Small change to buffer close
Mikael Berthe <mikael@lilotux.net>
parents: 1333
diff changeset
  2537
    // If closebuf is TRUE, it's probably better not to leave chat mode
8e4e741787be Small change to buffer close
Mikael Berthe <mikael@lilotux.net>
parents: 1333
diff changeset
  2538
    // if the change isn't related to the current buffer.
8e4e741787be Small change to buffer close
Mikael Berthe <mikael@lilotux.net>
parents: 1333
diff changeset
  2539
    if (closebuf && current_buddy) {
8e4e741787be Small change to buffer close
Mikael Berthe <mikael@lilotux.net>
parents: 1333
diff changeset
  2540
      if (buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_SPECIAL ||
8e4e741787be Small change to buffer close
Mikael Berthe <mikael@lilotux.net>
parents: 1333
diff changeset
  2541
          strcasecmp(jid, CURRENT_JID))
8e4e741787be Small change to buffer close
Mikael Berthe <mikael@lilotux.net>
parents: 1333
diff changeset
  2542
        hold_chatmode = TRUE;
8e4e741787be Small change to buffer close
Mikael Berthe <mikael@lilotux.net>
parents: 1333
diff changeset
  2543
    }
1279
8bbc764139ef Implement /buffer close|purge [jid]
Mikael Berthe <mikael@lilotux.net>
parents: 1272
diff changeset
  2544
  } else {
8bbc764139ef Implement /buffer close|purge [jid]
Mikael Berthe <mikael@lilotux.net>
parents: 1272
diff changeset
  2545
    // Get win_entry
8bbc764139ef Implement /buffer close|purge [jid]
Mikael Berthe <mikael@lilotux.net>
parents: 1272
diff changeset
  2546
    if (!current_buddy) return;
8bbc764139ef Implement /buffer close|purge [jid]
Mikael Berthe <mikael@lilotux.net>
parents: 1272
diff changeset
  2547
    cjid = CURRENT_JID;
8bbc764139ef Implement /buffer close|purge [jid]
Mikael Berthe <mikael@lilotux.net>
parents: 1272
diff changeset
  2548
    isspe = buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_SPECIAL;
8bbc764139ef Implement /buffer close|purge [jid]
Mikael Berthe <mikael@lilotux.net>
parents: 1272
diff changeset
  2549
  }
8bbc764139ef Implement /buffer close|purge [jid]
Mikael Berthe <mikael@lilotux.net>
parents: 1272
diff changeset
  2550
  win_entry = scr_SearchWindow(cjid, isspe);
866
b30df2ab457f Add "/buffer purge"
Mikael Berthe <mikael@lilotux.net>
parents: 865
diff changeset
  2551
  if (!win_entry) return;
b30df2ab457f Add "/buffer purge"
Mikael Berthe <mikael@lilotux.net>
parents: 865
diff changeset
  2552
1138
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2553
  if (!isspe) {
1225
0e9e9724d643 Fix a bad type cast in buffer_purge()
Mikael Berthe <mikael@lilotux.net>
parents: 1209
diff changeset
  2554
    p_closebuf = g_new(guint, 1);
0e9e9724d643 Fix a bad type cast in buffer_purge()
Mikael Berthe <mikael@lilotux.net>
parents: 1209
diff changeset
  2555
    *p_closebuf = closebuf;
1279
8bbc764139ef Implement /buffer close|purge [jid]
Mikael Berthe <mikael@lilotux.net>
parents: 1272
diff changeset
  2556
    buffer_purge((gpointer)cjid, win_entry, p_closebuf);
1225
0e9e9724d643 Fix a bad type cast in buffer_purge()
Mikael Berthe <mikael@lilotux.net>
parents: 1209
diff changeset
  2557
    g_free(p_closebuf);
1345
8e4e741787be Small change to buffer close
Mikael Berthe <mikael@lilotux.net>
parents: 1333
diff changeset
  2558
    if (closebuf && !hold_chatmode) {
1138
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2559
      scr_set_chatmode(FALSE);
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2560
      currentWindow = NULL;
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2561
    }
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2562
  } else {
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2563
    // (Special buffer)
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2564
    // Reset the current hbuf
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2565
    hbuf_free(&win_entry->bd->hbuf);
866
b30df2ab457f Add "/buffer purge"
Mikael Berthe <mikael@lilotux.net>
parents: 865
diff changeset
  2566
    // Currently it can only be the status buffer
b30df2ab457f Add "/buffer purge"
Mikael Berthe <mikael@lilotux.net>
parents: 865
diff changeset
  2567
    statushbuf = NULL;
1138
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2568
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2569
    win_entry->bd->cleared = FALSE;
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2570
    win_entry->bd->top = NULL;
866
b30df2ab457f Add "/buffer purge"
Mikael Berthe <mikael@lilotux.net>
parents: 865
diff changeset
  2571
  }
b30df2ab457f Add "/buffer purge"
Mikael Berthe <mikael@lilotux.net>
parents: 865
diff changeset
  2572
1138
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2573
  // Refresh the window
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2574
  scr_UpdateBuddyWindow();
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2575
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2576
  // Finished :)
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2577
  update_panels();
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2578
}
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2579
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2580
void scr_BufferPurgeAll(int closebuf)
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2581
{
1225
0e9e9724d643 Fix a bad type cast in buffer_purge()
Mikael Berthe <mikael@lilotux.net>
parents: 1209
diff changeset
  2582
  guint *p_closebuf;
0e9e9724d643 Fix a bad type cast in buffer_purge()
Mikael Berthe <mikael@lilotux.net>
parents: 1209
diff changeset
  2583
  p_closebuf = g_new(guint, 1);
0e9e9724d643 Fix a bad type cast in buffer_purge()
Mikael Berthe <mikael@lilotux.net>
parents: 1209
diff changeset
  2584
0e9e9724d643 Fix a bad type cast in buffer_purge()
Mikael Berthe <mikael@lilotux.net>
parents: 1209
diff changeset
  2585
  *p_closebuf = closebuf;
0e9e9724d643 Fix a bad type cast in buffer_purge()
Mikael Berthe <mikael@lilotux.net>
parents: 1209
diff changeset
  2586
  g_hash_table_foreach(winbufhash, buffer_purge, p_closebuf);
0e9e9724d643 Fix a bad type cast in buffer_purge()
Mikael Berthe <mikael@lilotux.net>
parents: 1209
diff changeset
  2587
  g_free(p_closebuf);
1138
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2588
8ba4b1e8b42d Add command /buffer close_all
Mikael Berthe <mikael@lilotux.net>
parents: 1137
diff changeset
  2589
  if (closebuf) {
1135
5d7c05932b13 Add command /buffer close
Mikael Berthe <mikael@lilotux.net>
parents: 1133
diff changeset
  2590
    scr_set_chatmode(FALSE);
1137
5752017f6e2b Fix a bug in /buffer close
Mikael Berthe <mikael@lilotux.net>
parents: 1135
diff changeset
  2591
    currentWindow = NULL;
1135
5d7c05932b13 Add command /buffer close
Mikael Berthe <mikael@lilotux.net>
parents: 1133
diff changeset
  2592
  }
5d7c05932b13 Add command /buffer close
Mikael Berthe <mikael@lilotux.net>
parents: 1133
diff changeset
  2593
866
b30df2ab457f Add "/buffer purge"
Mikael Berthe <mikael@lilotux.net>
parents: 865
diff changeset
  2594
  // Refresh the window
b30df2ab457f Add "/buffer purge"
Mikael Berthe <mikael@lilotux.net>
parents: 865
diff changeset
  2595
  scr_UpdateBuddyWindow();
b30df2ab457f Add "/buffer purge"
Mikael Berthe <mikael@lilotux.net>
parents: 865
diff changeset
  2596
b30df2ab457f Add "/buffer purge"
Mikael Berthe <mikael@lilotux.net>
parents: 865
diff changeset
  2597
  // Finished :)
b30df2ab457f Add "/buffer purge"
Mikael Berthe <mikael@lilotux.net>
parents: 865
diff changeset
  2598
  update_panels();
b30df2ab457f Add "/buffer purge"
Mikael Berthe <mikael@lilotux.net>
parents: 865
diff changeset
  2599
}
b30df2ab457f Add "/buffer purge"
Mikael Berthe <mikael@lilotux.net>
parents: 865
diff changeset
  2600
873
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2601
//  scr_BufferScrollLock(lock)
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2602
// Lock/unlock the current buddy buffer
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2603
// lock = 1 : lock
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2604
// lock = 0 : unlock
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2605
// lock = -1: toggle lock status
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2606
void scr_BufferScrollLock(int lock)
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2607
{
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2608
  winbuf *win_entry;
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2609
  guint isspe;
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2610
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2611
  // Get win_entry
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2612
  if (!current_buddy) return;
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2613
  isspe = buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_SPECIAL;
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2614
  win_entry = scr_SearchWindow(CURRENT_JID, isspe);
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2615
  if (!win_entry) return;
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2616
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2617
  if (lock == -1)
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2618
    lock = !win_entry->bd->lock;
873
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2619
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2620
  if (lock) {
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2621
    win_entry->bd->lock = TRUE;
873
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2622
  } else {
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2623
    win_entry->bd->lock = FALSE;
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2624
    //win_entry->bd->cleared = FALSE;
880
ea983a945eba /buffer scroll_unlock: Don't always jump to the end of the buffer
Mikael Berthe <mikael@lilotux.net>
parents: 878
diff changeset
  2625
    if (isspe || (buddy_getflags(BUDDATA(current_buddy)) & ROSTER_FLAG_MSG))
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2626
      win_entry->bd->top = NULL;
873
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2627
  }
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2628
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2629
  // If chatmode is disabled and we're at the bottom of the buffer,
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2630
  // we need to set the "top" line, so we need to call scr_ShowBuddyWindow()
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2631
  // at least once.  (Maybe it will cause a double refresh...)
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2632
  if (!chatmode && !win_entry->bd->top) {
873
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2633
    chatmode = TRUE;
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2634
    scr_ShowBuddyWindow();
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2635
    chatmode = FALSE;
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2636
  }
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2637
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2638
  // Refresh the window
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2639
  scr_UpdateBuddyWindow();
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2640
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2641
  // Finished :)
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2642
  update_panels();
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2643
}
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2644
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  2645
//  scr_BufferTopBottom()
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  2646
// Jump to the head/tail of the current buddy window
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  2647
// (top if topbottom == -1, bottom topbottom == 1)
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  2648
void scr_BufferTopBottom(int topbottom)
187
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  2649
{
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
  2650
  winbuf *win_entry;
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  2651
  guint isspe;
187
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  2652
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  2653
  // Get win_entry
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  2654
  if (!current_buddy) return;
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  2655
  isspe = buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_SPECIAL;
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  2656
  win_entry = scr_SearchWindow(CURRENT_JID, isspe);
187
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  2657
  if (!win_entry) return;
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  2658
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2659
  win_entry->bd->cleared = FALSE;
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  2660
  if (topbottom == 1)
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2661
    win_entry->bd->top = NULL;
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 358
diff changeset
  2662
  else
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2663
    win_entry->bd->top = g_list_first(win_entry->bd->hbuf);
187
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  2664
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  2665
  // Refresh the window
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  2666
  scr_UpdateWindow(win_entry);
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  2667
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  2668
  // Finished :)
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  2669
  update_panels();
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  2670
}
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 185
diff changeset
  2671
370
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  2672
//  scr_BufferSearch(direction, text)
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  2673
// Jump to the next line containing text
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  2674
// (backward search if direction == -1, forward if topbottom == 1)
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  2675
void scr_BufferSearch(int direction, const char *text)
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  2676
{
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
  2677
  winbuf *win_entry;
370
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  2678
  GList *current_line, *search_res;
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  2679
  guint isspe;
370
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  2680
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  2681
  // Get win_entry
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  2682
  if (!current_buddy) return;
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  2683
  isspe = buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_SPECIAL;
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  2684
  win_entry = scr_SearchWindow(CURRENT_JID, isspe);
370
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  2685
  if (!win_entry) return;
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  2686
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2687
  if (win_entry->bd->top)
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2688
    current_line = win_entry->bd->top;
370
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  2689
  else
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2690
    current_line = g_list_last(win_entry->bd->hbuf);
370
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  2691
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  2692
  search_res = hbuf_search(current_line, direction, text);
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  2693
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  2694
  if (search_res) {
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2695
    win_entry->bd->cleared = FALSE;
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2696
    win_entry->bd->top = search_res;
370
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  2697
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  2698
    // Refresh the window
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  2699
    scr_UpdateWindow(win_entry);
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  2700
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  2701
    // Finished :)
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  2702
    update_panels();
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  2703
  } else
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
  2704
    scr_LogPrint(LPRINT_NORMAL, "Search string not found");
370
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  2705
}
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
  2706
462
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  2707
//  scr_BufferPercent(n)
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  2708
// Jump to the specified position in the buffer, in %
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  2709
void scr_BufferPercent(int pc)
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  2710
{
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
  2711
  winbuf *win_entry;
462
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  2712
  GList *search_res;
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  2713
  guint isspe;
462
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  2714
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  2715
  // Get win_entry
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  2716
  if (!current_buddy) return;
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  2717
  isspe = buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_SPECIAL;
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  2718
  win_entry = scr_SearchWindow(CURRENT_JID, isspe);
462
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  2719
  if (!win_entry) return;
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  2720
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  2721
  if (pc < 0 || pc > 100) {
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  2722
    scr_LogPrint(LPRINT_NORMAL, "Bad % value");
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  2723
    return;
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  2724
  }
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  2725
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2726
  search_res = hbuf_jump_percent(win_entry->bd->hbuf, pc);
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2727
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2728
  win_entry->bd->cleared = FALSE;
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2729
  win_entry->bd->top = search_res;
462
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  2730
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  2731
  // Refresh the window
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  2732
  scr_UpdateWindow(win_entry);
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  2733
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  2734
  // Finished :)
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  2735
  update_panels();
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  2736
}
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 459
diff changeset
  2737
464
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  2738
//  scr_BufferDate(t)
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  2739
// Jump to the first line after date t in the buffer
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  2740
// 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
  2741
void scr_BufferDate(time_t t)
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  2742
{
822
0dbb2be10975 Get rid of list.h
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
  2743
  winbuf *win_entry;
464
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  2744
  GList *search_res;
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  2745
  guint isspe;
464
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  2746
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  2747
  // Get win_entry
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  2748
  if (!current_buddy) return;
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  2749
  isspe = buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_SPECIAL;
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  2750
  win_entry = scr_SearchWindow(CURRENT_JID, isspe);
464
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  2751
  if (!win_entry) return;
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  2752
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2753
  search_res = hbuf_jump_date(win_entry->bd->hbuf, t);
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2754
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2755
  win_entry->bd->cleared = FALSE;
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2756
  win_entry->bd->top = search_res;
464
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  2757
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  2758
  // Refresh the window
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  2759
  scr_UpdateWindow(win_entry);
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  2760
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  2761
  // Finished :)
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  2762
  update_panels();
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  2763
}
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
  2764
1485
0121b6f3047c New command: /buffer save
Mikael Berthe <mikael@lilotux.net>
parents: 1484
diff changeset
  2765
void scr_BufferDump(const char *file)
0121b6f3047c New command: /buffer save
Mikael Berthe <mikael@lilotux.net>
parents: 1484
diff changeset
  2766
{
0121b6f3047c New command: /buffer save
Mikael Berthe <mikael@lilotux.net>
parents: 1484
diff changeset
  2767
  char *extfname;
0121b6f3047c New command: /buffer save
Mikael Berthe <mikael@lilotux.net>
parents: 1484
diff changeset
  2768
0121b6f3047c New command: /buffer save
Mikael Berthe <mikael@lilotux.net>
parents: 1484
diff changeset
  2769
  if (!currentWindow) {
0121b6f3047c New command: /buffer save
Mikael Berthe <mikael@lilotux.net>
parents: 1484
diff changeset
  2770
    scr_LogPrint(LPRINT_NORMAL, "No current buffer!");
0121b6f3047c New command: /buffer save
Mikael Berthe <mikael@lilotux.net>
parents: 1484
diff changeset
  2771
    return;
0121b6f3047c New command: /buffer save
Mikael Berthe <mikael@lilotux.net>
parents: 1484
diff changeset
  2772
  }
0121b6f3047c New command: /buffer save
Mikael Berthe <mikael@lilotux.net>
parents: 1484
diff changeset
  2773
0121b6f3047c New command: /buffer save
Mikael Berthe <mikael@lilotux.net>
parents: 1484
diff changeset
  2774
  if (!file || !*file) {
0121b6f3047c New command: /buffer save
Mikael Berthe <mikael@lilotux.net>
parents: 1484
diff changeset
  2775
    scr_LogPrint(LPRINT_NORMAL, "Missing parameter (file name)!");
0121b6f3047c New command: /buffer save
Mikael Berthe <mikael@lilotux.net>
parents: 1484
diff changeset
  2776
    return;
0121b6f3047c New command: /buffer save
Mikael Berthe <mikael@lilotux.net>
parents: 1484
diff changeset
  2777
  }
0121b6f3047c New command: /buffer save
Mikael Berthe <mikael@lilotux.net>
parents: 1484
diff changeset
  2778
0121b6f3047c New command: /buffer save
Mikael Berthe <mikael@lilotux.net>
parents: 1484
diff changeset
  2779
  extfname = expand_filename(file);
0121b6f3047c New command: /buffer save
Mikael Berthe <mikael@lilotux.net>
parents: 1484
diff changeset
  2780
  hbuf_dump_to_file(currentWindow->bd->hbuf, extfname);
0121b6f3047c New command: /buffer save
Mikael Berthe <mikael@lilotux.net>
parents: 1484
diff changeset
  2781
  g_free(extfname);
0121b6f3047c New command: /buffer save
Mikael Berthe <mikael@lilotux.net>
parents: 1484
diff changeset
  2782
}
0121b6f3047c New command: /buffer save
Mikael Berthe <mikael@lilotux.net>
parents: 1484
diff changeset
  2783
1226
2521efbf3b72 New (debug) subcommand, buffer list
Mikael Berthe <mikael@lilotux.net>
parents: 1225
diff changeset
  2784
//  buffer_list()
2521efbf3b72 New (debug) subcommand, buffer list
Mikael Berthe <mikael@lilotux.net>
parents: 1225
diff changeset
  2785
// key: winId/jid
2521efbf3b72 New (debug) subcommand, buffer list
Mikael Berthe <mikael@lilotux.net>
parents: 1225
diff changeset
  2786
// value: winbuf structure
2521efbf3b72 New (debug) subcommand, buffer list
Mikael Berthe <mikael@lilotux.net>
parents: 1225
diff changeset
  2787
// data: none.
2521efbf3b72 New (debug) subcommand, buffer list
Mikael Berthe <mikael@lilotux.net>
parents: 1225
diff changeset
  2788
static void buffer_list(gpointer key, gpointer value, gpointer data)
2521efbf3b72 New (debug) subcommand, buffer list
Mikael Berthe <mikael@lilotux.net>
parents: 1225
diff changeset
  2789
{
1227
79c396678f1b Make buffer list display the number of allocated HBB blocks
Mikael Berthe <mikael@lilotux.net>
parents: 1226
diff changeset
  2790
  GList *head;
1226
2521efbf3b72 New (debug) subcommand, buffer list
Mikael Berthe <mikael@lilotux.net>
parents: 1225
diff changeset
  2791
  winbuf *win_entry = value;
1227
79c396678f1b Make buffer list display the number of allocated HBB blocks
Mikael Berthe <mikael@lilotux.net>
parents: 1226
diff changeset
  2792
79c396678f1b Make buffer list display the number of allocated HBB blocks
Mikael Berthe <mikael@lilotux.net>
parents: 1226
diff changeset
  2793
  head = g_list_first(win_entry->bd->hbuf);
79c396678f1b Make buffer list display the number of allocated HBB blocks
Mikael Berthe <mikael@lilotux.net>
parents: 1226
diff changeset
  2794
79c396678f1b Make buffer list display the number of allocated HBB blocks
Mikael Berthe <mikael@lilotux.net>
parents: 1226
diff changeset
  2795
  scr_LogPrint(LPRINT_NORMAL, " %s  (%u/%u)", key,
79c396678f1b Make buffer list display the number of allocated HBB blocks
Mikael Berthe <mikael@lilotux.net>
parents: 1226
diff changeset
  2796
               g_list_length(head), hbuf_get_blocks_number(head));
1226
2521efbf3b72 New (debug) subcommand, buffer list
Mikael Berthe <mikael@lilotux.net>
parents: 1225
diff changeset
  2797
}
2521efbf3b72 New (debug) subcommand, buffer list
Mikael Berthe <mikael@lilotux.net>
parents: 1225
diff changeset
  2798
2521efbf3b72 New (debug) subcommand, buffer list
Mikael Berthe <mikael@lilotux.net>
parents: 1225
diff changeset
  2799
void scr_BufferList(void)
2521efbf3b72 New (debug) subcommand, buffer list
Mikael Berthe <mikael@lilotux.net>
parents: 1225
diff changeset
  2800
{
2521efbf3b72 New (debug) subcommand, buffer list
Mikael Berthe <mikael@lilotux.net>
parents: 1225
diff changeset
  2801
  scr_LogPrint(LPRINT_NORMAL, "Buffer list:");
1227
79c396678f1b Make buffer list display the number of allocated HBB blocks
Mikael Berthe <mikael@lilotux.net>
parents: 1226
diff changeset
  2802
  buffer_list("[status]", statusWindow, NULL);
1226
2521efbf3b72 New (debug) subcommand, buffer list
Mikael Berthe <mikael@lilotux.net>
parents: 1225
diff changeset
  2803
  g_hash_table_foreach(winbufhash, buffer_list, NULL);
2521efbf3b72 New (debug) subcommand, buffer list
Mikael Berthe <mikael@lilotux.net>
parents: 1225
diff changeset
  2804
  scr_LogPrint(LPRINT_NORMAL, "End of buffer list.");
1252
9f7e6c22cd14 "buffer list" sets the new_msg flag
Mikael Berthe <mikael@lilotux.net>
parents: 1245
diff changeset
  2805
  scr_setmsgflag_if_needed(SPECIAL_BUFFER_STATUS_ID, TRUE);
9f7e6c22cd14 "buffer list" sets the new_msg flag
Mikael Berthe <mikael@lilotux.net>
parents: 1245
diff changeset
  2806
  update_roster = TRUE;
1226
2521efbf3b72 New (debug) subcommand, buffer list
Mikael Berthe <mikael@lilotux.net>
parents: 1225
diff changeset
  2807
}
2521efbf3b72 New (debug) subcommand, buffer list
Mikael Berthe <mikael@lilotux.net>
parents: 1225
diff changeset
  2808
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  2809
//  scr_set_chatmode()
261
259ed1de5bdc Fix spelling mistakes in comments
mikael@frmp8452
parents: 260
diff changeset
  2810
// Public function to (un)set chatmode...
129
03be1cc94560 [/trunk] Changeset 142 by mikael
mikael
parents: 126
diff changeset
  2811
inline void scr_set_chatmode(int enable)
03be1cc94560 [/trunk] Changeset 142 by mikael
mikael
parents: 126
diff changeset
  2812
{
03be1cc94560 [/trunk] Changeset 142 by mikael
mikael
parents: 126
diff changeset
  2813
  chatmode = enable;
721
9cf31c9b1dc4 Use room topic as a description in the chat status line
Mikael Berthe <mikael@lilotux.net>
parents: 720
diff changeset
  2814
  scr_UpdateChatStatus(TRUE);
129
03be1cc94560 [/trunk] Changeset 142 by mikael
mikael
parents: 126
diff changeset
  2815
}
03be1cc94560 [/trunk] Changeset 142 by mikael
mikael
parents: 126
diff changeset
  2816
1129
1a109ebf3f24 Add option "events_ignore_active_window"
Mikael Berthe <mikael@lilotux.net>
parents: 1127
diff changeset
  2817
//  scr_get_chatmode()
1a109ebf3f24 Add option "events_ignore_active_window"
Mikael Berthe <mikael@lilotux.net>
parents: 1127
diff changeset
  2818
// Public function to get chatmode state.
1a109ebf3f24 Add option "events_ignore_active_window"
Mikael Berthe <mikael@lilotux.net>
parents: 1127
diff changeset
  2819
inline int scr_get_chatmode(void)
1a109ebf3f24 Add option "events_ignore_active_window"
Mikael Berthe <mikael@lilotux.net>
parents: 1127
diff changeset
  2820
{
1a109ebf3f24 Add option "events_ignore_active_window"
Mikael Berthe <mikael@lilotux.net>
parents: 1127
diff changeset
  2821
  return chatmode;
1a109ebf3f24 Add option "events_ignore_active_window"
Mikael Berthe <mikael@lilotux.net>
parents: 1127
diff changeset
  2822
}
1a109ebf3f24 Add option "events_ignore_active_window"
Mikael Berthe <mikael@lilotux.net>
parents: 1127
diff changeset
  2823
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2824
//  scr_get_multimode()
261
259ed1de5bdc Fix spelling mistakes in comments
mikael@frmp8452
parents: 260
diff changeset
  2825
// Public function to get multimode status...
1059
875d2c9d399c Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1058
diff changeset
  2826
inline int scr_get_multimode(void)
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2827
{
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2828
  return multimode;
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2829
}
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2830
654
d7fe7b88e4fc MUC: Set the new_message flag when joining a room
Mikael Berthe <mikael@lilotux.net>
parents: 652
diff changeset
  2831
//  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
  2832
// Set the message flag unless we're already in the jid buffer window
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1056
diff changeset
  2833
void scr_setmsgflag_if_needed(const char *bjid, int special)
654
d7fe7b88e4fc MUC: Set the new_message flag when joining a room
Mikael Berthe <mikael@lilotux.net>
parents: 652
diff changeset
  2834
{
891
78f4971578dd Add a "special" parameter to scr_setmsgflag_if_needed()
Mikael Berthe <mikael@lilotux.net>
parents: 889
diff changeset
  2835
  const char *current_id;
873
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2836
  bool iscurrentlocked = FALSE;
667
86bc3295a4db Fix segfault in scr_setmsgflag_if_needed()
Mikael Berthe <mikael@lilotux.net>
parents: 658
diff changeset
  2837
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1056
diff changeset
  2838
  if (!bjid)
849
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  2839
    return;
42c43a88d823 Status buffer management
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
  2840
873
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2841
  if (current_buddy) {
891
78f4971578dd Add a "special" parameter to scr_setmsgflag_if_needed()
Mikael Berthe <mikael@lilotux.net>
parents: 889
diff changeset
  2842
    if (special)
78f4971578dd Add a "special" parameter to scr_setmsgflag_if_needed()
Mikael Berthe <mikael@lilotux.net>
parents: 889
diff changeset
  2843
      current_id = buddy_getname(BUDDATA(current_buddy));
78f4971578dd Add a "special" parameter to scr_setmsgflag_if_needed()
Mikael Berthe <mikael@lilotux.net>
parents: 889
diff changeset
  2844
    else
78f4971578dd Add a "special" parameter to scr_setmsgflag_if_needed()
Mikael Berthe <mikael@lilotux.net>
parents: 889
diff changeset
  2845
      current_id = buddy_getjid(BUDDATA(current_buddy));
78f4971578dd Add a "special" parameter to scr_setmsgflag_if_needed()
Mikael Berthe <mikael@lilotux.net>
parents: 889
diff changeset
  2846
    if (current_id) {
78f4971578dd Add a "special" parameter to scr_setmsgflag_if_needed()
Mikael Berthe <mikael@lilotux.net>
parents: 889
diff changeset
  2847
      winbuf *win_entry = scr_SearchWindow(current_id, special);
888
578d2034e971 scr_setmsgflag_if_needed(): Add a check after scr_SearchWindow()
Mikael Berthe <mikael@lilotux.net>
parents: 884
diff changeset
  2848
      if (!win_entry) return;
1157
5c857f0f0ab8 Moved all variables related to hbuf to an extra struct, bufdata
Frank Zschockelt
parents: 1156
diff changeset
  2849
      iscurrentlocked = win_entry->bd->lock;
873
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2850
    }
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2851
  } else {
891
78f4971578dd Add a "special" parameter to scr_setmsgflag_if_needed()
Mikael Berthe <mikael@lilotux.net>
parents: 889
diff changeset
  2852
    current_id = NULL;
873
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
  2853
  }
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1056
diff changeset
  2854
  if (!chatmode || !current_id || strcmp(bjid, current_id) || iscurrentlocked)
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1056
diff changeset
  2855
    roster_msg_setflag(bjid, special, TRUE);
654
d7fe7b88e4fc MUC: Set the new_message flag when joining a room
Mikael Berthe <mikael@lilotux.net>
parents: 652
diff changeset
  2856
}
d7fe7b88e4fc MUC: Set the new_message flag when joining a room
Mikael Berthe <mikael@lilotux.net>
parents: 652
diff changeset
  2857
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2858
//  scr_set_multimode()
261
259ed1de5bdc Fix spelling mistakes in comments
mikael@frmp8452
parents: 260
diff changeset
  2859
// Public function to (un)set multimode...
260
33e1a05864a6 Add "verbatim multi-line" mode, with commands disabled
mikael@frmp8452
parents: 252
diff changeset
  2860
// Convention:
33e1a05864a6 Add "verbatim multi-line" mode, with commands disabled
mikael@frmp8452
parents: 252
diff changeset
  2861
//  0 = disabled / 1 = multimode / 2 = multimode verbatim (commands disabled)
1413
f89844a0448a Remove useless inlines
Mikael Berthe <mikael@lilotux.net>
parents: 1394
diff changeset
  2862
void scr_set_multimode(int enable, char *subject)
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2863
{
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  2864
  g_free(multiline);
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  2865
  multiline = NULL;
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  2866
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  2867
  g_free(multimode_subj);
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  2868
  if (enable && subject)
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  2869
    multimode_subj = g_strdup(subject);
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  2870
  else
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  2871
    multimode_subj = NULL;
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  2872
260
33e1a05864a6 Add "verbatim multi-line" mode, with commands disabled
mikael@frmp8452
parents: 252
diff changeset
  2873
  multimode = enable;
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2874
}
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2875
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2876
//  scr_get_multiline()
261
259ed1de5bdc Fix spelling mistakes in comments
mikael@frmp8452
parents: 260
diff changeset
  2877
// Public function to get the current multi-line.
1413
f89844a0448a Remove useless inlines
Mikael Berthe <mikael@lilotux.net>
parents: 1394
diff changeset
  2878
const char *scr_get_multiline(void)
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2879
{
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2880
  if (multimode && multiline)
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2881
    return multiline;
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  2882
  return NULL;
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  2883
}
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  2884
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  2885
//  scr_get_multimode_subj()
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  2886
// Public function to get the multi-line subject, if any.
1413
f89844a0448a Remove useless inlines
Mikael Berthe <mikael@lilotux.net>
parents: 1394
diff changeset
  2887
const char *scr_get_multimode_subj(void)
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  2888
{
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  2889
  if (multimode)
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  2890
    return multimode_subj;
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 806
diff changeset
  2891
  return NULL;
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2892
}
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2893
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2894
//  scr_append_multiline(line)
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2895
// Public function to append a line to the current multi-line message.
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2896
// Skip empty leading lines.
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2897
void scr_append_multiline(const char *line)
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2898
{
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2899
  static int num;
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2900
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2901
  if (!multimode) {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
  2902
    scr_LogPrint(LPRINT_NORMAL, "Error: Not in multi-line message mode!");
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2903
    return;
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2904
  }
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2905
  if (multiline) {
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2906
    int len = strlen(multiline)+strlen(line)+2;
252
cb7f944741e4 [/trunk] Changeset 265 by mikael
mikael
parents: 238
diff changeset
  2907
    if (len >= HBB_BLOCKSIZE - 1) {
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2908
      // We don't handle single messages with size > HBB_BLOCKSIZE
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2909
      // (see hbuf)
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
  2910
      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
  2911
                   "this line has not been added.");
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
  2912
      scr_LogPrint(LPRINT_NORMAL, "Please send this part now...");
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2913
      return;
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2914
    }
276
627925d885de Limit the number of lines in multi-line messages
Mikael Berthe <mikael@lilotux.net>
parents: 271
diff changeset
  2915
    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
  2916
      // 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
  2917
      // (It should be < 1000 yet)
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
  2918
      scr_LogPrint(LPRINT_NORMAL, "Your message has too many lines, "
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
  2919
                   "this one has not been added.");
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
  2920
      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
  2921
      return;
627925d885de Limit the number of lines in multi-line messages
Mikael Berthe <mikael@lilotux.net>
parents: 271
diff changeset
  2922
    }
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2923
    multiline = g_renew(char, multiline, len);
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2924
    strcat(multiline, "\n");
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2925
    strcat(multiline, line);
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2926
    num++;
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2927
  } else {
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2928
    // First message line (we skip leading empty lines)
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2929
    num = 0;
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2930
    if (line[0]) {
419
2f9852610cf4 Small code review
Mikael Berthe <mikael@lilotux.net>
parents: 412
diff changeset
  2931
      multiline = g_strdup(line);
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2932
      num++;
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2933
    } else
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2934
      return;
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2935
  }
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 771
diff changeset
  2936
  scr_LogPrint(LPRINT_NORMAL|LPRINT_NOTUTF8,
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 771
diff changeset
  2937
               "Multi-line mode: line #%d added  [%.25s...", num, line);
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2938
}
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
  2939
173
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2940
//  scr_cmdhisto_addline()
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2941
// Add a line to the inputLine history
1558
3df441efb7c2 Fix gcc warnings related to inline/static uses
Mikael Berthe <mikael@lilotux.net>
parents: 1522
diff changeset
  2942
static inline void scr_cmdhisto_addline(char *line)
173
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2943
{
1127
fddf2fef7b83 Add option "cmdhistory_lines"
Mikael Berthe <mikael@lilotux.net>
parents: 1122
diff changeset
  2944
  int max_histo_lines;
fddf2fef7b83 Add option "cmdhistory_lines"
Mikael Berthe <mikael@lilotux.net>
parents: 1122
diff changeset
  2945
fddf2fef7b83 Add option "cmdhistory_lines"
Mikael Berthe <mikael@lilotux.net>
parents: 1122
diff changeset
  2946
  if (!line || !*line)
fddf2fef7b83 Add option "cmdhistory_lines"
Mikael Berthe <mikael@lilotux.net>
parents: 1122
diff changeset
  2947
    return;
fddf2fef7b83 Add option "cmdhistory_lines"
Mikael Berthe <mikael@lilotux.net>
parents: 1122
diff changeset
  2948
fddf2fef7b83 Add option "cmdhistory_lines"
Mikael Berthe <mikael@lilotux.net>
parents: 1122
diff changeset
  2949
  max_histo_lines = settings_opt_get_int("cmdhistory_lines");
fddf2fef7b83 Add option "cmdhistory_lines"
Mikael Berthe <mikael@lilotux.net>
parents: 1122
diff changeset
  2950
fddf2fef7b83 Add option "cmdhistory_lines"
Mikael Berthe <mikael@lilotux.net>
parents: 1122
diff changeset
  2951
  if (max_histo_lines < 0)
fddf2fef7b83 Add option "cmdhistory_lines"
Mikael Berthe <mikael@lilotux.net>
parents: 1122
diff changeset
  2952
    max_histo_lines = 1;
fddf2fef7b83 Add option "cmdhistory_lines"
Mikael Berthe <mikael@lilotux.net>
parents: 1122
diff changeset
  2953
fddf2fef7b83 Add option "cmdhistory_lines"
Mikael Berthe <mikael@lilotux.net>
parents: 1122
diff changeset
  2954
  if (max_histo_lines)
fddf2fef7b83 Add option "cmdhistory_lines"
Mikael Berthe <mikael@lilotux.net>
parents: 1122
diff changeset
  2955
    while (cmdhisto_nblines >= (guint)max_histo_lines) {
fddf2fef7b83 Add option "cmdhistory_lines"
Mikael Berthe <mikael@lilotux.net>
parents: 1122
diff changeset
  2956
      if (cmdhisto_cur && cmdhisto_cur == cmdhisto)
fddf2fef7b83 Add option "cmdhistory_lines"
Mikael Berthe <mikael@lilotux.net>
parents: 1122
diff changeset
  2957
        break;
fddf2fef7b83 Add option "cmdhistory_lines"
Mikael Berthe <mikael@lilotux.net>
parents: 1122
diff changeset
  2958
      g_free(cmdhisto->data);
fddf2fef7b83 Add option "cmdhistory_lines"
Mikael Berthe <mikael@lilotux.net>
parents: 1122
diff changeset
  2959
      cmdhisto = g_list_delete_link(cmdhisto, cmdhisto);
fddf2fef7b83 Add option "cmdhistory_lines"
Mikael Berthe <mikael@lilotux.net>
parents: 1122
diff changeset
  2960
      cmdhisto_nblines--;
fddf2fef7b83 Add option "cmdhistory_lines"
Mikael Berthe <mikael@lilotux.net>
parents: 1122
diff changeset
  2961
    }
173
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2962
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2963
  cmdhisto = g_list_append(cmdhisto, g_strdup(line));
1127
fddf2fef7b83 Add option "cmdhistory_lines"
Mikael Berthe <mikael@lilotux.net>
parents: 1122
diff changeset
  2964
  cmdhisto_nblines++;
173
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2965
}
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2966
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2967
//  scr_cmdhisto_prev()
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2968
// 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
  2969
// Returns NULL if none found
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 332
diff changeset
  2970
static const char *scr_cmdhisto_prev(char *mask, guint len)
173
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2971
{
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2972
  GList *hl;
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2973
  if (!cmdhisto_cur) {
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2974
    hl = g_list_last(cmdhisto);
174
6354625e8fb2 [/trunk] Changeset 186 by mikael
mikael
parents: 173
diff changeset
  2975
    if (hl) { // backup current line
6354625e8fb2 [/trunk] Changeset 186 by mikael
mikael
parents: 173
diff changeset
  2976
      strncpy(cmdhisto_backup, mask, INPUTLINE_LENGTH);
6354625e8fb2 [/trunk] Changeset 186 by mikael
mikael
parents: 173
diff changeset
  2977
    }
173
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2978
  } else {
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2979
    hl = g_list_previous(cmdhisto_cur);
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2980
  }
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2981
  while (hl) {
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2982
    if (!strncmp((char*)hl->data, mask, len)) {
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2983
      // Found a match
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2984
      cmdhisto_cur = hl;
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2985
      return (const char*)hl->data;
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2986
    }
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2987
    hl = g_list_previous(hl);
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2988
  }
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2989
  return NULL;
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2990
}
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2991
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2992
//  scr_cmdhisto_next()
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2993
// 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
  2994
// Returns NULL if none found
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 332
diff changeset
  2995
static const char *scr_cmdhisto_next(char *mask, guint len)
173
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2996
{
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2997
  GList *hl;
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2998
  if (!cmdhisto_cur) return NULL;
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  2999
  hl = cmdhisto_cur;
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  3000
  while ((hl = g_list_next(hl)) != NULL)
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  3001
    if (!strncmp((char*)hl->data, mask, len)) {
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  3002
      // Found a match
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  3003
      cmdhisto_cur = hl;
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  3004
      return (const char*)hl->data;
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  3005
    }
175
7b7dd6d69f58 [/trunk] Changeset 187 by mikael
mikael
parents: 174
diff changeset
  3006
  // If the "backuped" line matches, we'll use it
7b7dd6d69f58 [/trunk] Changeset 187 by mikael
mikael
parents: 174
diff changeset
  3007
  if (strncmp(cmdhisto_backup, mask, len)) return NULL; // No match
174
6354625e8fb2 [/trunk] Changeset 186 by mikael
mikael
parents: 173
diff changeset
  3008
  cmdhisto_cur = NULL;
6354625e8fb2 [/trunk] Changeset 186 by mikael
mikael
parents: 173
diff changeset
  3009
  return cmdhisto_backup;
173
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  3010
}
09e24917059d [/trunk] Changeset 185 by mikael
mikael
parents: 168
diff changeset
  3011
195
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  3012
//  readline_transpose_chars()
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  3013
// Drag  the  character  before point forward over the character at
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  3014
// point, moving point forward as well.  If point is at the end  of
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  3015
// the  line, then this transposes the two characters before point.
1059
875d2c9d399c Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1058
diff changeset
  3016
void readline_transpose_chars(void)
195
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  3017
{
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3018
  char *c1, *c2;
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3019
  unsigned a, b;
195
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  3020
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  3021
  if (ptr_inputline == inputLine) return;
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  3022
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  3023
  if (!*ptr_inputline) { // We're at EOL
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  3024
    // If line is only 1 char long, nothing to do...
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3025
    if (ptr_inputline == prev_char(ptr_inputline, inputLine)) return;
195
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  3026
    // Transpose the two previous characters
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3027
    c2 = prev_char(ptr_inputline, inputLine);
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3028
    c1 = prev_char(c2, inputLine);
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3029
    a = get_char(c1);
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3030
    b = get_char(c2);
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3031
    put_char(put_char(c1, b), a);
195
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  3032
  } else {
196
58eb8ad9ef74 [/trunk] Changeset 208 by mikael
mikael
parents: 195
diff changeset
  3033
    // Swap the two characters before the cursor and move right.
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3034
    c2 = ptr_inputline;
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3035
    c1 = prev_char(c2, inputLine);
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3036
    a = get_char(c1);
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3037
    b = get_char(c2);
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3038
    put_char(put_char(c1, b), a);
195
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  3039
    check_offset(1);
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  3040
  }
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  3041
}
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  3042
1171
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3043
void readline_forward_kill_word(void)
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3044
{
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3045
  char *c, *old = ptr_inputline;
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3046
  int spaceallowed = 1;
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3047
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3048
  if (! *ptr_inputline) return;
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3049
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3050
  for (c = ptr_inputline ; *c ; c = next_char(c)) {
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3051
    if (!iswalnum(get_char(c))) {
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3052
      if (iswblank(get_char(c))) {
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3053
        if (!spaceallowed) break;
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3054
      } else spaceallowed = 0;
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3055
    } else spaceallowed = 0;
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3056
  }
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3057
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3058
  // Modify the line
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3059
  for (;;) {
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3060
    *old = *c++;
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3061
    if (!*old++) break;
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3062
  }
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3063
}
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3064
195
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  3065
//  readline_backward_kill_word()
194
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  3066
// Kill the word before the cursor, in input line
1059
875d2c9d399c Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1058
diff changeset
  3067
void readline_backward_kill_word(void)
194
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  3068
{
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  3069
  char *c, *old = ptr_inputline;
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  3070
  int spaceallowed = 1;
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  3071
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  3072
  if (ptr_inputline == inputLine) return;
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  3073
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3074
  c = prev_char(ptr_inputline, inputLine);
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3075
  for ( ; c > inputLine ; c = prev_char(c, inputLine)) {
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3076
    if (!iswalnum(get_char(c))) {
933
ede9260be93d Input line: Improve word-related functions
Mikael Berthe <mikael@lilotux.net>
parents: 932
diff changeset
  3077
      if (iswblank(get_char(c))) {
194
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  3078
        if (!spaceallowed) break;
933
ede9260be93d Input line: Improve word-related functions
Mikael Berthe <mikael@lilotux.net>
parents: 932
diff changeset
  3079
      } else spaceallowed = 0;
194
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  3080
    } 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
  3081
  }
194
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  3082
1280
8b621f980321 readline_backward_kill_word() makes a stop at the "command" character
Mikael Berthe <mikael@lilotux.net>
parents: 1279
diff changeset
  3083
  if (c == inputLine && *c == COMMAND_CHAR && old != c+1) {
8b621f980321 readline_backward_kill_word() makes a stop at the "command" character
Mikael Berthe <mikael@lilotux.net>
parents: 1279
diff changeset
  3084
      c = next_char(c);
8b621f980321 readline_backward_kill_word() makes a stop at the "command" character
Mikael Berthe <mikael@lilotux.net>
parents: 1279
diff changeset
  3085
  } else if (c != inputLine || iswblank(get_char(c))) {
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3086
    if ((c < prev_char(ptr_inputline, inputLine)) && (!iswalnum(get_char(c))))
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3087
      c = next_char(c);
1280
8b621f980321 readline_backward_kill_word() makes a stop at the "command" character
Mikael Berthe <mikael@lilotux.net>
parents: 1279
diff changeset
  3088
  }
194
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  3089
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  3090
  // Modify the line
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  3091
  ptr_inputline = c;
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  3092
  for (;;) {
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  3093
    *c = *old++;
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  3094
    if (!*c++) break;
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  3095
  }
195
cdaa53d5ef70 [/trunk] Changeset 207 by mikael
mikael
parents: 194
diff changeset
  3096
  check_offset(-1);
194
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  3097
}
a05d5c3876ec [/trunk] Changeset 206 by mikael
mikael
parents: 190
diff changeset
  3098
759
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  3099
//  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
  3100
// Move  back  to the start of the current or previous word
1059
875d2c9d399c Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1058
diff changeset
  3101
void readline_backward_word(void)
759
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  3102
{
1172
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3103
  int i = 0;
759
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  3104
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  3105
  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
  3106
1172
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3107
  if (iswalnum(get_char(ptr_inputline)) &&
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3108
      !iswalnum(get_char(prev_char(ptr_inputline, inputLine))))
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3109
    i--;
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3110
1333
e30a9d907105 Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents: 1314
diff changeset
  3111
  for ( ;
e30a9d907105 Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents: 1314
diff changeset
  3112
       ptr_inputline > inputLine;
e30a9d907105 Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents: 1314
diff changeset
  3113
       ptr_inputline = prev_char(ptr_inputline, inputLine)) {
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3114
    if (!iswalnum(get_char(ptr_inputline))) {
1172
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3115
      if (i) {
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3116
        ptr_inputline = next_char(ptr_inputline);
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3117
        break;
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3118
      }
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3119
    } else i++;
759
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  3120
  }
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  3121
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  3122
  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
  3123
}
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  3124
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  3125
//  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
  3126
// Move forward to the end of the next word
1059
875d2c9d399c Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1058
diff changeset
  3127
void readline_forward_word(void)
759
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  3128
{
1172
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3129
  int stopsymbol_allowed = 1;
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3130
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3131
  while (*ptr_inputline) {
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3132
    if (!iswalnum(get_char(ptr_inputline))) {
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3133
      if (!stopsymbol_allowed) break;
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3134
    } else stopsymbol_allowed = 0;
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3135
    ptr_inputline = next_char(ptr_inputline);
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3136
  }
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3137
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3138
  check_offset(1);
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3139
}
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3140
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3141
void readline_updowncase_word(int upcase)
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3142
{
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3143
  int stopsymbol_allowed = 1;
759
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  3144
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  3145
  while (*ptr_inputline) {
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3146
    if (!iswalnum(get_char(ptr_inputline))) {
1172
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3147
      if (!stopsymbol_allowed) break;
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3148
    } else {
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3149
      stopsymbol_allowed = 0;
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3150
      if (upcase)
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3151
        *ptr_inputline = towupper(get_char(ptr_inputline));
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3152
      else
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3153
        *ptr_inputline = towlower(get_char(ptr_inputline));
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3154
    }
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3155
    ptr_inputline = next_char(ptr_inputline);
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3156
  }
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3157
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3158
  check_offset(1);
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3159
}
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3160
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3161
void readline_capitalize_word(void)
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3162
{
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3163
  int stopsymbol_allowed = 1;
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3164
  int upcased = 0;
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3165
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3166
  while (*ptr_inputline) {
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3167
    if (!iswalnum(get_char(ptr_inputline))) {
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3168
      if (!stopsymbol_allowed) break;
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3169
    } else {
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3170
      stopsymbol_allowed = 0;
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3171
      if (!upcased) {
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3172
        *ptr_inputline = towupper(get_char(ptr_inputline));
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3173
        upcased = 1;
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3174
      } else *ptr_inputline = towlower(get_char(ptr_inputline));
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3175
    }
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3176
    ptr_inputline = next_char(ptr_inputline);
759
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  3177
  }
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  3178
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  3179
  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
  3180
}
a681dc477c7f Add readline_backward_word and readline_forward_word (Ctrl-Left/Ctrl-Right)
Mikael Berthe <mikael@lilotux.net>
parents: 758
diff changeset
  3181
1171
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3182
void readline_backward_char(void)
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3183
{
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3184
  if (ptr_inputline == (char*)&inputLine) return;
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3185
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3186
  ptr_inputline = prev_char(ptr_inputline, inputLine);
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3187
  check_offset(-1);
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3188
}
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3189
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3190
void readline_forward_char(void)
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3191
{
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3192
  if (!*ptr_inputline) return;
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3193
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3194
  ptr_inputline = next_char(ptr_inputline);
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3195
  check_offset(1);
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3196
}
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3197
1177
10733d7de004 Refactor readline_accept_line() and readline_accept_line_down_hist()
Mikael Berthe <mikael@lilotux.net>
parents: 1176
diff changeset
  3198
//  readline_accept_line(down_history)
10733d7de004 Refactor readline_accept_line() and readline_accept_line_down_hist()
Mikael Berthe <mikael@lilotux.net>
parents: 1176
diff changeset
  3199
// Validate current command line.
10733d7de004 Refactor readline_accept_line() and readline_accept_line_down_hist()
Mikael Berthe <mikael@lilotux.net>
parents: 1176
diff changeset
  3200
// If down_history is true, load the next history line.
10733d7de004 Refactor readline_accept_line() and readline_accept_line_down_hist()
Mikael Berthe <mikael@lilotux.net>
parents: 1176
diff changeset
  3201
int readline_accept_line(int down_history)
1172
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3202
{
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3203
  scr_CheckAutoAway(TRUE);
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3204
  if (process_line(inputLine))
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3205
    return 255;
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3206
  // Add line to history
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3207
  scr_cmdhisto_addline(inputLine);
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3208
  // Reset the line
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3209
  ptr_inputline = inputLine;
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3210
  *ptr_inputline = 0;
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3211
  inputline_offset = 0;
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3212
1177
10733d7de004 Refactor readline_accept_line() and readline_accept_line_down_hist()
Mikael Berthe <mikael@lilotux.net>
parents: 1176
diff changeset
  3213
  if (down_history) {
10733d7de004 Refactor readline_accept_line() and readline_accept_line_down_hist()
Mikael Berthe <mikael@lilotux.net>
parents: 1176
diff changeset
  3214
    // Use next history line instead of a blank line
10733d7de004 Refactor readline_accept_line() and readline_accept_line_down_hist()
Mikael Berthe <mikael@lilotux.net>
parents: 1176
diff changeset
  3215
    const char *l = scr_cmdhisto_next("", 0);
10733d7de004 Refactor readline_accept_line() and readline_accept_line_down_hist()
Mikael Berthe <mikael@lilotux.net>
parents: 1176
diff changeset
  3216
    if (l) strcpy(inputLine, l);
10733d7de004 Refactor readline_accept_line() and readline_accept_line_down_hist()
Mikael Berthe <mikael@lilotux.net>
parents: 1176
diff changeset
  3217
    // Reset backup history line
10733d7de004 Refactor readline_accept_line() and readline_accept_line_down_hist()
Mikael Berthe <mikael@lilotux.net>
parents: 1176
diff changeset
  3218
    cmdhisto_backup[0] = 0;
10733d7de004 Refactor readline_accept_line() and readline_accept_line_down_hist()
Mikael Berthe <mikael@lilotux.net>
parents: 1176
diff changeset
  3219
  } else {
10733d7de004 Refactor readline_accept_line() and readline_accept_line_down_hist()
Mikael Berthe <mikael@lilotux.net>
parents: 1176
diff changeset
  3220
    // Reset history line pointer
10733d7de004 Refactor readline_accept_line() and readline_accept_line_down_hist()
Mikael Berthe <mikael@lilotux.net>
parents: 1176
diff changeset
  3221
    cmdhisto_cur = NULL;
10733d7de004 Refactor readline_accept_line() and readline_accept_line_down_hist()
Mikael Berthe <mikael@lilotux.net>
parents: 1176
diff changeset
  3222
  }
1172
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3223
  return 0;
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3224
}
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3225
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3226
void readline_cancel_completion(void)
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3227
{
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3228
  scr_cancel_current_completion();
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3229
  scr_end_current_completion();
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3230
  check_offset(-1);
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3231
}
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3232
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3233
void readline_do_completion(void)
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3234
{
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3235
  int i, n;
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3236
1413
f89844a0448a Remove useless inlines
Mikael Berthe <mikael@lilotux.net>
parents: 1394
diff changeset
  3237
  if (multimode != 2) {
1172
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3238
    // Not in verbatim multi-line mode
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3239
    scr_handle_tab();
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3240
  } else {
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3241
    // Verbatim multi-line mode: expand tab
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3242
    char tabstr[9];
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3243
    n = 8 - (ptr_inputline - inputLine) % 8;
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3244
    for (i = 0; i < n; i++)
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3245
      tabstr[i] = ' ';
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3246
    tabstr[i] = '\0';
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3247
    scr_insert_text(tabstr);
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3248
  }
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3249
  check_offset(0);
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3250
}
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3251
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3252
void readline_refresh_screen(void)
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3253
{
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3254
  scr_CheckAutoAway(TRUE);
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3255
  ParseColors();
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3256
  scr_Resize();
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3257
  redrawwin(stdscr);
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3258
}
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3259
1503
c74cfe7fd848 Add option --show-roster to command chat_disable.
Mikael Berthe <mikael@lilotux.net>
parents: 1502
diff changeset
  3260
void readline_disable_chat_mode(guint show_roster)
1172
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3261
{
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3262
  scr_CheckAutoAway(TRUE);
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3263
  currentWindow = NULL;
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3264
  chatmode = FALSE;
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3265
  if (current_buddy)
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3266
    buddy_setflags(BUDDATA(current_buddy), ROSTER_FLAG_LOCK, FALSE);
1503
c74cfe7fd848 Add option --show-roster to command chat_disable.
Mikael Berthe <mikael@lilotux.net>
parents: 1502
diff changeset
  3267
  if (show_roster)
c74cfe7fd848 Add option --show-roster to command chat_disable.
Mikael Berthe <mikael@lilotux.net>
parents: 1502
diff changeset
  3268
    scr_RosterVisibility(1);
1172
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3269
  scr_UpdateChatStatus(FALSE);
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3270
  top_panel(chatPanel);
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3271
  top_panel(inputPanel);
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3272
  update_panels();
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3273
}
334ae9f498f1 Add some more iline functions (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1171
diff changeset
  3274
1190
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3275
void readline_hist_beginning_search_bwd(void)
1171
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3276
{
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3277
  const char *l = scr_cmdhisto_prev(inputLine, ptr_inputline-inputLine);
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3278
  if (l) strcpy(inputLine, l);
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3279
}
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3280
1190
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3281
void readline_hist_beginning_search_fwd(void)
1171
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3282
{
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3283
  const char *l = scr_cmdhisto_next(inputLine, ptr_inputline-inputLine);
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3284
  if (l) strcpy(inputLine, l);
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3285
}
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3286
1190
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3287
void readline_hist_prev(void)
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3288
{
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3289
  const char *l = scr_cmdhisto_prev(inputLine, 0);
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3290
  if (l) {
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3291
    strcpy(inputLine, l);
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3292
    // Set the pointer at the EOL.
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3293
    // We have to move it to BOL first, because we could be too far already.
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3294
    readline_iline_start();
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3295
    readline_iline_end();
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3296
  }
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3297
}
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3298
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3299
void readline_hist_next(void)
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3300
{
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3301
  const char *l = scr_cmdhisto_next(inputLine, 0);
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3302
  if (l) {
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3303
    strcpy(inputLine, l);
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3304
    // Set the pointer at the EOL.
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3305
    // We have to move it to BOL first, because we could be too far already.
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3306
    readline_iline_start();
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3307
    readline_iline_end();
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3308
  }
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3309
}
be06bbe7e449 Add readline_hist_beginning_search_bwd/fwd functions
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
  3310
1171
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3311
void readline_backward_kill_char(void)
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3312
{
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3313
  char *src, *c;
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3314
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3315
  if (ptr_inputline == (char*)&inputLine)
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3316
    return;
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3317
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3318
  src = ptr_inputline;
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3319
  c = prev_char(ptr_inputline, inputLine);
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3320
  ptr_inputline = c;
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3321
  for ( ; *src ; )
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3322
    *c++ = *src++;
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3323
  *c = 0;
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3324
  check_offset(-1);
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3325
}
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3326
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3327
void readline_forward_kill_char(void)
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3328
{
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3329
  if (!*ptr_inputline)
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3330
    return;
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3331
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3332
  strcpy(ptr_inputline, next_char(ptr_inputline));
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3333
}
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3334
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3335
void readline_iline_start(void)
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3336
{
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3337
  ptr_inputline = inputLine;
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3338
  inputline_offset = 0;
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3339
}
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3340
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3341
void readline_iline_end(void)
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3342
{
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3343
  for (; *ptr_inputline; ptr_inputline++) ;
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3344
  check_offset(1);
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3345
}
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3346
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3347
void readline_backward_kill_iline(void)
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3348
{
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3349
  strcpy(inputLine, ptr_inputline);
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3350
  ptr_inputline = inputLine;
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3351
  inputline_offset = 0;
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3352
}
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3353
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3354
void readline_forward_kill_iline(void)
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3355
{
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3356
  *ptr_inputline = 0;
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3357
}
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3358
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3359
void readline_send_multiline(void)
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3360
{
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3361
  // Validate current multi-line
1413
f89844a0448a Remove useless inlines
Mikael Berthe <mikael@lilotux.net>
parents: 1394
diff changeset
  3362
  if (multimode)
1187
16abe7ec3056 Fix a conflict between verbatim multiline mode and the key binding system
Mikael Berthe <mikael@lilotux.net>
parents: 1186
diff changeset
  3363
    process_command(mkcmdstr("msay send"), TRUE);
1171
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3364
}
03a38b7ad2e0 Add a collection of commands for key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1170
diff changeset
  3365
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3366
//  which_row()
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3367
// 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
  3368
// -2 -> normal text
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  3369
// -1 -> room: nickname completion
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3370
//  0 -> command
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3371
//  1 -> parameter 1 (etc.)
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
  3372
//  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
  3373
static int which_row(const char **p_row)
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3374
{
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3375
  int row = -1;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3376
  char *p;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3377
  int quote = FALSE;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3378
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3379
  // Not a command?
967
303408ef5e5d Configurable command character
Alexis Hildebrandt
parents: 966
diff changeset
  3380
  if ((ptr_inputline == inputLine) || (inputLine[0] != COMMAND_CHAR)) {
503
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  3381
    if (!current_buddy) return -2;
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  3382
    if (buddy_gettype(BUDDATA(current_buddy)) == ROSTER_TYPE_ROOM) {
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  3383
      *p_row = inputLine;
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  3384
      return -1;
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  3385
    }
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  3386
    return -2;
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  3387
  }
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3388
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3389
  // This is a command
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3390
  row = 0;
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3391
  for (p = inputLine ; p < ptr_inputline ; p = next_char(p)) {
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3392
    if (quote) {
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3393
      if (*p == '"' && *(p-1) != '\\')
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3394
        quote = FALSE;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3395
      continue;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3396
    }
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3397
    if (*p == '"' && *(p-1) != '\\') {
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3398
      quote = TRUE;
121
94b251102069 [/trunk] Changeset 134 by mikael
mikael
parents: 120
diff changeset
  3399
    } else if (*p == ' ') {
94b251102069 [/trunk] Changeset 134 by mikael
mikael
parents: 120
diff changeset
  3400
      if (*(p-1) != ' ')
94b251102069 [/trunk] Changeset 134 by mikael
mikael
parents: 120
diff changeset
  3401
        row++;
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
  3402
      *p_row = p+1;
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
  3403
    }
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3404
  }
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3405
  return row;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3406
}
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3407
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  3408
//  scr_insert_text()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  3409
// Insert the given text at the current cursor position.
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  3410
// 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
  3411
// after, the caller should do that.
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 332
diff changeset
  3412
static void scr_insert_text(const char *text)
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3413
{
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3414
  char tmpLine[INPUTLINE_LENGTH+1];
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3415
  int len = strlen(text);
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3416
  // Check the line isn't too long
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3417
  if (strlen(inputLine) + len >= INPUTLINE_LENGTH) {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
  3418
    scr_LogPrint(LPRINT_LOGNORM, "Cannot insert text, line too long.");
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3419
    return;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3420
  }
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3421
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3422
  strcpy(tmpLine, ptr_inputline);
419
2f9852610cf4 Small code review
Mikael Berthe <mikael@lilotux.net>
parents: 412
diff changeset
  3423
  strcpy(ptr_inputline, text);
2f9852610cf4 Small code review
Mikael Berthe <mikael@lilotux.net>
parents: 412
diff changeset
  3424
  ptr_inputline += len;
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3425
  strcpy(ptr_inputline, tmpLine);
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3426
}
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3427
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3428
static void scr_cancel_current_completion(void);
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3429
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  3430
//  scr_handle_tab()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  3431
// Function called when tab is pressed.
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
  3432
// Initiate or continue a completion...
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 332
diff changeset
  3433
static void scr_handle_tab(void)
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3434
{
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
  3435
  int nrow;
503
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  3436
  const char *row;
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
  3437
  const char *cchar;
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  3438
  guint compl_categ;
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3439
740
1877838d3c27 Kill two gcc warnings
Mikael Berthe <mikael@lilotux.net>
parents: 739
diff changeset
  3440
  row = inputLine; // (Kills a GCC warning)
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
  3441
  nrow = which_row(&row);
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3442
503
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  3443
  // a) No completion if no leading slash ('cause not a command),
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  3444
  //    unless this is a room (then, it is a nickname completion)
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  3445
  // 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
  3446
  if ((nrow == -2) || (nrow == 3 && !completion_started) || nrow > 3)
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  3447
    return;
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
  3448
503
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  3449
  if (nrow == 0) {          // Command completion
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3450
    row = next_char(inputLine);
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  3451
    compl_categ = COMPL_CMD;
503
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  3452
  } else if (nrow == -1) {  // Nickname completion
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  3453
    compl_categ = COMPL_RESOURCE;
ddec224c2318 MUC: nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 499
diff changeset
  3454
  } else {                  // Other completion, depending on the command
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  3455
    int alias = FALSE;
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  3456
    cmd *com;
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  3457
    char *xpline = expandalias(inputLine);
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  3458
    com = cmd_get(xpline);
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  3459
    if (xpline != inputLine) {
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  3460
      // This is an alias, so we can't complete rows > 0
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  3461
      alias = TRUE;
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  3462
      g_free(xpline);
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  3463
    }
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  3464
    if ((!com && (!alias || !completion_started)) || !row) {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 373
diff changeset
  3465
      scr_LogPrint(LPRINT_NORMAL, "I cannot complete that...");
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  3466
      return;
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  3467
    }
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  3468
    if (!alias)
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  3469
      compl_categ = com->completion_flags[nrow-1];
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  3470
    else
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
  3471
      compl_categ = 0;
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  3472
  }
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  3473
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  3474
  if (!completion_started) {
1076
b9698c89f46d Fix memory leak in scr_handle_tab()
Mikael Berthe <mikael@lilotux.net>
parents: 1075
diff changeset
  3475
    guint dynlist;
b9698c89f46d Fix memory leak in scr_handle_tab()
Mikael Berthe <mikael@lilotux.net>
parents: 1075
diff changeset
  3476
    GSList *list = compl_get_category_list(compl_categ, &dynlist);
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  3477
    if (list) {
1228
9a68fe4515dc Improve MUC nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 1227
diff changeset
  3478
      guint n;
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  3479
      char *prefix = g_strndup(row, ptr_inputline-row);
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  3480
      // Init completion
1228
9a68fe4515dc Improve MUC nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 1227
diff changeset
  3481
      n = new_completion(prefix, list);
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  3482
      g_free(prefix);
1228
9a68fe4515dc Improve MUC nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 1227
diff changeset
  3483
      if (n == 0 && nrow == -1) {
9a68fe4515dc Improve MUC nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 1227
diff changeset
  3484
        // This is a MUC room and we can't complete from the beginning of the
9a68fe4515dc Improve MUC nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 1227
diff changeset
  3485
        // line.  Let's try a bit harder and complete the current word.
9a68fe4515dc Improve MUC nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 1227
diff changeset
  3486
        row = prev_char(ptr_inputline, inputLine);
9a68fe4515dc Improve MUC nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 1227
diff changeset
  3487
        while (row >= inputLine) {
1239
eb9fc5d6d085 MUC: Nickname completion starts from any non-space character
Mikael Berthe <mikael@lilotux.net>
parents: 1229
diff changeset
  3488
          if (iswspace(get_char(row)) || get_char(row) == '(') {
1228
9a68fe4515dc Improve MUC nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 1227
diff changeset
  3489
              row = next_char((char*)row);
9a68fe4515dc Improve MUC nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 1227
diff changeset
  3490
              break;
9a68fe4515dc Improve MUC nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 1227
diff changeset
  3491
          }
9a68fe4515dc Improve MUC nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 1227
diff changeset
  3492
          if (row == inputLine)
9a68fe4515dc Improve MUC nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 1227
diff changeset
  3493
            break;
9a68fe4515dc Improve MUC nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 1227
diff changeset
  3494
          row = prev_char((char*)row, inputLine);
9a68fe4515dc Improve MUC nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 1227
diff changeset
  3495
        }
9a68fe4515dc Improve MUC nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 1227
diff changeset
  3496
        // There's no need to try again if row == inputLine
9a68fe4515dc Improve MUC nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 1227
diff changeset
  3497
        if (row > inputLine) {
9a68fe4515dc Improve MUC nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 1227
diff changeset
  3498
          prefix = g_strndup(row, ptr_inputline-row);
9a68fe4515dc Improve MUC nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 1227
diff changeset
  3499
          new_completion(prefix, list);
9a68fe4515dc Improve MUC nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 1227
diff changeset
  3500
          g_free(prefix);
9a68fe4515dc Improve MUC nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 1227
diff changeset
  3501
        }
9a68fe4515dc Improve MUC nickname completion
Mikael Berthe <mikael@lilotux.net>
parents: 1227
diff changeset
  3502
      }
1076
b9698c89f46d Fix memory leak in scr_handle_tab()
Mikael Berthe <mikael@lilotux.net>
parents: 1075
diff changeset
  3503
      // Free the list if it's a dynamic one
b9698c89f46d Fix memory leak in scr_handle_tab()
Mikael Berthe <mikael@lilotux.net>
parents: 1075
diff changeset
  3504
      if (dynlist) {
b9698c89f46d Fix memory leak in scr_handle_tab()
Mikael Berthe <mikael@lilotux.net>
parents: 1075
diff changeset
  3505
        GSList *slp;
b9698c89f46d Fix memory leak in scr_handle_tab()
Mikael Berthe <mikael@lilotux.net>
parents: 1075
diff changeset
  3506
        for (slp = list; slp; slp = g_slist_next(slp))
b9698c89f46d Fix memory leak in scr_handle_tab()
Mikael Berthe <mikael@lilotux.net>
parents: 1075
diff changeset
  3507
          g_free(slp->data);
b9698c89f46d Fix memory leak in scr_handle_tab()
Mikael Berthe <mikael@lilotux.net>
parents: 1075
diff changeset
  3508
        g_slist_free(list);
b9698c89f46d Fix memory leak in scr_handle_tab()
Mikael Berthe <mikael@lilotux.net>
parents: 1075
diff changeset
  3509
      }
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  3510
      // Now complete
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3511
      cchar = complete();
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3512
      if (cchar)
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3513
        scr_insert_text(cchar);
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  3514
      completion_started = TRUE;
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3515
    }
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  3516
  } else {      // Completion already initialized
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3517
    scr_cancel_current_completion();
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  3518
    // Now complete again
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  3519
    cchar = complete();
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  3520
    if (cchar)
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
  3521
      scr_insert_text(cchar);
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
  3522
  }
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3523
}
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3524
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 332
diff changeset
  3525
static void scr_cancel_current_completion(void)
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3526
{
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3527
  char *c;
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3528
  char *src = ptr_inputline;
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3529
  guint back = cancel_completion();
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3530
  guint i;
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3531
  // Remove $back chars
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3532
  for (i = 0; i < back; i++)
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3533
    ptr_inputline = prev_char(ptr_inputline, inputLine);
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3534
  c = ptr_inputline;
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3535
  for ( ; *src ; )
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3536
    *c++ = *src++;
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3537
  *c = 0;
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3538
}
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3539
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 332
diff changeset
  3540
static void scr_end_current_completion(void)
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3541
{
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3542
  done_completion();
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3543
  completion_started = FALSE;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3544
}
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3545
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  3546
//  check_offset(int direction)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  3547
// Check inputline_offset value, and make sure the cursor is inside the
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  3548
// screen.
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 332
diff changeset
  3549
static inline void check_offset(int direction)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  3550
{
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3551
  int i;
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3552
  char *c = &inputLine[inputline_offset];
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  3553
  // Left side
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  3554
  if (inputline_offset && direction <= 0) {
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3555
    while (ptr_inputline <= c) {
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3556
      for (i = 0; i < 5; i++)
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3557
        c = prev_char(c, inputLine);
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3558
      if (c == inputLine)
828
319fc55b9a2b Fix a bug in check_offset()
Mikael Berthe <mikael@lilotux.net>
parents: 827
diff changeset
  3559
        break;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  3560
    }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  3561
  }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  3562
  // Right side
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  3563
  if (direction >= 0) {
932
fc6aaa223650 Fix a few problems with non-UTF-8 locales
Mikael Berthe <mikael@lilotux.net>
parents: 931
diff changeset
  3564
    int delta = get_char_width(c);
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3565
    while (ptr_inputline > c) {
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3566
      c = next_char(c);
932
fc6aaa223650 Fix a few problems with non-UTF-8 locales
Mikael Berthe <mikael@lilotux.net>
parents: 931
diff changeset
  3567
      delta += get_char_width(c);
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3568
    }
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3569
    c = &inputLine[inputline_offset];
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3570
    while (delta >= maxX) {
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3571
      for (i = 0; i < 5; i++) {
932
fc6aaa223650 Fix a few problems with non-UTF-8 locales
Mikael Berthe <mikael@lilotux.net>
parents: 931
diff changeset
  3572
        delta -= get_char_width(c);
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3573
        c = next_char(c);
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3574
      }
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3575
    }
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  3576
  }
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3577
  inputline_offset = c - inputLine;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  3578
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  3579
1179
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3580
#ifdef HAVE_ASPELL_H
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3581
// prints inputLine with underlined words when misspelled
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3582
static inline void print_checked_line(void)
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3583
{
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3584
  char *wprint_char_fmt = "%c";
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3585
  int point;
1566
d64e0b2855fc Fix display of last character in the input line when Aspell support is enabled
Mikael Berthe <mikael@lilotux.net>
parents: 1563
diff changeset
  3586
  int nrchar = maxX;
1179
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3587
  char *ptrCur = inputLine + inputline_offset;
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3588
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3589
#ifdef UNICODE
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3590
  // We need this to display a single UTF-8 char... Any better solution?
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3591
  if (utf8_mode)
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3592
    wprint_char_fmt = "%lc";
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3593
#endif
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3594
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3595
  wmove(inputWnd, 0, 0); // problem with backspace
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3596
1566
d64e0b2855fc Fix display of last character in the input line when Aspell support is enabled
Mikael Berthe <mikael@lilotux.net>
parents: 1563
diff changeset
  3597
  while (*ptrCur && nrchar-- > 0) {
1179
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3598
    point = ptrCur - inputLine;
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3599
    if (maskLine[point])
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3600
      wattrset(inputWnd, A_UNDERLINE);
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3601
    wprintw(inputWnd, wprint_char_fmt, get_char(ptrCur));
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3602
    wattrset(inputWnd, A_NORMAL);
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3603
    ptrCur = next_char(ptrCur);
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3604
  }
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3605
}
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3606
#endif
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3607
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 332
diff changeset
  3608
static inline void refresh_inputline(void)
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  3609
{
1179
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3610
#ifdef HAVE_ASPELL_H
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3611
  if (settings_opt_get_int("aspell_enable")) {
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3612
    memset(maskLine, 0, INPUTLINE_LENGTH+1);
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3613
    spellcheck(inputLine, maskLine);
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3614
  }
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3615
  print_checked_line();
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  3616
  wclrtoeol(inputWnd);
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3617
  if (*ptr_inputline) {
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3618
    // hack to set cursor pos. Characters can have different width,
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3619
    // so I know of no better way.
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3620
    char c = *ptr_inputline;
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3621
    *ptr_inputline = 0;
1179
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3622
    print_checked_line();
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3623
    *ptr_inputline = c;
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3624
  }
1179
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3625
#else
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3626
  mvwprintw(inputWnd, 0, 0, "%s", inputLine + inputline_offset);
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3627
  wclrtoeol(inputWnd);
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3628
  if (*ptr_inputline) {
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3629
    // hack to set cursor pos. Characters can have different width,
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3630
    // so I know of no better way.
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3631
    char c = *ptr_inputline;
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3632
    *ptr_inputline = 0;
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3633
    mvwprintw(inputWnd, 0, 0, "%s", inputLine + inputline_offset);
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3634
    *ptr_inputline = c;
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3635
  }
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3636
#endif
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  3637
}
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  3638
389
6e895f397474 Ncurses changes + Ctrl-C does not send a signal anylore
Mikael Berthe <mikael@lilotux.net>
parents: 388
diff changeset
  3639
void scr_handle_CtrlC(void)
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  3640
{
365
ddb6593bedc9 Fix segfault when mcabber receives an INT signal (Ctrl-C) early
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
  3641
  if (!Curses) return;
315
65aa05520556 First Ctrl-C now also leaves multi-line message mode
Mikael Berthe <mikael@lilotux.net>
parents: 314
diff changeset
  3642
  // Leave multi-line mode
1187
16abe7ec3056 Fix a conflict between verbatim multiline mode and the key binding system
Mikael Berthe <mikael@lilotux.net>
parents: 1186
diff changeset
  3643
  process_command(mkcmdstr("msay abort"), TRUE);
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  3644
  // Same as Ctrl-g, now
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  3645
  scr_cancel_current_completion();
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  3646
  scr_end_current_completion();
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  3647
  check_offset(-1);
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  3648
  refresh_inputline();
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  3649
}
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  3650
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3651
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
  3652
{
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3653
  keyseq *ks;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3654
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3655
  // Let's make sure the length is correct
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3656
  if (strlen(seqstr) > MAX_KEYSEQ_LENGTH) {
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3657
    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
  3658
    return;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3659
  }
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3660
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3661
  ks = g_new0(keyseq, 1);
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3662
  ks->seqstr = g_strdup(seqstr);
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3663
  ks->mkeycode = mkeycode;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3664
  ks->value = value;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3665
  keyseqlist = g_slist_append(keyseqlist, ks);
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3666
}
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3667
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3668
//  match_keyseq(iseq, &ret)
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3669
// Check if "iseq" is a known key escape sequence.
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3670
// Return value:
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3671
// -1  if "seq" matches no known sequence
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3672
//  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
  3673
// >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
  3674
//     and *ret is set to the matching keyseq structure.
952
527d6f234924 Small code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 949
diff changeset
  3675
static inline gint match_keyseq(int *iseq, keyseq **ret)
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  3676
{
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3677
  GSList *ksl;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3678
  keyseq *ksp;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3679
  char *p, c;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3680
  int *i;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3681
  int needmore = FALSE;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3682
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3683
  for (ksl = keyseqlist; ksl; ksl = g_slist_next(ksl)) {
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3684
    ksp = ksl->data;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3685
    p = ksp->seqstr;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3686
    i = iseq;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3687
    while (1) {
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3688
      c = (unsigned char)*i;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3689
      if (!*p && !c) { // Match
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3690
        (*ret) = ksp;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3691
        return ksp->mkeycode;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3692
      }
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3693
      if (!c) {
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3694
        // iseq is too short
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3695
        needmore = TRUE;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3696
        break;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3697
      } else if (!*p || c != *p) {
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3698
        // This isn't a match
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3699
        break;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3700
      }
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3701
      p++; i++;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3702
    }
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3703
  }
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3704
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3705
  if (needmore)
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3706
    return 0;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3707
  return -1;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3708
}
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3709
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3710
static inline int match_utf8_keyseq(int *iseq)
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3711
{
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3712
  int *strp = iseq;
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3713
  unsigned c = *strp++;
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3714
  unsigned mask = 0x80;
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3715
  int len = -1;
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3716
  while (c & mask) {
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3717
    mask >>= 1;
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3718
    len++;
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3719
  }
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3720
  if (len <= 0 || len > 4)
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3721
    return -1;
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3722
  c &= mask - 1;
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3723
  while ((*strp & 0xc0) == 0x80) {
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3724
    if (len-- <= 0) // can't happen
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3725
      return -1;
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3726
    c = (c << 6) | (*strp++ & 0x3f);
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3727
  }
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3728
  if (len)
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3729
    return 0;
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3730
  return c;
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3731
}
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3732
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3733
void scr_Getch(keycode *kcode)
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3734
{
769
15eefed5f1de Kill a gcc warning
Mikael Berthe <mikael@lilotux.net>
parents: 766
diff changeset
  3735
  keyseq *mks = NULL;
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3736
  int  ks[MAX_KEYSEQ_LENGTH+1];
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3737
  int i;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3738
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3739
  memset(kcode, 0, sizeof(keycode));
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3740
  memset(ks,  0, sizeof(ks));
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3741
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3742
  kcode->value = wgetch(inputWnd);
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3743
  if (utf8_mode) {
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1056
diff changeset
  3744
    bool ismeta = (kcode->value == 27);
1561
2e86c1cc4eb1 Map mouse events to p* keycodes
franky
parents: 1558
diff changeset
  3745
#ifdef NCURSES_MOUSE_VERSION
2e86c1cc4eb1 Map mouse events to p* keycodes
franky
parents: 1558
diff changeset
  3746
    bool ismouse = (kcode->value == KEY_MOUSE);
2e86c1cc4eb1 Map mouse events to p* keycodes
franky
parents: 1558
diff changeset
  3747
2e86c1cc4eb1 Map mouse events to p* keycodes
franky
parents: 1558
diff changeset
  3748
    if (ismouse) {
2e86c1cc4eb1 Map mouse events to p* keycodes
franky
parents: 1558
diff changeset
  3749
      MEVENT mouse;
2e86c1cc4eb1 Map mouse events to p* keycodes
franky
parents: 1558
diff changeset
  3750
      getmouse(&mouse);
2e86c1cc4eb1 Map mouse events to p* keycodes
franky
parents: 1558
diff changeset
  3751
      kcode->value = mouse.bstate;
2e86c1cc4eb1 Map mouse events to p* keycodes
franky
parents: 1558
diff changeset
  3752
      kcode->mcode = MKEY_MOUSE;
2e86c1cc4eb1 Map mouse events to p* keycodes
franky
parents: 1558
diff changeset
  3753
      return;
2e86c1cc4eb1 Map mouse events to p* keycodes
franky
parents: 1558
diff changeset
  3754
    } else if (ismeta)
2e86c1cc4eb1 Map mouse events to p* keycodes
franky
parents: 1558
diff changeset
  3755
#else
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1056
diff changeset
  3756
    if (ismeta)
1561
2e86c1cc4eb1 Map mouse events to p* keycodes
franky
parents: 1558
diff changeset
  3757
#endif
944
aec71ebf98fa Fix Meta + UTF-8 character
Mikael Berthe <mikael@lilotux.net>
parents: 940
diff changeset
  3758
      ks[0] = wgetch(inputWnd);
aec71ebf98fa Fix Meta + UTF-8 character
Mikael Berthe <mikael@lilotux.net>
parents: 940
diff changeset
  3759
    else
aec71ebf98fa Fix Meta + UTF-8 character
Mikael Berthe <mikael@lilotux.net>
parents: 940
diff changeset
  3760
      ks[0] = kcode->value;
aec71ebf98fa Fix Meta + UTF-8 character
Mikael Berthe <mikael@lilotux.net>
parents: 940
diff changeset
  3761
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3762
    for (i = 0; i < MAX_KEYSEQ_LENGTH - 1; i++) {
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3763
      int match = match_utf8_keyseq(ks);
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3764
      if (match == -1)
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3765
        break;
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3766
      if (match > 0) {
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3767
        kcode->value = match;
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3768
        kcode->utf8 = 1;
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1056
diff changeset
  3769
        if (ismeta)
944
aec71ebf98fa Fix Meta + UTF-8 character
Mikael Berthe <mikael@lilotux.net>
parents: 940
diff changeset
  3770
          kcode->mcode = MKEY_META;
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3771
        return;
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3772
      }
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3773
      ks[i + 1] = wgetch(inputWnd);
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3774
      if (ks[i + 1] == ERR)
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3775
        break;
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3776
    }
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3777
    while (i > 0)
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3778
      ungetch(ks[i--]);
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1056
diff changeset
  3779
    if (ismeta)
944
aec71ebf98fa Fix Meta + UTF-8 character
Mikael Berthe <mikael@lilotux.net>
parents: 940
diff changeset
  3780
      ungetch(ks[0]);
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3781
    memset(ks,  0, sizeof(ks));
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3782
  }
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3783
  if (kcode->value != 27)
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3784
    return;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3785
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3786
  // Check for escape key sequence
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3787
  for (i=0; i < MAX_KEYSEQ_LENGTH; i++) {
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3788
    int match;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3789
    ks[i] = wgetch(inputWnd);
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3790
    if (ks[i] == ERR) break;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3791
    match = match_keyseq(ks, &mks);
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3792
    if (match == -1) {
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3793
      // 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
  3794
      i++;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3795
      break;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3796
    }
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3797
    if (match > 0) {
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3798
      // We have a matching sequence
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3799
      kcode->mcode = mks->mkeycode;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3800
      kcode->value = mks->value;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3801
      return;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3802
    }
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3803
  }
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3804
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3805
  // No match.  Let's return a meta-key.
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3806
  if (i > 0) {
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3807
    kcode->mcode = MKEY_META;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3808
    kcode->value = ks[0];
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3809
  }
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3810
  if (i > 1) {
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3811
    // 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
  3812
    while (i-- > 1)
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3813
      ungetch(ks[i]);
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3814
  }
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3815
  return;
373
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  3816
}
af2f8ddf6a1b Move (reorganize) functions
Mikael Berthe <mikael@lilotux.net>
parents: 370
diff changeset
  3817
1413
f89844a0448a Remove useless inlines
Mikael Berthe <mikael@lilotux.net>
parents: 1394
diff changeset
  3818
void scr_DoUpdate(void)
939
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 936
diff changeset
  3819
{
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 936
diff changeset
  3820
  doupdate();
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 936
diff changeset
  3821
}
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 936
diff changeset
  3822
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3823
static int bindcommand(keycode kcode)
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3824
{
945
17ef145f3326 Display and use UTF-8 key codes
Mikael Berthe <mikael@lilotux.net>
parents: 944
diff changeset
  3825
  gchar asciikey[16], asciicode[16];
764
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  3826
  const gchar *boundcmd;
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  3827
945
17ef145f3326 Display and use UTF-8 key codes
Mikael Berthe <mikael@lilotux.net>
parents: 944
diff changeset
  3828
  if (kcode.utf8)
17ef145f3326 Display and use UTF-8 key codes
Mikael Berthe <mikael@lilotux.net>
parents: 944
diff changeset
  3829
    g_snprintf(asciicode, 15, "U%d", kcode.value);
17ef145f3326 Display and use UTF-8 key codes
Mikael Berthe <mikael@lilotux.net>
parents: 944
diff changeset
  3830
  else
17ef145f3326 Display and use UTF-8 key codes
Mikael Berthe <mikael@lilotux.net>
parents: 944
diff changeset
  3831
    g_snprintf(asciicode, 15, "%d", kcode.value);
17ef145f3326 Display and use UTF-8 key codes
Mikael Berthe <mikael@lilotux.net>
parents: 944
diff changeset
  3832
764
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  3833
  if (!kcode.mcode || kcode.mcode == MKEY_EQUIV)
945
17ef145f3326 Display and use UTF-8 key codes
Mikael Berthe <mikael@lilotux.net>
parents: 944
diff changeset
  3834
    g_snprintf(asciikey, 15, "%s", asciicode);
764
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  3835
  else if (kcode.mcode == MKEY_META)
945
17ef145f3326 Display and use UTF-8 key codes
Mikael Berthe <mikael@lilotux.net>
parents: 944
diff changeset
  3836
    g_snprintf(asciikey, 15, "M%s", asciicode);
1561
2e86c1cc4eb1 Map mouse events to p* keycodes
franky
parents: 1558
diff changeset
  3837
  else if (kcode.mcode == MKEY_MOUSE)
2e86c1cc4eb1 Map mouse events to p* keycodes
franky
parents: 1558
diff changeset
  3838
    g_snprintf(asciikey, 15, "p%s", asciicode);
764
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  3839
  else
949
e3c49b2f8143 Fix bindings of special keys (MK*)
Mikael Berthe <mikael@lilotux.net>
parents: 945
diff changeset
  3840
    g_snprintf(asciikey, 15, "MK%d", kcode.mcode);
764
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  3841
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  3842
  boundcmd = settings_get(SETTINGS_TYPE_BINDING, asciikey);
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  3843
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  3844
  if (boundcmd) {
1357
7bbfb0073f88 Fix an UTF-8 problem in new hook_execute_internal() function
Mikael Berthe <mikael@lilotux.net>
parents: 1355
diff changeset
  3845
    gchar *cmdline = from_utf8(boundcmd);
764
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  3846
    scr_CheckAutoAway(TRUE);
1187
16abe7ec3056 Fix a conflict between verbatim multiline mode and the key binding system
Mikael Berthe <mikael@lilotux.net>
parents: 1186
diff changeset
  3847
    if (process_command(cmdline, TRUE))
764
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  3848
      return 255; // Quit
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1056
diff changeset
  3849
    g_free(cmdline);
764
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  3850
    return 0;
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  3851
  }
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  3852
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  3853
  scr_LogPrint(LPRINT_NORMAL, "Unknown key=%s", asciikey);
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3854
#ifndef UNICODE
764
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  3855
  if (utf8_mode)
930
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3856
    scr_LogPrint(LPRINT_NORMAL,
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3857
                 "WARNING: Compiled without full UTF-8 support!");
a75f7a13df7b UTF-8 terminal support (Reimar Döffinger)
Mikael Berthe <mikael@lilotux.net>
parents: 929
diff changeset
  3858
#endif
764
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  3859
  return -1;
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  3860
}
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  3861
44
c10f95f959d0 [/trunk] Changeset 60 by mikael
mikael
parents: 42
diff changeset
  3862
//  process_key(key)
c10f95f959d0 [/trunk] Changeset 60 by mikael
mikael
parents: 42
diff changeset
  3863
// Handle the pressed key, in the command line (bottom).
1359
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1357
diff changeset
  3864
void process_key(keycode kcode)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  3865
{
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3866
  int key = kcode.value;
931
1cd6d694ac3c Fix display of some UTF-8 chars
Mikael Berthe <mikael@lilotux.net>
parents: 930
diff changeset
  3867
  int display_char = FALSE;
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3868
1381
40095d413da9 Fix compilation on OpenBSD
Mikael Berthe <mikael@lilotux.net>
parents: 1376
diff changeset
  3869
  lock_chatstate = FALSE;
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 987
diff changeset
  3870
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3871
  switch (kcode.mcode) {
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3872
    case 0:
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3873
        break;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3874
    case MKEY_EQUIV:
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3875
        key = kcode.value;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3876
        break;
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3877
    case MKEY_META:
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3878
    default:
1359
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1357
diff changeset
  3879
        if (bindcommand(kcode) == 255) {
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1357
diff changeset
  3880
          mcabber_set_terminate_ui();
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1357
diff changeset
  3881
          return;
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1357
diff changeset
  3882
        }
764
4e15322d315e Allow binding of meta keys
Mikael Berthe <mikael@lilotux.net>
parents: 763
diff changeset
  3883
        key = ERR; // Do not process any further
758
402b0e288433 Enable "meta" key
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
  3884
  }
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3885
931
1cd6d694ac3c Fix display of some UTF-8 chars
Mikael Berthe <mikael@lilotux.net>
parents: 930
diff changeset
  3886
  if (kcode.utf8) {
1cd6d694ac3c Fix display of some UTF-8 chars
Mikael Berthe <mikael@lilotux.net>
parents: 930
diff changeset
  3887
    if (key != ERR && !kcode.mcode)
1cd6d694ac3c Fix display of some UTF-8 chars
Mikael Berthe <mikael@lilotux.net>
parents: 930
diff changeset
  3888
      display_char = TRUE;
1cd6d694ac3c Fix display of some UTF-8 chars
Mikael Berthe <mikael@lilotux.net>
parents: 930
diff changeset
  3889
    goto display;
1cd6d694ac3c Fix display of some UTF-8 chars
Mikael Berthe <mikael@lilotux.net>
parents: 930
diff changeset
  3890
  }
1cd6d694ac3c Fix display of some UTF-8 chars
Mikael Berthe <mikael@lilotux.net>
parents: 930
diff changeset
  3891
758
402b0e288433 Enable "meta" key
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
  3892
  switch (key) {
761
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3893
    case 0:
4532a9fe0e8c Handle some keyboard escape sequences
Mikael Berthe <mikael@lilotux.net>
parents: 760
diff changeset
  3894
    case ERR:
758
402b0e288433 Enable "meta" key
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
  3895
        break;
1173
960f34ec22a2 Add init_bindings() for default key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1172
diff changeset
  3896
    case 9:     // Tab
960f34ec22a2 Add init_bindings() for default key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1172
diff changeset
  3897
        readline_do_completion();
960f34ec22a2 Add init_bindings() for default key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1172
diff changeset
  3898
        break;
960f34ec22a2 Add init_bindings() for default key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1172
diff changeset
  3899
    case 13:    // Enter
1359
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1357
diff changeset
  3900
        if (readline_accept_line(FALSE) == 255) {
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1357
diff changeset
  3901
          mcabber_set_terminate_ui();
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1357
diff changeset
  3902
          return;
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1357
diff changeset
  3903
        }
1173
960f34ec22a2 Add init_bindings() for default key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1172
diff changeset
  3904
        break;
960f34ec22a2 Add init_bindings() for default key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1172
diff changeset
  3905
    case 3:     // Ctrl-C
960f34ec22a2 Add init_bindings() for default key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1172
diff changeset
  3906
        scr_handle_CtrlC();
960f34ec22a2 Add init_bindings() for default key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1172
diff changeset
  3907
        break;
960f34ec22a2 Add init_bindings() for default key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1172
diff changeset
  3908
    case KEY_RESIZE:
1454
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1424
diff changeset
  3909
#ifdef USE_SIGWINCH
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1424
diff changeset
  3910
        {
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1424
diff changeset
  3911
            struct winsize size;
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1424
diff changeset
  3912
            if (ioctl(STDIN_FILENO, TIOCGWINSZ, &size) != -1)
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1424
diff changeset
  3913
              resizeterm(size.ws_row, size.ws_col);
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1424
diff changeset
  3914
        }
1173
960f34ec22a2 Add init_bindings() for default key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1172
diff changeset
  3915
        scr_Resize();
1454
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1424
diff changeset
  3916
        process_command(mkcmdstr("screen_refresh"), TRUE);
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1424
diff changeset
  3917
#else
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1424
diff changeset
  3918
        scr_Resize();
6b98dc22946d Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents: 1424
diff changeset
  3919
#endif
1173
960f34ec22a2 Add init_bindings() for default key bindings (Lego12239)
Mikael Berthe <mikael@lilotux.net>
parents: 1172
diff changeset
  3920
        break;
499
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  3921
    default:
931
1cd6d694ac3c Fix display of some UTF-8 chars
Mikael Berthe <mikael@lilotux.net>
parents: 930
diff changeset
  3922
        display_char = TRUE;
1cd6d694ac3c Fix display of some UTF-8 chars
Mikael Berthe <mikael@lilotux.net>
parents: 930
diff changeset
  3923
  } // switch
263
1bcc3eec08f0 Add Ctrl-o: accept-line-and-down-history
mikael@frmp8452
parents: 261
diff changeset
  3924
931
1cd6d694ac3c Fix display of some UTF-8 chars
Mikael Berthe <mikael@lilotux.net>
parents: 930
diff changeset
  3925
display:
1cd6d694ac3c Fix display of some UTF-8 chars
Mikael Berthe <mikael@lilotux.net>
parents: 930
diff changeset
  3926
  if (display_char) {
1394
bba74a50dedf Improve Cygwin support
Mikael Berthe <mikael@lilotux.net>
parents: 1390
diff changeset
  3927
    guint printable;
bba74a50dedf Improve Cygwin support
Mikael Berthe <mikael@lilotux.net>
parents: 1390
diff changeset
  3928
bba74a50dedf Improve Cygwin support
Mikael Berthe <mikael@lilotux.net>
parents: 1390
diff changeset
  3929
    if (kcode.utf8) {
bba74a50dedf Improve Cygwin support
Mikael Berthe <mikael@lilotux.net>
parents: 1390
diff changeset
  3930
      printable = iswprint(key);
bba74a50dedf Improve Cygwin support
Mikael Berthe <mikael@lilotux.net>
parents: 1390
diff changeset
  3931
    } else {
bba74a50dedf Improve Cygwin support
Mikael Berthe <mikael@lilotux.net>
parents: 1390
diff changeset
  3932
#ifdef __CYGWIN__
bba74a50dedf Improve Cygwin support
Mikael Berthe <mikael@lilotux.net>
parents: 1390
diff changeset
  3933
      printable = (isprint(key) || (key >= 161 && key <= 255))
bba74a50dedf Improve Cygwin support
Mikael Berthe <mikael@lilotux.net>
parents: 1390
diff changeset
  3934
                  && !is_speckey(key);
bba74a50dedf Improve Cygwin support
Mikael Berthe <mikael@lilotux.net>
parents: 1390
diff changeset
  3935
#else
bba74a50dedf Improve Cygwin support
Mikael Berthe <mikael@lilotux.net>
parents: 1390
diff changeset
  3936
      printable = isprint(key) && !is_speckey(key);
bba74a50dedf Improve Cygwin support
Mikael Berthe <mikael@lilotux.net>
parents: 1390
diff changeset
  3937
#endif
bba74a50dedf Improve Cygwin support
Mikael Berthe <mikael@lilotux.net>
parents: 1390
diff changeset
  3938
    }
bba74a50dedf Improve Cygwin support
Mikael Berthe <mikael@lilotux.net>
parents: 1390
diff changeset
  3939
    if (printable) {
931
1cd6d694ac3c Fix display of some UTF-8 chars
Mikael Berthe <mikael@lilotux.net>
parents: 930
diff changeset
  3940
      char tmpLine[INPUTLINE_LENGTH+1];
499
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  3941
931
1cd6d694ac3c Fix display of some UTF-8 chars
Mikael Berthe <mikael@lilotux.net>
parents: 930
diff changeset
  3942
      // Check the line isn't too long
1cd6d694ac3c Fix display of some UTF-8 chars
Mikael Berthe <mikael@lilotux.net>
parents: 930
diff changeset
  3943
      if (strlen(inputLine) + 4 > INPUTLINE_LENGTH)
1359
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1357
diff changeset
  3944
        return;
931
1cd6d694ac3c Fix display of some UTF-8 chars
Mikael Berthe <mikael@lilotux.net>
parents: 930
diff changeset
  3945
1cd6d694ac3c Fix display of some UTF-8 chars
Mikael Berthe <mikael@lilotux.net>
parents: 930
diff changeset
  3946
      // Insert char
1cd6d694ac3c Fix display of some UTF-8 chars
Mikael Berthe <mikael@lilotux.net>
parents: 930
diff changeset
  3947
      strcpy(tmpLine, ptr_inputline);
1cd6d694ac3c Fix display of some UTF-8 chars
Mikael Berthe <mikael@lilotux.net>
parents: 930
diff changeset
  3948
      ptr_inputline = put_char(ptr_inputline, key);
1cd6d694ac3c Fix display of some UTF-8 chars
Mikael Berthe <mikael@lilotux.net>
parents: 930
diff changeset
  3949
      strcpy(ptr_inputline, tmpLine);
1cd6d694ac3c Fix display of some UTF-8 chars
Mikael Berthe <mikael@lilotux.net>
parents: 930
diff changeset
  3950
      check_offset(1);
1cd6d694ac3c Fix display of some UTF-8 chars
Mikael Berthe <mikael@lilotux.net>
parents: 930
diff changeset
  3951
    } else {
1cd6d694ac3c Fix display of some UTF-8 chars
Mikael Berthe <mikael@lilotux.net>
parents: 930
diff changeset
  3952
      // Look for a key binding.
1359
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1357
diff changeset
  3953
      if (!kcode.utf8 && (bindcommand(kcode) == 255)) {
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1357
diff changeset
  3954
          mcabber_set_terminate_ui();
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1357
diff changeset
  3955
          return;
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1357
diff changeset
  3956
        }
931
1cd6d694ac3c Fix display of some UTF-8 chars
Mikael Berthe <mikael@lilotux.net>
parents: 930
diff changeset
  3957
    }
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  3958
  }
499
baa812f04f24 Reorganise process_key()
Mikael Berthe <mikael@lilotux.net>
parents: 480
diff changeset
  3959
157
409ff07d9fe2 [/trunk] Changeset 169 by mikael
mikael
parents: 154
diff changeset
  3960
  if (completion_started && key != 9 && key != KEY_RESIZE)
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
  3961
    scr_end_current_completion();
312
f0b7ff2df7e8 Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents: 307
diff changeset
  3962
  refresh_inputline();
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 987
diff changeset
  3963
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 987
diff changeset
  3964
  if (!lock_chatstate) {
997
d0d0cd9e39c4 Cosmetics & comments
Mikael Berthe <mikael@lilotux.net>
parents: 996
diff changeset
  3965
    // Set chat state to composing (1) if the user is currently composing,
d0d0cd9e39c4 Cosmetics & comments
Mikael Berthe <mikael@lilotux.net>
parents: 996
diff changeset
  3966
    // i.e. not an empty line and not a command line.
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 987
diff changeset
  3967
    if (inputLine[0] == 0 || inputLine[0] == COMMAND_CHAR)
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 987
diff changeset
  3968
      set_chatstate(0);
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 987
diff changeset
  3969
    else
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 987
diff changeset
  3970
      set_chatstate(1);
991
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  3971
    if (chatstate)
ef10906691bb Chatstates: add composing timeout
Mikael Berthe <mikael@lilotux.net>
parents: 990
diff changeset
  3972
      time(&chatstate_timestamp);
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 987
diff changeset
  3973
  }
1359
7daf906fbcdc The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents: 1357
diff changeset
  3974
  return;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
  3975
}
576
8b3db0b555a1 Add Vim modelines
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
  3976
1179
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3977
#ifdef HAVE_ASPELL_H
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3978
// Aspell initialization
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3979
void spellcheck_init(void)
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3980
{
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3981
  int aspell_enable           = settings_opt_get_int("aspell_enable");
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3982
  const char *aspell_lang     = settings_opt_get("aspell_lang");
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3983
  const char *aspell_encoding = settings_opt_get("aspell_encoding");
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3984
  AspellCanHaveError *possible_err;
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3985
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3986
  if (!aspell_enable)
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3987
    return;
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3988
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3989
  if (spell_checker) {
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3990
    delete_aspell_speller(spell_checker);
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3991
    delete_aspell_config(spell_config);
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3992
    spell_checker = NULL;
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3993
    spell_config = NULL;
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3994
  }
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3995
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3996
  spell_config = new_aspell_config();
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3997
  aspell_config_replace(spell_config, "encoding", aspell_encoding);
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3998
  aspell_config_replace(spell_config, "lang", aspell_lang);
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  3999
  possible_err = new_aspell_speller(spell_config);
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4000
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4001
  if (aspell_error_number(possible_err) != 0) {
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4002
    spell_checker = NULL;
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4003
    delete_aspell_config(spell_config);
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4004
    spell_config = NULL;
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4005
  } else {
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4006
    spell_checker = to_aspell_speller(possible_err);
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4007
  }
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4008
}
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4009
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4010
// Deinitialization of Aspell spellchecker
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4011
void spellcheck_deinit(void)
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4012
{
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4013
  if (spell_checker) {
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4014
    delete_aspell_speller(spell_checker);
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4015
    spell_checker = NULL;
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4016
  }
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4017
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4018
  if (spell_config) {
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4019
    delete_aspell_config(spell_config);
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4020
    spell_config = NULL;
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4021
  }
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4022
}
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4023
1245
e6ddd19956eb Fix Aspell support on some systems
Mikael Berthe <mikael@lilotux.net>
parents: 1239
diff changeset
  4024
#define aspell_isalpha(c) (utf8_mode ? iswalpha(get_char(c)) : isalpha(*c))
e6ddd19956eb Fix Aspell support on some systems
Mikael Berthe <mikael@lilotux.net>
parents: 1239
diff changeset
  4025
1179
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4026
// Spell checking function
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4027
static void spellcheck(char *line, char *checked)
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4028
{
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4029
  const char *start, *line_start;
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4030
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4031
  if (inputLine[0] == 0 || inputLine[0] == COMMAND_CHAR)
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4032
    return;
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4033
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4034
  line_start = line;
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4035
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4036
  while (*line) {
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4037
1245
e6ddd19956eb Fix Aspell support on some systems
Mikael Berthe <mikael@lilotux.net>
parents: 1239
diff changeset
  4038
    if (!aspell_isalpha(line)) {
1179
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4039
      line = next_char(line);
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4040
      continue;
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4041
    }
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4042
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4043
    if (!strncmp(line, "http://", 7)) {
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4044
      line += 7; // : and / characters are 1 byte long in utf8, right?
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4045
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4046
      while (!strchr(" \t\r\n", *line))
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4047
        line = next_char(line); // i think line++ would be fine here?
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4048
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4049
      continue;
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4050
    }
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4051
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4052
    if (!strncmp(line, "ftp://", 6)) {
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4053
      line += 6;
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4054
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4055
      while (!strchr(" \t\r\n", *line))
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4056
        line = next_char(line);
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4057
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4058
      continue;
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4059
    }
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4060
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4061
    start = line;
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4062
1245
e6ddd19956eb Fix Aspell support on some systems
Mikael Berthe <mikael@lilotux.net>
parents: 1239
diff changeset
  4063
    while (aspell_isalpha(line))
1179
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4064
      line = next_char(line);
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4065
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4066
    if (spell_checker &&
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4067
        aspell_speller_check(spell_checker, start, line - start) == 0)
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4068
      memset(&checked[start - line_start], ASPELLBADCHAR, line - start);
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4069
  }
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4070
}
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4071
#endif
0f7e0346d9cb Add aspell support
entragian <entragian@o2.pl>
parents: 1178
diff changeset
  4072
580
fed6d1e4d7a9 Fix modelines
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
  4073
/* vim: set expandtab cindent cinoptions=>2\:2(0:  For Vim users... */