From RDB: according to VT manuals, application cursor keys should
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Wed, 9 May 2001 13:30:06 +0000 (13:30 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Wed, 9 May 2001 13:30:06 +0000 (13:30 +0000)
never be enabled when app keypad is disabled. Also CTRL+arrows flips
the application-ness to make it easy to generate the other sequences
if required.

git-svn-id: svn://svn.tartarus.org/sgt/putty@1105 cda61777-01e9-0310-a592-d414129be87e

window.c

index 3618d14..5159d09 100644 (file)
--- a/window.c
+++ b/window.c
@@ -2759,10 +2759,22 @@ static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam,
            if (xkey) {
                if (vt52_mode)
                    p += sprintf((char *) p, "\x1B%c", xkey);
-               else if (app_cursor_keys && !cfg.no_applic_c)
-                   p += sprintf((char *) p, "\x1BO%c", xkey);
-               else
-                   p += sprintf((char *) p, "\x1B[%c", xkey);
+               else {
+                   int app_flg = (app_cursor_keys && !cfg.no_applic_c);
+                   /* VT100 & VT102 manuals both state the app cursor keys
+                    * only work if the app keypad is on.
+                    */
+                   if (!app_keypad_keys)
+                       app_flg = 0;
+                   /* Useful mapping of Ctrl-arrows */
+                   if (shift_state == 2)
+                       app_flg = !app_flg;
+
+                   if (app_flg)
+                       p += sprintf((char *) p, "\x1BO%c", xkey);
+                   else
+                       p += sprintf((char *) p, "\x1B[%c", xkey);
+               }
                return p - output;
            }
        }