39 |
#include "../../common/command.h" |
#include "../../common/command.h" |
40 |
#include "../../common/hotlist.h" |
#include "../../common/hotlist.h" |
41 |
#include "../../common/fifo.h" |
#include "../../common/fifo.h" |
42 |
|
#include "../../common/utf8.h" |
43 |
#include "../../irc/irc.h" |
#include "../../irc/irc.h" |
44 |
|
|
45 |
|
|
164 |
void |
void |
165 |
gui_input_read () |
gui_input_read () |
166 |
{ |
{ |
167 |
int key, i; |
int key, i, insert_ok; |
168 |
char key_str[32]; |
char key_str[32]; |
169 |
|
|
170 |
i = 0; |
i = 0; |
176 |
gui_input_grab_end (); |
gui_input_grab_end (); |
177 |
|
|
178 |
key = getch (); |
key = getch (); |
179 |
|
insert_ok = 1; |
180 |
|
|
181 |
if (key == ERR) |
if (key == ERR) |
182 |
{ |
{ |
193 |
|
|
194 |
if (key < 32) |
if (key < 32) |
195 |
{ |
{ |
196 |
|
insert_ok = 0; |
197 |
key_str[0] = '^'; |
key_str[0] = '^'; |
198 |
key_str[1] = (char) key + '@'; |
key_str[1] = (char) key + '@'; |
199 |
key_str[2] = '\0'; |
key_str[2] = '\0'; |
206 |
} |
} |
207 |
else |
else |
208 |
{ |
{ |
209 |
if (key > 0xff) |
if (local_utf8) |
210 |
{ |
{ |
211 |
key_str[0] = (char) (key >> 8); |
/* 1 char: 0vvvvvvv */ |
212 |
key_str[1] = (char) (key & 0xff); |
if (key < 0x80) |
213 |
key_str[2] = '\0'; |
{ |
214 |
|
key_str[0] = (char) key; |
215 |
|
key_str[1] = '\0'; |
216 |
|
} |
217 |
|
/* 2 chars: 110vvvvv 10vvvvvv */ |
218 |
|
else if ((key & 0xE0) == 0xC0) |
219 |
|
{ |
220 |
|
key_str[0] = (char) key; |
221 |
|
key_str[1] = (char) (getch ()); |
222 |
|
key_str[2] = '\0'; |
223 |
|
} |
224 |
|
/* 3 chars: 1110vvvv 10vvvvvv 10vvvvvv */ |
225 |
|
else if ((key & 0xF0) == 0xE0) |
226 |
|
{ |
227 |
|
key_str[0] = (char) key; |
228 |
|
key_str[1] = (char) (getch ()); |
229 |
|
key_str[2] = (char) (getch ()); |
230 |
|
key_str[3] = '\0'; |
231 |
|
} |
232 |
|
/* 4 chars: 11110vvv 10vvvvvv 10vvvvvv 10vvvvvv */ |
233 |
|
else if ((key & 0xF8) == 0xF0) |
234 |
|
{ |
235 |
|
key_str[0] = (char) key; |
236 |
|
key_str[1] = (char) (getch ()); |
237 |
|
key_str[2] = (char) (getch ()); |
238 |
|
key_str[3] = (char) (getch ()); |
239 |
|
key_str[4] = '\0'; |
240 |
|
} |
241 |
} |
} |
242 |
else |
else |
243 |
{ |
{ |
254 |
|
|
255 |
/*gui_printf (gui_current_window->buffer, "gui_input_read: key = %s (%d)\n", key_str, key);*/ |
/*gui_printf (gui_current_window->buffer, "gui_input_read: key = %s (%d)\n", key_str, key);*/ |
256 |
|
|
257 |
if (gui_key_pressed (key_str) != 0) |
if ((gui_key_pressed (key_str) != 0) && (insert_ok)) |
258 |
gui_input_insert_char (gui_current_window, key); |
{ |
259 |
|
gui_input_insert_string (gui_current_window, key_str, -1); |
260 |
|
gui_current_window->buffer->input_buffer_pos += utf8_strlen (key_str); |
261 |
|
gui_draw_buffer_input (gui_current_window->buffer, 0); |
262 |
|
gui_current_window->buffer->completion.position = -1; |
263 |
|
} |
264 |
|
|
265 |
i++; |
i++; |
266 |
} |
} |