From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Lars Ingebrigtsen Newsgroups: gmane.emacs.bugs Subject: bug#50752: 28.0.50; easy-menu-define lowers the menu-bar key Date: Tue, 19 Oct 2021 19:12:20 +0200 Message-ID: <8735oxc51n.fsf@gnus.org> References: <87bl4jvudm.fsf@gnus.org> <837dehp248.fsf@gnu.org> <87czo96shw.fsf@gnus.org> <87wnmh5bes.fsf@gnus.org> <87wnmh3p9k.fsf@gnus.org> <87v91tfzrw.fsf@gnus.org> <87r1chfz80.fsf@gnus.org> <83r1chcjof.fsf@gnu.org> <87mtn5fc9s.fsf@gnus.org> <83bl3lchrp.fsf@gnu.org> <87ee8hfajg.fsf@gnus.org> <838rypc98p.fsf@gnu.org> <87h7ddc8iy.fsf@gnus.org> <831r4hc7ta.fsf@gnu.org> <878rypc7e8.fsf@gnus.org> <83zgr5asej.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="36097"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) Cc: stefan@marxist.se, shuguang79@qq.com, 50752@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Tue Oct 19 19:52:59 2021 Return-path: Envelope-to: geb-bug-gnu-emacs@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 1mctII-00096W-SX for geb-bug-gnu-emacs@m.gmane-mx.org; Tue, 19 Oct 2021 19:52:59 +0200 Original-Received: from localhost ([::1]:54726 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mctIH-0002qX-Rt for geb-bug-gnu-emacs@m.gmane-mx.org; Tue, 19 Oct 2021 13:52:57 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:53086) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mcsfe-0001Bv-PX for bug-gnu-emacs@gnu.org; Tue, 19 Oct 2021 13:13:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:40333) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mcsfd-0000QD-Ne for bug-gnu-emacs@gnu.org; Tue, 19 Oct 2021 13:13:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mcsfd-0006tx-Iz for bug-gnu-emacs@gnu.org; Tue, 19 Oct 2021 13:13:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Lars Ingebrigtsen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 19 Oct 2021 17:13:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 50752 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 50752-submit@debbugs.gnu.org id=B50752.163466355426494 (code B ref 50752); Tue, 19 Oct 2021 17:13:01 +0000 Original-Received: (at 50752) by debbugs.gnu.org; 19 Oct 2021 17:12:34 +0000 Original-Received: from localhost ([127.0.0.1]:51879 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mcsfB-0006tG-Pn for submit@debbugs.gnu.org; Tue, 19 Oct 2021 13:12:34 -0400 Original-Received: from quimby.gnus.org ([95.216.78.240]:37462) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mcsfA-0006t0-Dp for 50752@debbugs.gnu.org; Tue, 19 Oct 2021 13:12:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=6vQa3Eq5lErfFjJLZMEy7vmcgPsbJ8QgenGynDnobfU=; b=CLMdC5q/uTK9onBZNmG59oxMod vDa/aZ8AG/H4QVLXN4QqpdyjMsSPVN+P3551pGDz1gBAtm7gGFbjA4tvRii1cadM0LqSwAzktix6Z 6cMqbY/L4lJsxvyKXAL0zYIZTxhrN4Xln2SXz+eL8Pi8dii1od+kuTbPQfMrRm1ZwNe0=; Original-Received: from [84.212.220.105] (helo=elva) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mcsez-0007t4-LM; Tue, 19 Oct 2021 19:12:24 +0200 Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAgMAAAAqbBEUAAAABGdBTUEAALGPC/xhBQAAACBj SFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEU3aKHVzNByX2z/ //+saDG9AAAAAWJLR0QDEQxM8gAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB+UKExEJAqBp 02MAAAEySURBVCjPTdG9TsMwFAXg60heMqK4go2FgTxFQMoAkxv5WE0nlgy8RYXUB2Dw0oklqPFT cn3tlESJ5M83Pv4jkkd3VBo2fzYBTqCwwnD30xZkVnBAj38oGWRSAJE6gwO1kxkaDcotUt39DEKB qzeA2jPSquqTxv7Q5P76R7sHW9ZaR4P+hqsBtpUpw3RVtGvF2CqCIbuFr+MLQq4A7eJWmIQd8iq1 i0uoIGsh9REXeMFjmmbGUdCeqM2Q2b9iDNMRBwE/gUfdMG5RKrpKeP/MeOX2dUCGZSx3foPRzwnG tgwMc65w3C8gIN7zZcaIsoU2BCAgn20dvOlRQAjfE8rm+BAwhRTAVPwPD+MAftUQXEa6h110QaLf GFXk40gYUsJySWjInjmiGrnkHTm5pGeuePoD/ZSFpUosNLcAAAAldEVYdGRhdGU6Y3JlYXRlADIw MjEtMTAtMTlUMTc6MDk6MDIrMDA6MDCv+CEkAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTEwLTE5 VDE3OjA5OjAyKzAwOjAw3qWZmAAAAABJRU5ErkJggg== X-Now-Playing: Organic Jukebox's _Subaquatic Disco_: "Berlin" In-Reply-To: <83zgr5asej.fsf@gnu.org> (Eli Zaretskii's message of "Tue, 19 Oct 2021 19:30:44 +0300") X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list 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-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:217590 Archived-At: Eli Zaretskii writes: > I think we can leave the behavior with raw bytes as it is, and still > document this use case as being meant for ASCII conversions, leaving > the subtle case of raw bytes ... subtle. Yup. The following patch seems to do the trick, and should be conservative enough for emacs-28, I think. diff --git a/src/casefiddle.c b/src/casefiddle.c index a7a2541490..edc9dec2d7 100644 --- a/src/casefiddle.c +++ b/src/casefiddle.c @@ -297,6 +297,16 @@ do_casify_multibyte_string (struct casing_context *ctx, Lisp_Object obj) return obj; } +static int +ascii_casify_character (bool downcase, int c) +{ + Lisp_Object cased = CHAR_TABLE_REF (downcase? + uniprop_table (Qlowercase) : + uniprop_table (Quppercase), + c); + return FIXNATP (cased) ? XFIXNAT (cased) : c; +} + static Lisp_Object do_casify_unibyte_string (struct casing_context *ctx, Lisp_Object obj) { @@ -310,11 +320,12 @@ do_casify_unibyte_string (struct casing_context *ctx, Lisp_Object obj) cased = case_single_character (ctx, ch); if (ch == cased) continue; - cased = make_char_unibyte (cased); - /* If the char can't be converted to a valid byte, just don't - change it. */ - if (SINGLE_BYTE_CHAR_P (cased)) - SSET (obj, i, cased); + /* If down/upcasing changed an ASCII character into a non-ASCII + character (this can happen in some locales, like the Turkish + "I"), downcase using the ASCII char table. */ + if (SINGLE_BYTE_CHAR_P (ch) && !SINGLE_BYTE_CHAR_P (cased)) + cased = ascii_casify_character (ctx->flag == CASE_DOWN, ch); + SSET (obj, i, make_char_unibyte (cased)); } return obj; } @@ -651,6 +662,8 @@ syms_of_casefiddle (void) DEFSYM (Qbounds, "bounds"); DEFSYM (Qidentity, "identity"); DEFSYM (Qtitlecase, "titlecase"); + DEFSYM (Qlowercase, "lowercase"); + DEFSYM (Quppercase, "uppercase"); DEFSYM (Qspecial_uppercase, "special-uppercase"); DEFSYM (Qspecial_lowercase, "special-lowercase"); DEFSYM (Qspecial_titlecase, "special-titlecase"); -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no