I think the mailer daemon may have bounced this.

---------- Forwarded message ----------
From: Eric Arnold <[EMAIL PROTECTED]>
Date: May 8, 2006 1:06 AM
Subject: get key name from keycode
To: "vim.org user list" <vim@vim.org>, vim-dev@vim.org


How do I get the key name, i.e. <leftmouse> from the 3 byte keycode
returned by getchar()?

strtrans() doesn't seem to deal with these.

^Qkey  does this, but I was looking for a functional method.

Let me know if I've missed something, otherwise please consider the
following patch to make   strtrans()  return <keyname>  strings in the
place of 3 byte termcap key codes.

--- charset.c   2006-05-08 01:00:43.941375000 -0600
+++ charset.c.new       2006-05-08 01:02:19.753875000 -0600
@@ -328,6 +328,7 @@
{
    char_u     *res;
    char_u     *p;
+    int                res_added = 0;
#ifdef FEAT_MBYTE
    int                l, len, c;
    char_u     hexbuf[11];
@@ -386,7 +387,40 @@
           }
           else
#endif
-               STRCAT(res, transchar_byte(*p++));
+           {
+               if ( *p == K_SPECIAL )
+               {
+                   union {
+                       char_u  str[3];
+                       int     c;
+                   } key;
+                   char_u *key_name;
+                   int modifiers = 0;
+
+                   key.c = TERMCAP2KEY( *(p+1), *(p+2) );
+
+                   extract_modifiers( key.c, &modifiers );
+                   key_name = get_special_key_name( key.c, modifiers);
+
+                   if ( STRCMP( key_name, "<>" ) && STRCMP( key_name, "" )
+                           && STRCMP( key_name, "<\\200>") )
+                   {
+                       char_u res1;
+
+                       p += 3;
+                       res_added += STRLEN( key_name );
+                       // vim_realloc does a free()
+                       res = realloc( res,
+                               (unsigned)(vim_strsize(s) + 1) + res_added );
+                       STRCAT( res, key_name );
+                   }
+                   else
+                       STRCAT(res, transchar_byte(*p++));
+
+               }
+               else
+                   STRCAT(res, transchar_byte(*p++));
+           }
       }
    }
    return res;

Attachment: charset.c.patch
Description: Binary data

Reply via email to