Changes in owl.c [eebef19:6fe806a]
Legend:
- Unmodified
- Added
- Removed
-
owl.c
reebef19 r6fe806a 48 48 #include <termios.h> 49 49 #include <sys/stat.h> 50 #include <locale.h> 50 51 #include "owl.h" 51 52 … … 69 70 owl_editwin *tw; 70 71 owl_popwin *pw; 71 int j, ret, initialsubs, debug, argcsave, followlast; 72 int ret, initialsubs, debug, argcsave, followlast; 73 owl_input j; 72 74 int newmsgs, nexttimediff; 73 75 struct sigaction sigact; … … 84 86 int newstderr; 85 87 #endif 88 89 if (!GLIB_CHECK_VERSION (2, 12, 0)) 90 g_error ("GLib version 2.12.0 or above is needed."); 86 91 87 92 argcsave=argc; … … 92 97 debug=0; 93 98 initialsubs=1; 99 100 setlocale(LC_ALL, ""); 101 94 102 if (argc>0) { 95 103 argv++; … … 530 538 * little bit, but otherwise do not. This lets input be grabbed 531 539 * as quickly as possbile */ 532 j =wgetch(typwin);533 if (j ==ERR) {540 j.ch = wgetch(typwin); 541 if (j.ch == ERR) { 534 542 usleep(10000); 535 543 } else { 536 owl_global_set_lastinputtime(&g, now); 544 j.uch = '\0'; 545 if (j.ch >= KEY_MIN && j.ch <= KEY_MAX) { 546 /* This is a curses control character. */ 547 } 548 else if (j.ch > 0x7f && j.ch < 0xfe) { 549 /* Pull in a full utf-8 character. */ 550 int bytes, i; 551 char utf8buf[7]; 552 memset(utf8buf, '\0', 7); 553 554 utf8buf[0] = j.ch; 555 556 if ((j.ch & 0xc0) && (~j.ch & 0x20)) bytes = 2; 557 else if ((j.ch & 0xe0) && (~j.ch & 0x10)) bytes = 3; 558 else if ((j.ch & 0xf0) && (~j.ch & 0x08)) bytes = 4; 559 else if ((j.ch & 0xf8) && (~j.ch & 0x04)) bytes = 5; 560 else if ((j.ch & 0xfc) && (~j.ch & 0x02)) bytes = 6; 561 else bytes = 1; 562 563 for (i = 1; i < bytes; i++) { 564 int tmp = wgetch(typwin); 565 /* If what we got was not a byte, or not a continuation byte */ 566 if (tmp > 0xff || !(tmp & 0x80 && ~tmp & 0x40)) { 567 /* ill-formed UTF-8 code unit subsequence, put back the 568 char we just got. */ 569 ungetch(tmp); 570 j.ch = ERR; 571 break; 572 } 573 utf8buf[i] = tmp; 574 } 575 576 if (j.ch != ERR) { 577 if (g_utf8_validate(utf8buf, -1, NULL)) { 578 j.uch = g_utf8_get_char(utf8buf); 579 } 580 else { 581 j.ch = ERR; 582 } 583 } 584 } 585 else if (j.ch <= 0x7f) { 586 j.uch = j.ch; 587 } 588 589 owl_global_update_lastinputtime(&g); 537 590 /* find and activate the current keymap. 538 591 * TODO: this should really get fixed by activating
Note: See TracChangeset
for help on using the changeset viewer.