--- rxvt-unicode/src/command.C 2007/11/11 04:08:00 1.363 +++ rxvt-unicode/src/command.C 2007/12/14 02:29:48 1.379 @@ -27,7 +27,7 @@ * Copyright (c) 2001 Marius Gedminas * - Ctrl/Mod4+Tab works like Meta+Tab (options) * Copyright (c) 2003 Rob McMullen - * Copyright (c) 2003-2006 Marc Lehmann + * Copyright (c) 2003-2007 Marc Lehmann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -551,6 +551,36 @@ { bool kp = priv_modes & PrivMode_aplKP ? !shft : shft; newlen = 1; +#ifdef XK_KP_Home + static const KeySym keypadtrans[] = { + XK_KP_7, // XK_KP_Home + XK_KP_4, // XK_KP_Left + XK_KP_8, // XK_KP_Up + XK_KP_6, // XK_KP_Right + XK_KP_2, // XK_KP_Down +#ifndef UNSHIFTED_SCROLLKEYS + XK_KP_9, // XK_KP_Prior + XK_KP_3, // XK_KP_Next +#else + XK_Prior, + XK_Next, +#endif + XK_KP_1, // XK_KP_End + XK_KP_5, // XK_KP_Begin + }; + + if (IN_RANGE_INC (keysym, XK_KP_Home, XK_KP_Begin)) + { + unsigned int index = keysym - XK_KP_Home; + keysym = kp ? keypadtrans[index] : XK_Home + index; + } + else if (keysym == XK_KP_Insert) + keysym = kp ? XK_KP_0 : XK_Insert; +#ifndef NO_DELETE_KEY + else if (keysym == XK_KP_Delete) + keysym = kp ? XK_KP_Decimal : XK_Delete; +#endif +#endif switch (keysym) { #ifndef NO_BACKSPACE_KEY @@ -566,16 +596,6 @@ break; #endif #ifndef NO_DELETE_KEY -# ifdef XK_KP_Delete - case XK_KP_Delete: - /* allow shift to override */ - if (kp) - { - strcpy (kbuf, "\033On"); - break; - } - /* FALLTHROUGH */ -# endif case XK_Delete: strcpy (kbuf, rs[Rs_delete_key]); break; @@ -597,22 +617,6 @@ } break; -#ifdef XK_KP_Left - case XK_KP_Left: /* \033Ot or standard */ - case XK_KP_Up: /* \033Ox or standard */ - case XK_KP_Right: /* \033Ov or standard */ - case XK_KP_Down: /* \033Or or standard */ - if (kp) - { - strcpy (kbuf, "\033OZ"); - kbuf[2] = "txvr"[keysym - XK_KP_Left]; - break; - } - else - /* translate to std. cursor key */ - keysym = XK_Left + (keysym - XK_KP_Left); - /* FALLTHROUGH */ -#endif case XK_Up: /* "\033[A" */ case XK_Down: /* "\033[B" */ case XK_Right: /* "\033[C" */ @@ -632,29 +636,9 @@ break; #ifndef UNSHIFTED_SCROLLKEYS -# ifdef XK_KP_Prior - case XK_KP_Prior: - /* allow shift to override */ - if (kp) - { - strcpy (kbuf, "\033Oy"); - break; - } - /* FALLTHROUGH */ -# endif case XK_Prior: strcpy (kbuf, "\033[5~"); break; -# ifdef XK_KP_Next - case XK_KP_Next: - /* allow shift to override */ - if (kp) - { - strcpy (kbuf, "\033Os"); - break; - } - /* FALLTHROUGH */ -# endif case XK_Next: strcpy (kbuf, "\033[6~"); break; @@ -683,12 +667,6 @@ } break; -#ifdef XK_KP_Begin - case XK_KP_Begin: - strcpy (kbuf, "\033Ou"); - break; - -#endif case XK_KP_F1: /* "\033OP" */ case XK_KP_F2: /* "\033OQ" */ case XK_KP_F3: /* "\033OR" */ @@ -730,16 +708,6 @@ strcpy (kbuf, "\033[1~"); break; -#ifdef XK_KP_Insert - case XK_KP_Insert: - /* allow shift to override */ - if (kp) - { - strcpy (kbuf, "\033Op"); - break; - } - /* FALLTHROUGH */ -#endif case XK_Insert: strcpy (kbuf, "\033[2~"); break; @@ -753,29 +721,9 @@ case XK_Select: strcpy (kbuf, "\033[4~"); break; -#ifdef XK_KP_End - case XK_KP_End: - /* allow shift to override */ - if (kp) - { - strcpy (kbuf, "\033Oq"); - break; - } - /* FALLTHROUGH */ -#endif case XK_End: strcpy (kbuf, KS_END); break; -#ifdef XK_KP_Home - case XK_KP_Home: - /* allow shift to override */ - if (kp) - { - strcpy (kbuf, "\033Ow"); - break; - } - /* FALLTHROUGH */ -#endif case XK_Home: strcpy (kbuf, KS_HOME); break; @@ -1102,8 +1050,8 @@ display->flush (); - if (want_refresh && !flush_ev.active) - flush_ev.start (1. / 60.); // refresh at max. 60 hz normally + if (want_refresh && !flush_ev.is_active ()) + flush_ev.start (1. / 60.); // refresh at max. 60 Hz normally } void @@ -1133,6 +1081,8 @@ hidden_text = !hidden_text; want_refresh = 1; } + else + w.stop (); } #endif @@ -1166,17 +1116,14 @@ void rxvt_term::slip_wheel_cb (ev::timer &w, int revents) { - if (mouse_slip_wheel_speed == 0 - || mouse_slip_wheel_speed < 0 ? scr_page (DN, -mouse_slip_wheel_speed) - : scr_page (UP, mouse_slip_wheel_speed)) - { - if (view_start == top_row || view_start == 0) - mouse_slip_wheel_speed = 0; + if (scr_page (mouse_slip_wheel_speed < 0 ? DN : UP, abs (mouse_slip_wheel_speed))) + want_refresh = 1; - want_refresh = 1; + if (view_start == top_row || view_start == 0 || mouse_slip_wheel_speed == 0) + { + mouse_slip_wheel_speed = 0; + w.stop (); } - else - w.stop (); } #endif @@ -1305,13 +1252,14 @@ x = Pixel2Col (ev.x); y = Pixel2Row (ev.y); - if (ev.type == MotionNotify) { - if (x == mouse_row && y == mouse_col) - return; - mouse_row = x; - mouse_col = y; - code += 32; - } + if (ev.type == MotionNotify) + { + if (x == mouse_row && y == mouse_col) + return; + mouse_row = x; + mouse_col = y; + code += 32; + } if (MEvent.button == AnyButton) button_number = 3; @@ -1529,7 +1477,7 @@ case MapNotify: mapped = 1; #ifdef TEXT_BLINK - text_blink_ev.start (TEXT_BLINK_INTERVAL); + text_blink_ev.start (); #endif HOOK_INVOKE ((this, HOOK_MAP_NOTIFY, DT_XEVENT, &ev, DT_END)); break; @@ -1630,7 +1578,7 @@ /* don't clobber the current delay if we are * already in the middle of scrolling. */ - if (!sel_scroll_ev.active) + if (!sel_scroll_ev.is_active ()) sel_scroll_ev.start (SCROLLBAR_INITIAL_DELAY, SCROLLBAR_CONTINUOUS_DELAY); /* save the event params so we can highlight @@ -1663,8 +1611,7 @@ /* we are within the text window, so we * shouldn't be scrolling */ - if (sel_scroll_ev.active) - sel_scroll_ev.stop(); + sel_scroll_ev.stop(); } #endif #ifdef MOUSE_THRESHOLD @@ -1738,7 +1685,7 @@ #endif #if CURSOR_BLINK if (option (Opt_cursorBlink)) - cursor_blink_ev.start (CURSOR_BLINK_INTERVAL, CURSOR_BLINK_INTERVAL); + cursor_blink_ev.again (); #endif #if OFF_FOCUS_FADING if (rs[Rs_fade]) @@ -1903,7 +1850,7 @@ #else MEvent.button = ev.button; mouse_report (ev); -#endif /* MOUSE_REPORT_DOUBLECLICK */ +#endif /* MOUSE_REPORT_DOUBLECLICK */ } else @@ -2007,10 +1954,10 @@ } } else -#endif /* NO_SCROLLBAR_REPORT */ +#endif /* NO_SCROLLBAR_REPORT */ { - char upordown = 0; + char upordown = 0; if (scrollBar.style == R_SB_NEXT) { @@ -2026,10 +1973,12 @@ else if (scrollbarrxvt_dnButton (ev.y)) upordown = 1; /* down */ } + if (upordown) { #ifndef NO_SCROLLBAR_BUTTON_CONTINUAL_SCROLLING - cont_scroll_ev.start (SCROLLBAR_INITIAL_DELAY, SCROLLBAR_CONTINUOUS_DELAY); + if (!cont_scroll_ev.is_active ()) + cont_scroll_ev.start (SCROLLBAR_INITIAL_DELAY, SCROLLBAR_CONTINUOUS_DELAY); #endif if (scr_page (upordown < 0 ? UP : DN, 1)) { @@ -2119,8 +2068,7 @@ } #ifdef SELECTION_SCROLLING - if (sel_scroll_ev.active) - sel_scroll_ev.stop(); + sel_scroll_ev.stop(); #endif if (ev.window == vt) @@ -2154,7 +2102,7 @@ #else /* MOUSE_REPORT_DOUBLECLICK */ MEvent.button = AnyButton; mouse_report (ev); -#endif /* MOUSE_REPORT_DOUBLECLICK */ +#endif /* MOUSE_REPORT_DOUBLECLICK */ return; } @@ -2202,7 +2150,8 @@ if (mouse_slip_wheel_speed < -nrow) mouse_slip_wheel_speed = -nrow; if (mouse_slip_wheel_speed > +nrow) mouse_slip_wheel_speed = +nrow; - slip_wheel_ev.start (SCROLLBAR_CONTINUOUS_DELAY, SCROLLBAR_CONTINUOUS_DELAY); + if (!slip_wheel_ev.is_active ()) + slip_wheel_ev.start (SCROLLBAR_CONTINUOUS_DELAY, SCROLLBAR_CONTINUOUS_DELAY); } else { @@ -2280,7 +2229,7 @@ { refresh_count = 0; - if (!option (Opt_skipScroll) || ev::ev_time () > ev::now () + 1. / 60.) + if (!option (Opt_skipScroll) || ev_time () > ev::now () + 1. / 60.) { refreshnow = true; ch = NOCHAR; @@ -2501,7 +2450,7 @@ pclose_printer (fd); } -#endif /* PRINTPIPE */ +#endif /* PRINTPIPE */ /*}}} */ /* *INDENT-OFF* */ @@ -2804,7 +2753,8 @@ priv = 0; ch = cmd_getc (); if (ch >= '<' && ch <= '?') - { /* '<' '=' '>' '?' */ + { + /* '<' '=' '>' '?' */ priv = ch; ch = cmd_getc (); } @@ -3634,7 +3584,6 @@ { 67, PrivMode_BackSpace }, #endif { 1000, PrivMode_MouseX11 }, - // 1001 Use Hilite Mouse Tracking. NYI, TODO { 1002, PrivMode_MouseBtnEvent }, { 1003, PrivMode_MouseAnyEvent }, { 1010, PrivMode_TtyOutputInh }, // rxvt extension @@ -3745,17 +3694,15 @@ if (state) /* orthogonal */ priv_modes &= ~(PrivMode_MouseX10|PrivMode_MouseBtnEvent|PrivMode_MouseAnyEvent); break; -#if 0 - case 1001: - break; /* X11 mouse highlighting */ -#endif case 1002: case 1003: - if (state) { - priv_modes &= ~(PrivMode_MouseX10|PrivMode_MouseX11); - priv_modes &= arg[i] == 1003 ? ~PrivMode_MouseBtnEvent : ~PrivMode_MouseAnyEvent; - vt_emask_mouse = PointerMotionMask; - } else + if (state) + { + priv_modes &= ~(PrivMode_MouseX10|PrivMode_MouseX11); + priv_modes &= arg[i] == 1003 ? ~PrivMode_MouseBtnEvent : ~PrivMode_MouseAnyEvent; + vt_emask_mouse = PointerMotionMask; + } + else vt_emask_mouse = NoEventMask; vt_select_input (); break; @@ -3945,7 +3892,8 @@ unicode_t ch, cmd = cmd_getc (); if (cmd == 'Q') - { /* query graphics */ + { + /* query graphics */ tt_printf ("\033G0\012"); /* no graphics */ return; }