From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Kai Ma Newsgroups: gmane.emacs.devel Subject: Re: [PATCH] On the nasty "ghost key" problem on NS Date: Fri, 4 Nov 2022 20:09:26 +0800 Message-ID: References: <87leord0ei.fsf@yahoo.com> <87h6zfchpu.fsf@yahoo.com> <394D8618-AF36-44C4-BA64-7AFDFBBDC429@gmail.com> <878rkrcbkx.fsf@yahoo.com> <87sfizaria.fsf@yahoo.com> Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3731.200.110.1.12\)) Content-Type: multipart/mixed; boundary="Apple-Mail=_C7386A03-77FB-4217-9732-13A42071D435" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="37616"; mail-complaints-to="usenet@ciao.gmane.io" Cc: emacs-devel@gnu.org To: Po Lu Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Fri Nov 04 13:10:41 2022 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oqvWz-0009ZC-5g for ged-emacs-devel@m.gmane-mx.org; Fri, 04 Nov 2022 13:10:41 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oqvWG-000387-PR; Fri, 04 Nov 2022 08:10:00 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oqvWA-00037k-Td for emacs-devel@gnu.org; Fri, 04 Nov 2022 08:09:50 -0400 Original-Received: from mail-pj1-x1042.google.com ([2607:f8b0:4864:20::1042]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oqvW7-0004vb-NS for emacs-devel@gnu.org; Fri, 04 Nov 2022 08:09:50 -0400 Original-Received: by mail-pj1-x1042.google.com with SMTP id u8-20020a17090a5e4800b002106dcdd4a0so8021837pji.1 for ; Fri, 04 Nov 2022 05:09:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:from:to:cc:subject:date:message-id:reply-to; bh=yyyXxXs3YRrRIUi9daEW4nkdsHexu8QP+QIicm5Kn8Y=; b=hDEdFHydKkyEirLrGsl3Iel+9TlqPJgOJ7eeijU0mWx5KX9mznIUgdLwPBO8PfDmZU WYEGZXXVFmD4amb1J4bAwcsov7Lo3I6H4CsTzkGVlT4pGBn5IYkLZdTP8/YFKHwDXouq 2I3fiAZ3uq28ldY7G35Sz/JjB4a+U6+Sd9KXKennefWOPEQKPe/NkTfzX3lYZXdYlbHG O8rdzgwCDghexj7wksNOzda9bTKg72eJbtDbQJpu367ZcYdkM5e6Uur+D1hzGaDrTv90 i4Jsk3uoRG+2kfYb4wBOvgsB7GNN5y91LIcwLLiKgBKeHoOsQT2BxGqlci+DQckVwqoR eZxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=yyyXxXs3YRrRIUi9daEW4nkdsHexu8QP+QIicm5Kn8Y=; b=D8kQcNLmMBtQL0BZT7C5jN7LajuH23xgMmnL0QV9N3Mt8Yfx/wdiSOXzIpUnqVcSNk r8M8oT15G0fSPXJdcXRe8pOzy6lSIUUred7ftsyUKDAiaJcgSMR2kEp+stDMr+fMf9vF EPBkk3R6EtfjuMT+Z5pora6E/887j0w2oSPZJjOoG71XlzKVD34MLrdMHTsaRHtRmW72 mySkD4B2EJ/eu2/7VHncmI7rN78BY80zCSXsM50PRs1rS6kiFvaqW3BzAAyUPt1PpgDp pxt3jlM0rpfDGK/7gtO3GF8JnNbUs8kCjfBmCakkDShPCJVVksP0ChGaeSv1LlN6qpTB Z3qA== X-Gm-Message-State: ACrzQf0QHR7x0scvfk6KwBhIleT14Ka9fRYNHN34rBKLKrWxBJT3lqpH 1VMYPmU8gAT0O5x8WIigpQo2s9Bvv3cWtA== X-Google-Smtp-Source: AMsMyM5/oXQZcaQGuuzAGwn318VghIki78Eht3c22DWxYrji0yZKHTggQ23R1bHUq3CNZmNHZxOawg== X-Received: by 2002:a17:90a:39c6:b0:216:eab7:2e2b with SMTP id k6-20020a17090a39c600b00216eab72e2bmr4058791pjf.25.1667563780493; Fri, 04 Nov 2022 05:09:40 -0700 (PDT) Original-Received: from smtpclient.apple (n058153105218.netvigator.com. [58.153.105.218]) by smtp.gmail.com with ESMTPSA id o14-20020a170902d4ce00b0018157b415dbsm2550948plg.63.2022.11.04.05.09.38 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 04 Nov 2022 05:09:40 -0700 (PDT) In-Reply-To: <87sfizaria.fsf@yahoo.com> X-Mailer: Apple Mail (2.3731.200.110.1.12) Received-SPF: pass client-ip=2607:f8b0:4864:20::1042; envelope-from=justksqsf@gmail.com; helo=mail-pj1-x1042.google.com X-Spam_score_int: -15 X-Spam_score: -1.6 X-Spam_bar: - X-Spam_report: (-1.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, FROM_LOCAL_NOVOWEL=0.5, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: "Emacs-devel" Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:299126 Archived-At: --Apple-Mail=_C7386A03-77FB-4217-9732-13A42071D435 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii > On Nov 4, 2022, at 19:27, Po Lu wrote: >=20 > Kai Ma writes: >=20 >> + owfi =3D waiting_for_input; >> + waiting_for_input =3D false; >> + if (WINDOWP (echo_area_window) && ! NILP (safe_call_inhibit_quit = (0, Qns_in_echo_area))) >> win =3D XWINDOW (echo_area_window); >> else >> win =3D XWINDOW (FRAME_SELECTED_WINDOW (emacsframe)); >> + waiting_for_input =3D owfi; >=20 > Please rename `owfi' to `was_waiting_for_input' or some other more > descriptive name. What happens if you just block input around = safe_call > (0, Qns_in_echo_area), instead of making an extra function that passes = a > magic flag to safe__call? Either safe_call alone or safe_call+block_input does not fix the bug. >> +Lisp_Object >> +safe_call_inhibit_quit (ptrdiff_t nargs, Lisp_Object func, ...) >> +{ >> + Lisp_Object retval; >> + va_list ap; >> + >> + va_start (ap, func); >> + retval =3D safe__call (true, nargs, func, ap); >> + va_end (ap); >> + return retval; >> +} >> + >=20 > This seems extraneous to me. Changed to specbind(Qinhibit_quit, Qt). --Apple-Mail=_C7386A03-77FB-4217-9732-13A42071D435 Content-Disposition: attachment; filename=fix-ghost-key-v3.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="fix-ghost-key-v3.patch" Content-Transfer-Encoding: 7bit diff --git a/src/nsterm.m b/src/nsterm.m index 17f40dc7e3..0788442b98 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -7063,16 +7063,23 @@ - (NSRect)firstRectForCharacterRange: (NSRange)theRange NSRect rect; NSPoint pt; struct window *win; + bool was_waiting_for_input; + specpdl_ref count = SPECPDL_INDEX (); NSTRACE ("[EmacsView firstRectForCharacterRange:]"); if (NS_KEYLOG) NSLog (@"firstRectForCharRange request"); - if (WINDOWP (echo_area_window) && ! NILP (call0 (intern ("ns-in-echo-area")))) + was_waiting_for_input = waiting_for_input; + waiting_for_input = false; + specbind (Qinhibit_quit, Qt); + if (WINDOWP (echo_area_window) && ! NILP (safe_call (true, 0, Qns_in_echo_area))) win = XWINDOW (echo_area_window); else win = XWINDOW (FRAME_SELECTED_WINDOW (emacsframe)); + unbind_to (count, Qnil); + waiting_for_input = was_waiting_for_input; rect.size.width = theRange.length * FRAME_COLUMN_WIDTH (emacsframe); rect.size.height = FRAME_LINE_HEIGHT (emacsframe); @@ -11012,6 +11019,7 @@ Nil means use fullscreen the old (< 10.7) way. The old way works better with DEFSYM (Qcondensed, "condensed"); DEFSYM (Qreverse_italic, "reverse-italic"); DEFSYM (Qexpanded, "expanded"); + DEFSYM (Qns_in_echo_area, "ns-in-echo-area"); #ifdef NS_IMPL_COCOA Fprovide (Qcocoa, Qnil); --Apple-Mail=_C7386A03-77FB-4217-9732-13A42071D435--