From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Adrian Robert Newsgroups: gmane.emacs.bugs Subject: bug#8680: emacs 24.0 OS X keypad patch Date: Wed, 6 Jul 2011 23:04:15 -0400 Message-ID: References: <625A3C9C-ACF2-42A0-B4E8-8ABDDA060131@pacbell.net> <82F88237-57F3-49B4-9EBB-DE0358BDEA53@pacbell.net> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 (Apple Message framework v1084) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable X-Trace: dough.gmane.org 1310007935 5822 80.91.229.12 (7 Jul 2011 03:05:35 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Thu, 7 Jul 2011 03:05:35 +0000 (UTC) Cc: 8680@debbugs.gnu.org, tralfaz@pacbell.net To: Stefan Monnier Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu Jul 07 05:05:30 2011 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([140.186.70.17]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Qeeu7-0003QR-Vk for geb-bug-gnu-emacs@m.gmane.org; Thu, 07 Jul 2011 05:05:28 +0200 Original-Received: from localhost ([::1]:45913 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qeeu6-0008Rh-LD for geb-bug-gnu-emacs@m.gmane.org; Wed, 06 Jul 2011 23:05:26 -0400 Original-Received: from eggs.gnu.org ([140.186.70.92]:43744) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qeetl-0008PA-EJ for bug-gnu-emacs@gnu.org; Wed, 06 Jul 2011 23:05:07 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Qeeti-0000rX-Sc for bug-gnu-emacs@gnu.org; Wed, 06 Jul 2011 23:05:05 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:53560) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qeeti-0000rQ-HJ for bug-gnu-emacs@gnu.org; Wed, 06 Jul 2011 23:05:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.69) (envelope-from ) id 1Qeeti-0005vp-1n; Wed, 06 Jul 2011 23:05:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Adrian Robert Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-To: owner@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 07 Jul 2011 03:05:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 8680 X-GNU-PR-Package: emacs,ns X-GNU-PR-Keywords: Original-Received: via spool by 8680-submit@debbugs.gnu.org id=B8680.131000786922761 (code B ref 8680); Thu, 07 Jul 2011 03:05:02 +0000 Original-Received: (at 8680) by debbugs.gnu.org; 7 Jul 2011 03:04:29 +0000 Original-Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1QeetB-0005v2-41 for submit@debbugs.gnu.org; Wed, 06 Jul 2011 23:04:29 -0400 Original-Received: from mail-vw0-f44.google.com ([209.85.212.44]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Qeet8-0005up-WA for 8680@debbugs.gnu.org; Wed, 06 Jul 2011 23:04:28 -0400 Original-Received: by vws12 with SMTP id 12so446310vws.3 for <8680@debbugs.gnu.org>; Wed, 06 Jul 2011 20:04:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=subject:mime-version:content-type:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to:x-mailer; bh=l7EhujfpXMr9DLrZmiFZ6OlS1tXmgBweegMtHsTHhg8=; b=DJ9JNvodtEhrML9CQkVKZG4hfnd5tF9mDljgpEuXtwLoIDOyaxzwFnLfNfB0I5Jiq2 vvr8jOl+f83jEN/HAS9EQ9bmbXGlyR/CAicge5740mgu8NNemIhuCvjZsF4ekCTVjda8 vTnx3VOkff2F84nBvZJqWNqxHj+ViiBL3DOY0= Original-Received: by 10.52.98.97 with SMTP id eh1mr443146vdb.7.1310007861310; Wed, 06 Jul 2011 20:04:21 -0700 (PDT) Original-Received: from [10.0.1.2] (216.sub-75-250-163.myvzw.com [75.250.163.216]) by mx.google.com with ESMTPS id c9sm3147793vdv.40.2011.07.06.20.04.17 (version=TLSv1/SSLv3 cipher=OTHER); Wed, 06 Jul 2011 20:04:19 -0700 (PDT) In-Reply-To: X-Mailer: Apple Mail (2.1084) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list Resent-Date: Wed, 06 Jul 2011 23:05:02 -0400 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:48145 Archived-At: The code looks reasonable, but could the author explain why [theEvent = keyCode] needs to be used in the keypad conversion instead of code? The = code would be more understandable if ns_convert_kaypad() and = ns_convert_key() used the same argument. Also this patch should be = tested for correct behavior wrt this issue: = http://www.cocoabuilder.com/archive/cocoa/73306-workaround-for-broken-numl= ock-support.html#73306 thanks, Adrian On 2011/07/04, at 13:42, Stefan Monnier wrote: > reassign 8680 emacs,ns > tags 8680 +patch > thanks >=20 > Could someone familiar with the MacOSX code take a look at this > bug report? >=20 >=20 > Stefan >=20 >=20 >>>>>> "Michael" =3D=3D Michael Marchionna writes: >=20 >> Adding keypad keycodes to the existing translation table leads to = some keys >> being wrongly interpreted as keypad keys. To avoid that, this patch >> uses a separate translation table exclusively for keys that >> generate a NSNumericPadKeyMask. >=20 >=20 >> diff --git a/src/nsterm.m b/src/nsterm.m >> index 91f0cbb..d537ee3 100644 >> --- a/src/nsterm.m >> +++ b/src/nsterm.m >> @@ -87,6 +87,7 @@ static unsigned convert_ns_to_X_keysym[] =3D >> NSBeginFunctionKey, 0x58, >> NSSelectFunctionKey, 0x60, >> NSPrintFunctionKey, 0x61, >> + NSClearLineFunctionKey, 0x0B, >> NSExecuteFunctionKey, 0x62, >> NSInsertFunctionKey, 0x63, >> NSUndoFunctionKey, 0x65, >> @@ -134,6 +135,35 @@ static unsigned convert_ns_to_X_keysym[] =3D >> 0x1B, 0x1B /* escape */ >> }; >=20 >> +static unsigned convert_nskeypad_to_X_keysym[] =3D >> +{ >> + /* Arrow keys are both function and keypad keys */ >> + NSLeftArrowFunctionKey, 0x51, >> + NSUpArrowFunctionKey, 0x52, >> + NSRightArrowFunctionKey, 0x53, >> + NSDownArrowFunctionKey, 0x54, >> + >> + 0x41, 0xAE, /* KP_Decimal */ >> + 0x43, 0xAA, /* KP_Multiply */ >> + 0x45, 0xAB, /* KP_Add */ >> + 0x4B, 0xAF, /* KP_Divide */ >> + 0x4E, 0xAD, /* KP_Subtract */ >> + 0x51, 0xBD, /* KP_Equal */ >> + 0x52, 0xB0, /* KP_0 */ >> + 0x53, 0xB1, /* KP_1 */ >> + 0x54, 0xB2, /* KP_2 */ >> + 0x55, 0xB3, /* KP_3 */ >> + 0x56, 0xB4, /* KP_4 */ >> + 0x57, 0xB5, /* KP_5 */ >> + 0x58, 0xB6, /* KP_6 */ >> + 0x59, 0xB7, /* KP_7 */ >> + 0x5B, 0xB8, /* KP_8 */ >> + 0x5C, 0xB9, /* KP_9 */ >> + >> + // The enter key is on the keypad but modifier isnt set >> + NSEnterCharacter, 0x8D >> +}; >> + >=20 >> static Lisp_Object Qmodifier_value; >> Lisp_Object Qalt, Qcontrol, Qhyper, Qmeta, Qsuper, Qnone; >> @@ -1924,13 +1954,33 @@ ns_convert_key (unsigned code) >> unsigned keysym; >> /* An array would be faster, but less easy to read. */ >> for (keysym =3D 0; keysym < last_keysym; keysym +=3D 2) >> - if (code =3D=3D convert_ns_to_X_keysym[keysym]) >> - return 0xFF00 | convert_ns_to_X_keysym[keysym+1]; >> + =20 >> + if (code =3D=3D convert_ns_to_X_keysym[keysym]) { >> + return 0xFF00 | convert_ns_to_X_keysym[keysym+1]; >> + } >> return 0; >> /* if decide to use keyCode and Carbon table, use this line: >> return code > 0xff ? 0 : 0xFF00 | = ns_keycode_to_xkeysym_table[code]; */ >> } >=20 >> +static unsigned >> +ns_convert_keypad (unsigned code) >> +/* = --------------------------------------------------------------------------= >> + Internal call used by NSView-keyDown. >> + = --------------------------------------------------------------------------= */ >> +{ >> + const unsigned last_keysym =3D (sizeof = (convert_nskeypad_to_X_keysym) >> + / sizeof = (convert_nskeypad_to_X_keysym[0])); >> + unsigned keysym; >> + /* An array would be faster, but less easy to read. */ >> + for (keysym =3D 0; keysym < last_keysym; keysym +=3D 2) { >> + if (code =3D=3D convert_nskeypad_to_X_keysym[keysym]) { >> + return 0xFF00 | convert_nskeypad_to_X_keysym[keysym+1]; >> + } >> + } >> + return 0; >> +} >> + >=20 >> char * >> x_get_keysym_name (int keysym) >> @@ -4503,10 +4553,10 @@ ns_term_shutdown (int sig) >> Mouse_HLInfo *hlinfo =3D MOUSE_HL_INFO (emacsframe); >> int code; >> unsigned fnKeysym =3D 0; >> - int flags; >> static NSMutableArray *nsEvArray; >> static BOOL firstTime =3D YES; >> int left_is_none; >> + unsigned int flags =3D [theEvent modifierFlags]; >=20 >> NSTRACE (keyDown); >=20 >> @@ -4550,9 +4600,13 @@ ns_term_shutdown (int sig) >> code =3D ([[theEvent charactersIgnoringModifiers] length] =3D=3D = 0) ? >> 0 : [[theEvent charactersIgnoringModifiers] characterAtIndex: = 0]; >> /* (Carbon way: [theEvent keyCode]) */ >> + =20 >=20 >> /* is it a "function key"? */ >> - fnKeysym =3D ns_convert_key (code); >> + if (code < 0x00ff && (flags & NSNumericPadKeyMask) ) >> + fnKeysym =3D ns_convert_keypad([theEvent keyCode]); >> + else >> + fnKeysym =3D ns_convert_key(code); >> if (fnKeysym) >> { >> /* COUNTERHACK: map 'Delete' on upper-right main KB to = 'Backspace', >> @@ -4565,7 +4619,6 @@ ns_term_shutdown (int sig) >=20 >> /* are there modifiers? */ > emacs_event-> modifiers =3D 0; >> - flags =3D [theEvent modifierFlags]; >=20 >> if (flags & NSHelpKeyMask) > emacs_event-> modifiers |=3D hyper_modifier;