Mercurial > pidgin
comparison console/libgnt/gntentry.c @ 14828:91a89d5ef714
[gaim-migrate @ 17595]
Two new actions for the entry box: "delete-prev-word" and "cursor-prev-word". I haven't set any default binding for
either. But I think ctrl-w is a common binding for the first action.
committer: Tailor Script <tailor@pidgin.im>
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Sat, 28 Oct 2006 06:01:30 +0000 |
parents | 02b70dc43044 |
children | bfcdd361357e |
comparison
equal
deleted
inserted
replaced
14827:02b70dc43044 | 14828:91a89d5ef714 |
---|---|
329 { | 329 { |
330 GntEntry *entry = GNT_ENTRY(widget); | 330 GntEntry *entry = GNT_ENTRY(widget); |
331 entry->end = entry->cursor; | 331 entry->end = entry->cursor; |
332 memset(entry->end, '\0', entry->buffer - (entry->end - entry->start)); | 332 memset(entry->end, '\0', entry->buffer - (entry->end - entry->start)); |
333 entry_redraw(widget); | 333 entry_redraw(widget); |
334 return TRUE; | |
335 } | |
336 | |
337 static const char * | |
338 begin_word(const char *text, const char *begin) | |
339 { | |
340 char ch; | |
341 ch = *text; | |
342 #define SAME(a,b) ((isalpha(a) && isalpha(b)) || (isdigit(a) && isdigit(b)) || (isblank(a) && isblank(b))) | |
343 while (--text >= begin) { | |
344 if (!SAME(ch, *text)) | |
345 break; | |
346 } | |
347 #undef SAME | |
348 | |
349 return ++text; | |
350 } | |
351 | |
352 static gboolean | |
353 move_back_word(GntWidget *widget, GList *null) | |
354 { | |
355 GntEntry *entry = GNT_ENTRY(widget); | |
356 const char *iter = entry->cursor - 1; | |
357 int count; | |
358 | |
359 if (iter < entry->start) | |
360 return TRUE; | |
361 iter = begin_word(iter, entry->start); | |
362 entry->cursor = (char*)iter; | |
363 if (entry->cursor < entry->scroll) | |
364 entry->scroll = entry->cursor; | |
365 entry_redraw(widget); | |
366 return TRUE; | |
367 } | |
368 | |
369 static gboolean | |
370 del_prev_word(GntWidget *widget, GList *null) | |
371 { | |
372 GntEntry *entry = GNT_ENTRY(widget); | |
373 char *iter = entry->cursor - 1; | |
374 int count; | |
375 | |
376 if (iter < entry->start) | |
377 return TRUE; | |
378 iter = (char*)begin_word(iter, entry->start); | |
379 count = entry->cursor - iter; | |
380 memmove(iter, entry->cursor, entry->end - entry->cursor); | |
381 entry->end -= count; | |
382 entry->cursor = iter; | |
383 if (entry->cursor <= entry->scroll) { | |
384 entry->scroll = entry->cursor - widget->priv.width + 2; | |
385 if (entry->scroll < entry->start) | |
386 entry->scroll = entry->start; | |
387 } | |
388 memset(entry->end, '\0', entry->buffer - (entry->end - entry->start)); | |
389 entry_redraw(widget); | |
390 | |
334 return TRUE; | 391 return TRUE; |
335 } | 392 } |
336 | 393 |
337 static gboolean | 394 static gboolean |
338 gnt_entry_key_pressed(GntWidget *widget, const char *text) | 395 gnt_entry_key_pressed(GntWidget *widget, const char *text) |
504 gnt_widget_register_binding(parent_class, "delete-next", GNT_KEY_CTRL_D, NULL); | 561 gnt_widget_register_binding(parent_class, "delete-next", GNT_KEY_CTRL_D, NULL); |
505 gnt_widget_class_register_action(parent_class, "delete-start", del_to_home, | 562 gnt_widget_class_register_action(parent_class, "delete-start", del_to_home, |
506 GNT_KEY_CTRL_U, NULL); | 563 GNT_KEY_CTRL_U, NULL); |
507 gnt_widget_class_register_action(parent_class, "delete-end", del_to_end, | 564 gnt_widget_class_register_action(parent_class, "delete-end", del_to_end, |
508 GNT_KEY_CTRL_K, NULL); | 565 GNT_KEY_CTRL_K, NULL); |
566 gnt_widget_class_register_action(parent_class, "delete-prev-word", del_prev_word, | |
567 NULL, NULL); | |
509 #if 0 | 568 #if 0 |
510 gnt_widget_class_register_action(parent_class, "delete-prev-word", del_prev_word, | |
511 NULL, 1, NULL); | |
512 gnt_widget_class_register_action(parent_class, "delete-next-word", del_next_word, | 569 gnt_widget_class_register_action(parent_class, "delete-next-word", del_next_word, |
513 NULL, 1, NULL); | 570 NULL, 1, NULL); |
514 #endif | 571 #endif |
572 gnt_widget_class_register_action(parent_class, "cursor-prev-word", move_back_word, | |
573 NULL, NULL); | |
515 gnt_widget_class_register_action(parent_class, "cursor-prev", move_back, | 574 gnt_widget_class_register_action(parent_class, "cursor-prev", move_back, |
516 "\033" GNT_KEY_LEFT, NULL); | 575 "\033" GNT_KEY_LEFT, NULL); |
517 gnt_widget_class_register_action(parent_class, "cursor-next", move_forward, | 576 gnt_widget_class_register_action(parent_class, "cursor-next", move_forward, |
518 "\033" GNT_KEY_RIGHT, NULL); | 577 "\033" GNT_KEY_RIGHT, NULL); |
519 gnt_widget_class_register_action(parent_class, "suggest-show", suggest_show, | 578 gnt_widget_class_register_action(parent_class, "suggest-show", suggest_show, |