ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/command.C
(Generate patch)

Comparing rxvt-unicode/src/command.C (file contents):
Revision 1.95 by pcg, Sun May 9 18:19:49 2004 UTC vs.
Revision 1.97 by root, Mon Jul 26 18:01:19 2004 UTC

710 w.start (w.at + TEXT_BLINK_INTERVAL); 710 w.start (w.at + TEXT_BLINK_INTERVAL);
711 } 711 }
712} 712}
713#endif 713#endif
714 714
715#ifndef NO_SCROLLBAR_BUTTON_CONTINUAL_SCROLLING
716void
717rxvt_term::cont_scroll_cb (time_watcher &w)
718{
719 if ((scrollbar_isUp() || scrollbar_isDn()) &&
720 scr_page (scrollbar_isUp() ? UP : DN, 1))
721 {
722 refresh_type |= SMOOTH_REFRESH;
723 want_refresh = 1;
724 w.start (w.at + SCROLLBAR_CONTINUOUS_DELAY);
725 }
726}
727#endif
728
729#ifdef SELECTION_SCROLLING
730void
731rxvt_term::sel_scroll_cb (time_watcher &w)
732{
733 if (scr_page (scroll_selection_dir, scroll_selection_lines))
734 {
735 selection_extend (selection_save_x, selection_save_y, selection_save_state);
736 refresh_type |= SMOOTH_REFRESH;
737 want_refresh = 1;
738 w.start (w.at + SCROLLBAR_CONTINUOUS_DELAY);
739 }
740}
741#endif
742
743#if defined(MOUSE_WHEEL) && defined(MOUSE_SLIP_WHEELING)
744void
745rxvt_term::slip_wheel_cb (time_watcher &w)
746{
747 if (mouse_slip_wheel_speed == 0
748 || mouse_slip_wheel_speed < 0 ? scr_page (DN, -mouse_slip_wheel_speed)
749 : scr_page (UP, mouse_slip_wheel_speed))
750 {
751 refresh_type |= SMOOTH_REFRESH;
752 want_refresh = 1;
753 w.start (w.at + SCROLLBAR_CONTINUOUS_DELAY);
754 }
755}
756#endif
757
715bool 758bool
716rxvt_term::pty_fill () 759rxvt_term::pty_fill ()
717{ 760{
718 ssize_t n = cmdbuf_endp - cmdbuf_ptr; 761 ssize_t n = cmdbuf_endp - cmdbuf_ptr;
719 762
971 break; 1014 break;
972 1015
973#if defined(MOUSE_WHEEL) && defined(MOUSE_SLIP_WHEELING) 1016#if defined(MOUSE_WHEEL) && defined(MOUSE_SLIP_WHEELING)
974 case KeyRelease: 1017 case KeyRelease:
975 { 1018 {
976 if (! (ev.xkey.state & ControlMask)) 1019 if (!(ev.xkey.state & ControlMask))
977 mouse_slip_wheel_speed = 0; 1020 slip_wheel_ev.stop ();
978 else 1021 else
979 { 1022 {
980 KeySym ks; 1023 KeySym ks;
981 1024
982 ks = XKeycodeToKeysym (display->display, ev.xkey.keycode, 0); 1025 ks = XKeycodeToKeysym (display->display, ev.xkey.keycode, 0);
983 if (ks == XK_Control_L || ks == XK_Control_R) 1026 if (ks == XK_Control_L || ks == XK_Control_R)
984 mouse_slip_wheel_speed = 0; 1027 mouse_slip_wheel_speed = 0;
985 } 1028 }
1238 if (ev.xbutton.y < TermWin.int_bwidth 1281 if (ev.xbutton.y < TermWin.int_bwidth
1239 || Pixel2Row (ev.xbutton.y) > (TermWin.nrow-1)) 1282 || Pixel2Row (ev.xbutton.y) > (TermWin.nrow-1))
1240 { 1283 {
1241 int dist; 1284 int dist;
1242 1285
1243 pending_scroll_selection=1;
1244
1245 /* don't clobber the current delay if we are 1286 /* don't clobber the current delay if we are
1246 * already in the middle of scrolling. 1287 * already in the middle of scrolling.
1247 */ 1288 */
1248 if (scroll_selection_delay<=0) 1289 if (!sel_scroll_ev.active)
1249 scroll_selection_delay=SCROLLBAR_CONTINUOUS_DELAY; 1290 sel_scroll_ev.start (NOW + SCROLLBAR_INITIAL_DELAY);
1250 1291
1251 /* save the event params so we can highlight 1292 /* save the event params so we can highlight
1252 * the selection in the pending-scroll loop 1293 * the selection in the pending-scroll loop
1253 */ 1294 */
1254 selection_save_x=ev.xbutton.x; 1295 selection_save_x=ev.xbutton.x;
1276 else 1317 else
1277 { 1318 {
1278 /* we are within the text window, so we 1319 /* we are within the text window, so we
1279 * shouldn't be scrolling 1320 * shouldn't be scrolling
1280 */ 1321 */
1281 pending_scroll_selection = 0; 1322 if (sel_scroll_ev.active)
1323 sel_scroll_ev.stop();
1282 } 1324 }
1283#endif 1325#endif
1284#ifdef MOUSE_THRESHOLD 1326#ifdef MOUSE_THRESHOLD
1285 1327
1286 } 1328 }
1503 upordown = 1; /* down */ 1545 upordown = 1; /* down */
1504 } 1546 }
1505 if (upordown) 1547 if (upordown)
1506 { 1548 {
1507#ifndef NO_SCROLLBAR_BUTTON_CONTINUAL_SCROLLING 1549#ifndef NO_SCROLLBAR_BUTTON_CONTINUAL_SCROLLING
1508 scroll_arrow_delay = SCROLLBAR_INITIAL_DELAY; 1550 cont_scroll_ev.start (NOW + SCROLLBAR_INITIAL_DELAY);
1509#endif 1551#endif
1510 if (scr_page (upordown < 0 ? UP : DN, 1)) 1552 if (scr_page (upordown < 0 ? UP : DN, 1))
1511 { 1553 {
1512 if (upordown < 0) 1554 if (upordown < 0)
1513 scrollBar.setUp (); 1555 scrollBar.setUp ();
1600 refresh_type &= ~SMOOTH_REFRESH; 1642 refresh_type &= ~SMOOTH_REFRESH;
1601#endif 1643#endif
1602 1644
1603 } 1645 }
1604#ifdef SELECTION_SCROLLING 1646#ifdef SELECTION_SCROLLING
1605 pending_scroll_selection=0; 1647 if (sel_scroll_ev.active)
1648 sel_scroll_ev.stop();
1606#endif 1649#endif
1607 if (ev.window == TermWin.vt) 1650 if (ev.window == TermWin.vt)
1608 { 1651 {
1609 if (reportmode) 1652 if (reportmode)
1610 { 1653 {
1652 case Button5: 1695 case Button5:
1653 { 1696 {
1654 int i; 1697 int i;
1655 page_dirn v; 1698 page_dirn v;
1656 1699
1657 v = (ev.button == Button4) ? UP : DN; 1700 v = ev.button == Button4 ? UP : DN;
1701
1658 if (ev.state & ShiftMask) 1702 if (ev.state & ShiftMask)
1659 i = 1; 1703 i = 1;
1660 else if ((Options & Opt_mouseWheelScrollPage)) 1704 else if (Options & Opt_mouseWheelScrollPage)
1661 i = TermWin.nrow - 1; 1705 i = TermWin.nrow - 1;
1662 else 1706 else
1663 i = 5; 1707 i = 5;
1708
1664# ifdef MOUSE_SLIP_WHEELING 1709# ifdef MOUSE_SLIP_WHEELING
1665 if (ev.state & ControlMask) 1710 if (ev.state & ControlMask)
1666 { 1711 {
1667 mouse_slip_wheel_speed += (v ? -1 : 1); 1712 mouse_slip_wheel_speed += v ? -1 : 1;
1668 mouse_slip_wheel_delay = SCROLLBAR_CONTINUOUS_DELAY; 1713 slip_wheel_ev.start (NOW + SCROLLBAR_CONTINUOUS_DELAY);
1669 } 1714 }
1670# endif 1715# endif
1671# ifdef JUMP_MOUSE_WHEEL 1716# ifdef JUMP_MOUSE_WHEEL
1672 scr_page (v, i); 1717 scr_page (v, i);
1673 scr_refresh (SMOOTH_REFRESH); 1718 scr_refresh (SMOOTH_REFRESH);
2273 } 2318 }
2274 2319
2275 return flag; 2320 return flag;
2276} 2321}
2277 2322
2323// read the next octet
2324unicode_t
2325rxvt_term::next_octet ()
2326{
2327 return cmdbuf_ptr < cmdbuf_endp
2328 ? *cmdbuf_ptr++
2329 : NOCHAR;
2330}
2331
2278// read the next character 2332// read the next character
2279unicode_t 2333unicode_t
2280rxvt_term::next_char () 2334rxvt_term::next_char ()
2281{ 2335{
2282 while (cmdbuf_ptr < cmdbuf_endp) 2336 while (cmdbuf_ptr < cmdbuf_endp)
2313 */ 2367 */
2314unicode_t 2368unicode_t
2315rxvt_term::cmd_getc () 2369rxvt_term::cmd_getc ()
2316{ 2370{
2317 unicode_t c = next_char (); 2371 unicode_t c = next_char ();
2372
2373 if (c == NOCHAR)
2374 throw out_of_input;
2375
2376 return c;
2377}
2378
2379unicode_t
2380rxvt_term::cmd_get8 ()
2381{
2382 unicode_t c = next_octet ();
2318 2383
2319 if (c == NOCHAR) 2384 if (c == NOCHAR)
2320 throw out_of_input; 2385 throw out_of_input;
2321 2386
2322 return c; 2387 return c;
2452 break; 2517 break;
2453 case C0_SI: /* shift in - acs */ 2518 case C0_SI: /* shift in - acs */
2454 scr_charset_choose (0); 2519 scr_charset_choose (0);
2455 break; 2520 break;
2456 2521
2522#ifdef EIGHT_BIT_CONTROLS
2457 // 8-bit controls 2523 // 8-bit controls
2458 case 0x90: /* DCS */ 2524 case 0x90: /* DCS */
2459 process_dcs_seq (); 2525 process_dcs_seq ();
2460 break; 2526 break;
2461 case 0x9b: /* CSI */ 2527 case 0x9b: /* CSI */
2462 process_csi_seq (); 2528 process_csi_seq ();
2463 break; 2529 break;
2464 case 0x9d: /* CSI */ 2530 case 0x9d: /* CSI */
2465 process_osc_seq (); 2531 process_osc_seq ();
2466 break; 2532 break;
2533#endif
2467 } 2534 }
2468} 2535}
2469/*}}} */ 2536/*}}} */
2470 2537
2471 2538
3089 * ends_how is terminator used. returned input must be free()'d 3156 * ends_how is terminator used. returned input must be free()'d
3090 */ 3157 */
3091unsigned char * 3158unsigned char *
3092rxvt_term::get_to_st (unicode_t &ends_how) 3159rxvt_term::get_to_st (unicode_t &ends_how)
3093{ 3160{
3094 int seen_esc = 0; /* seen escape? */ 3161 unicode_t prev = 0, ch;
3095 unsigned int n = 0; 3162 unsigned int n = 0;
3096 unsigned char *s; 3163 unsigned char *s;
3097 unicode_t ch;
3098 unsigned char string[STRING_MAX]; 3164 unsigned char string[STRING_MAX];
3099 3165
3100 while ((ch = cmd_getc ())) 3166 while ((ch = cmd_getc ()) != NOCHAR)
3101 { 3167 {
3102 if (ch == C0_BEL || ch == CHAR_ST) 3168 if (prev == C0_ESC)
3103 break; 3169 {
3104
3105 if (seen_esc)
3106 if (ch == 0x5c) /* 7bit ST */ 3170 if (ch == 0x5c) /* 7bit ST */
3107 break; 3171 break;
3108 else 3172 else
3109 return NULL; 3173 return NULL;
3110
3111 if (ch == C0_ESC)
3112 { 3174 }
3113 seen_esc = 1; 3175 else if (ch == C0_BEL || ch == CHAR_ST)
3114 continue; 3176 break;
3115 }
3116 else if (ch == C0_HT) 3177 else if (ch < 0x20)
3117 ch = ' '; /* translate '\t' to space */
3118 else if (ch < 0x20 && (ch != C0_LF && ch != C0_CR))
3119 return NULL; /* other control character - exit */ 3178 return NULL; /* other control character - exit */
3120 3179
3121 if (n >= sizeof (string) - 1) 3180 if (n >= sizeof (string) - 1)
3122 // stop at some sane length 3181 // stop at some sane length
3123 return NULL; 3182 return NULL;
3124 3183
3184 if (ch == C0_SYN)
3185 {
3186 string[n++] = cmd_get8 ();
3187 prev = 0;
3188 }
3189 else
3125 string[n++] = ch; 3190 string[n++] = prev = ch;
3126 seen_esc = 0;
3127 } 3191 }
3128 3192
3129 string[n++] = '\0'; 3193 string[n++] = '\0';
3130 3194
3131 if ((s = (unsigned char *)rxvt_malloc (n)) == NULL) 3195 if ((s = (unsigned char *)rxvt_malloc (n)) == NULL)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines