annotate mcabber/src/screen.c @ 830:80434fde7cfa

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