From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.bugs Subject: bug#66970: 29.1; Overwrite-mode is not working with Korean characters Date: Thu, 09 Nov 2023 18:50:29 +0200 Message-ID: <83cywizx9m.fsf@gnu.org> References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="17094"; mail-complaints-to="usenet@ciao.gmane.io" Cc: 66970@debbugs.gnu.org To: =?UTF-8?Q?Jo=C3=A3o_?= =?UTF-8?Q?T=C3=A1vora?= , SUKBEOM KIM Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Thu Nov 09 17:51:45 2023 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 1r18Fs-00049C-1t for geb-bug-gnu-emacs@m.gmane-mx.org; Thu, 09 Nov 2023 17:51:44 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1r18Fh-0008LQ-NH; Thu, 09 Nov 2023 11:51:34 -0500 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 1r18Fb-0008Ie-DA for bug-gnu-emacs@gnu.org; Thu, 09 Nov 2023 11:51:27 -0500 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1r18FX-0002i9-EU for bug-gnu-emacs@gnu.org; Thu, 09 Nov 2023 11:51:23 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1r18GA-0005QB-B5 for bug-gnu-emacs@gnu.org; Thu, 09 Nov 2023 11:52:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 09 Nov 2023 16:52:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 66970 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: moreinfo Original-Received: via spool by 66970-submit@debbugs.gnu.org id=B66970.169954869620801 (code B ref 66970); Thu, 09 Nov 2023 16:52:02 +0000 Original-Received: (at 66970) by debbugs.gnu.org; 9 Nov 2023 16:51:36 +0000 Original-Received: from localhost ([127.0.0.1]:48646 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r18Fk-0005PQ-BC for submit@debbugs.gnu.org; Thu, 09 Nov 2023 11:51:36 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:60326) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r18FU-0005Oy-Ui for 66970@debbugs.gnu.org; Thu, 09 Nov 2023 11:51:35 -0500 Original-Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r18Em-0002Ua-Be; Thu, 09 Nov 2023 11:50:36 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=zIV4tG9SJcLIlXU2dHZvn6tJNBro4LO6fRFD2E0UOH8=; b=l9bw7/yjcjwssHnEDNsD d4MO159bm3CHq7jBx1e89sg9TN6nf3WW2barwTTcX0YMPt0nd4yOdqCNu+riUnjESC6SMxJFnXUnY PyNWEKsl3BbtH2gRiaSgt3IUDIgqHX3gELDhftJ61+1SlvYSXpuAdooi4puryFC6/F+CkQTYZUjWx BGc9zq4vBRx+7JoIOgdWEnvgBHF4jmSW5kBwRCPLixRAaYsM7LDxvDtlIhFSIY//scbAMWuFhm8Lz gOyajL1CkYydlqgRF0AdcNUG5bLpvdaAVCAE/3rLdAEjzOcl+cIv2ZQVw0PGbmZfvWII19X5WTWwE 3OM1dyD2XT0piQ==; In-Reply-To: (message from =?UTF-8?Q?Jo=C3=A3o_?= =?UTF-8?Q?T=C3=A1vora?= on Thu, 9 Nov 2023 16:37:17 +0000) 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-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:274060 Archived-At: > From: João Távora > Date: Thu, 9 Nov 2023 16:37:17 +0000 > > Eli brought up this bug in emacs-devel and I thought > I would give it a shot. > > I had never touched this code or anything like it, but I do > use input methods a bit for portuguese. Let me know what > you think. Thanks. Sukbeom, could you please try the patch and see if it gives good results, both with and without Overwrite mode? > diff --git a/lisp/leim/quail/hangul.el b/lisp/leim/quail/hangul.el > index 46a2e5a6ba2..7e6c7310179 100644 > --- a/lisp/leim/quail/hangul.el > +++ b/lisp/leim/quail/hangul.el > @@ -146,21 +146,34 @@ hangul-insert-character > (progn > (delete-region (region-beginning) (region-end)) > (deactivate-mark))) > - (quail-delete-region) > - (let ((first (car queues))) > - (insert > - (hangul-character > - (+ (aref first 0) (hangul-djamo 'cho (aref first 0) (aref first 1))) > - (+ (aref first 2) (hangul-djamo 'jung (aref first 2) (aref first 3))) > - (+ (aref first 4) (hangul-djamo 'jong (aref first 4) (aref first 5)))))) > - (move-overlay quail-overlay (overlay-start quail-overlay) (point)) > - (dolist (queue (cdr queues)) > - (insert > - (hangul-character > - (+ (aref queue 0) (hangul-djamo 'cho (aref queue 0) (aref queue 1))) > - (+ (aref queue 2) (hangul-djamo 'jung (aref queue 2) (aref queue 3))) > - (+ (aref queue 4) (hangul-djamo 'jong (aref queue 4) (aref queue 5))))) > - (move-overlay quail-overlay (1+ (overlay-start quail-overlay)) (point)))) > + (let* ((chars-to-insert > + (with-temp-buffer > + (dolist (queue queues (mapcar #'identity (buffer-string))) > + (insert > + (hangul-character > + (+ (aref queue 0) (hangul-djamo 'cho (aref queue 0) > (aref queue 1))) > + (+ (aref queue 2) (hangul-djamo 'jung (aref queue 2) > (aref queue 3))) > + (+ (aref queue 4) (hangul-djamo 'jong (aref queue 4) > (aref queue 5)))))))) > + (may-have-to-overwrite-p > + (or > + ;; If the overlay isn't showing (i.e. it has 0 length) then > + ;; we may want to insert char overwriting (iff overwrite-mode is > + ;; non-nil, of course) > + (= (overlay-start quail-overlay) (overlay-end quail-overlay)) > + ;; Likewise we want to do it if there is more then one > + ;; character that were combined. > + (cdr chars-to-insert)))) > + (quail-delete-region) ; this kills the overlay > + (dolist (c chars-to-insert) > + (let ((last-command-event c) > + (overwrite-mode (and overwrite-mode > + may-have-to-overwrite-p > + overwrite-mode))) > + (self-insert-command 1) > + ;; TODO: maybe use cl-loop for an easier-to-read loop? > + (setq may-have-to-overwrite-p nil))) > + ; this revives it (TODO: do we really always revive?) > + (move-overlay quail-overlay (1- (point)) (point)))) > > (defun hangul-djamo (jamo char1 char2) > "Return the double Jamo index calculated from the arguments. > > > > -- > João Távora >