[Vm-dev] Ctrl-M?

Michael Rueger m.rueger at acm.org
Fri Jun 19 16:35:30 UTC 2009


Michael Rueger wrote:

> it seems both tab and cr are handled twice in paragraph editor when 
> handled as meta keys. Not sure why yet...

OK, this is what I figured out and I might be completely wrong. Couldn't 
find any hints in documentation so it's based on trial and error.

CR and TAB act as normal keys (windows event wise) *unless* ctrl is pressed.
- removed CR and TAB from virtual key map
- add an extra keyChar event in that case (ctrl pressed together with CR 
or TAB).

See code below.

Flames, pointers to docs, explanations welcome :-)

Michael

----------------------------------------

/* Map a virtual key into something the Mac understands */
int mapVirtualKey(int virtKey)
{
   switch (virtKey) {
     case VK_DELETE: return 127;
     case VK_INSERT: return 5;
     case VK_PRIOR:  return 11;
     case VK_NEXT :  return 12;
     case VK_END  :  return 4;
     case VK_HOME :  return 1;
     case VK_LEFT :  return 28;
     case VK_RIGHT:  return 29;
     case VK_UP   :  return 30;
     case VK_DOWN :  return 31;
     // case VK_RETURN: return 13;
     // case VK_TAB	: 	return 9;
   }
   return 0;
}

--------------------------------------

   /* note: several keys are not reported as character events;
      most noticably the mapped virtual keys. For those we
      generate extra character events here */
   if(pressCode == EventKeyDown
   	  && (virtCode != 0
           || ((keyCode == 13 || keyCode == 9) && ctrl))) {
       /* generate extra character event */
       sqKeyboardEvent *extra = (sqKeyboardEvent*)sqNextEventPut();
       *extra = *evt;
       extra->pressCode = EventKeyChar;
   }


More information about the Vm-dev mailing list