GNU bug report logs - #67925
29.1; delete-rectangle fails on multi-column characters

Previous Next

Package: emacs;

Reported by: awrhygty <at> outlook.com

Date: Wed, 20 Dec 2023 11:00:02 UTC

Severity: normal

Found in version 29.1

Done: Eli Zaretskii <eliz <at> gnu.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 67925 in the body.
You can then email your comments to 67925 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#67925; Package emacs. (Wed, 20 Dec 2023 11:00:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to awrhygty <at> outlook.com:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Wed, 20 Dec 2023 11:00:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: awrhygty <at> outlook.com
To: bug-gnu-emacs <at> gnu.org
Subject: 29.1; delete-rectangle fails on multi-column characters
Date: Wed, 20 Dec 2023 19:58:49 +0900
If a multi-column character is crossing the start column of a intended
rectangle, no characters are deleted in the same line.

For example, type 'C-x r d'(delete-rectangle) from column 1 to column 4
of the text below, the second line characters are not deleted.

01234
一二4
01234

result:
04
一二4
04

This does not apply to #'kill-rectangle.
kill-rectangle result:
04
一4
04

To keep the table layout, multi-column characters crossing the start(or
end) column of the rectangle should be replaced with space characters
of the same width before deletion.



In GNU Emacs 29.1 (build 2, x86_64-w64-mingw32) of 2023-08-02 built on
 AVALON
Windowing system distributor 'Microsoft Corp.', version 10.0.19045
System Description: Microsoft Windows 10 Pro (v10.0.2009.19045.3803)

Configured using:
 'configure --with-modules --without-dbus --with-native-compilation=aot
 --without-compress-install --with-tree-sitter CFLAGS=-O2'

Configured features:
ACL GIF GMP GNUTLS HARFBUZZ JPEG JSON LCMS2 LIBXML2 MODULES NATIVE_COMP
NOTIFY W32NOTIFY PDUMPER PNG RSVG SOUND SQLITE3 THREADS TIFF
TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XPM ZLIB

(NATIVE_COMP present but libgccjit not available)

Important settings:
  value of $LANG: JPN
  locale-coding-system: cp932

Major mode: Lisp Interaction

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
None found.

Features:
(gnutls network-stream nsm mailalias smtpmail textsec uni-scripts url
url-proxy url-privacy url-expand url-methods url-history url-cookie
generate-lisp-file url-domsuf url-util url-parse auth-source cl-seq
eieio eieio-core cl-macs json map byte-opt gv bytecomp byte-compile
url-vars idna-mapping ucs-normalize uni-confusable textsec-check
help-mode pp shadow sort mail-extr emacsbug message mailcap yank-media
puny dired dired-loaddefs rfc822 mml mml-sec password-cache epa derived
epg rfc6068 epg-config gnus-util text-property-search time-date subr-x
mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils
mailheader cl-loaddefs cl-lib sendmail rfc2047 rfc2045 ietf-drums
mm-util mail-prsvr mail-utils term/bobcat japan-util rmc iso-transl
tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks
lisp-float-type elisp-mode mwheel dos-w32 ls-lisp disp-table
term/w32-win w32-win w32-vars term/common-win tool-bar dnd fontset image
regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode
prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu
timer select scroll-bar mouse jit-lock font-lock syntax font-core
term/tty-colors frame minibuffer nadvice seq simple cl-generic
indonesian philippine cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
theme-loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget keymap
hashtable-print-readable backquote threads w32notify w32 lcms2 multi-tty
make-network-process native-compile emacs)

Memory information:
((conses 16 213033 11994)
 (symbols 48 7296 2)
 (strings 32 35632 2250)
 (string-bytes 1 744757)
 (vectors 16 38986)
 (vector-slots 8 785110 26020)
 (floats 8 47 293)
 (intervals 56 590 0)
 (buffers 984 12))




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#67925; Package emacs. (Wed, 20 Dec 2023 14:12:01 GMT) Full text and rfc822 format available.

Message #8 received at 67925 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: awrhygty <at> outlook.com
Cc: 67925 <at> debbugs.gnu.org
Subject: Re: bug#67925: 29.1; delete-rectangle fails on multi-column characters
Date: Wed, 20 Dec 2023 16:09:56 +0200
> From: awrhygty <at> outlook.com
> Date: Wed, 20 Dec 2023 19:58:49 +0900
> 
> 
> If a multi-column character is crossing the start column of a intended
> rectangle, no characters are deleted in the same line.
> 
> For example, type 'C-x r d'(delete-rectangle) from column 1 to column 4
> of the text below, the second line characters are not deleted.
> 
> 01234
> 一二4
> 01234
> 
> result:
> 04
> 一二4
> 04
> 
> This does not apply to #'kill-rectangle.
> kill-rectangle result:
> 04
> 一4
> 04

Thanks.  Does the patch below give good results?

diff --git a/lisp/rect.el b/lisp/rect.el
index 8dc188b..9049e32 100644
--- a/lisp/rect.el
+++ b/lisp/rect.el
@@ -212,7 +212,10 @@ rectangle-dimensions
       (cons width height))))
 
 (defun delete-rectangle-line (startcol endcol fill)
-  (when (= (move-to-column startcol (if fill t 'coerce)) startcol)
+  ;; We use >= here, not =, for characters that use more than one
+  ;; column on display, when STARTCOL is in the middle of such a
+  ;; character.
+  (when (>= (move-to-column startcol (if fill t 'coerce)) startcol)
     (delete-region (point)
 		   (progn (move-to-column endcol 'coerce)
 			  (point)))))




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#67925; Package emacs. (Thu, 21 Dec 2023 07:31:01 GMT) Full text and rfc822 format available.

Message #11 received at 67925 <at> debbugs.gnu.org (full text, mbox):

From: awrhygty <at> outlook.com
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 67925 <at> debbugs.gnu.org
Subject: Re: bug#67925: 29.1; delete-rectangle fails on multi-column characters
Date: Thu, 21 Dec 2023 16:30:39 +0900
Eli Zaretskii <eliz <at> gnu.org> writes:

>> From: awrhygty <at> outlook.com
>> Date: Wed, 20 Dec 2023 19:58:49 +0900
>> 
>> 
>> If a multi-column character is crossing the start column of a intended
>> rectangle, no characters are deleted in the same line.
>> 
>> For example, type 'C-x r d'(delete-rectangle) from column 1 to column 4
>> of the text below, the second line characters are not deleted.
>> 
>> 01234
>> 一二4
>> 01234
>> 
>> result:
>> 04
>> 一二4
>> 04
>> 
>> This does not apply to #'kill-rectangle.
>> kill-rectangle result:
>> 04
>> 一4
>> 04
>
> Thanks.  Does the patch below give good results?
>
> diff --git a/lisp/rect.el b/lisp/rect.el
> index 8dc188b..9049e32 100644
> --- a/lisp/rect.el
> +++ b/lisp/rect.el
> @@ -212,7 +212,10 @@ rectangle-dimensions
>        (cons width height))))
>  
>  (defun delete-rectangle-line (startcol endcol fill)
> -  (when (= (move-to-column startcol (if fill t 'coerce)) startcol)
> +  ;; We use >= here, not =, for characters that use more than one
> +  ;; column on display, when STARTCOL is in the middle of such a
> +  ;; character.
> +  (when (>= (move-to-column startcol (if fill t 'coerce)) startcol)
>      (delete-region (point)
>  		   (progn (move-to-column endcol 'coerce)
>  			  (point)))))

This patch gives similar result of kill-rectangle.
In the example above, I want all '4' characters moved to same column.

And TAB characters crossing the end column are not edited correctly
with delete-rectangle if indent-tabs-mode is on.

012345678
	8(TAB at head)
012345678

The text above is edited to the text below.
45678
	8(TAB at head)
45678

If indent-tabs-mode is off, the result is the text below.
45678
    8(four SPCs)
45678




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#67925; Package emacs. (Thu, 21 Dec 2023 08:44:02 GMT) Full text and rfc822 format available.

Message #14 received at 67925 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: awrhygty <at> outlook.com
Cc: 67925 <at> debbugs.gnu.org
Subject: Re: bug#67925: 29.1; delete-rectangle fails on multi-column characters
Date: Thu, 21 Dec 2023 10:42:35 +0200
> From: awrhygty <at> outlook.com
> Cc: 67925 <at> debbugs.gnu.org
> Date: Thu, 21 Dec 2023 16:30:39 +0900
> 
> Eli Zaretskii <eliz <at> gnu.org> writes:
> 
> > Thanks.  Does the patch below give good results?
> >
> > diff --git a/lisp/rect.el b/lisp/rect.el
> > index 8dc188b..9049e32 100644
> > --- a/lisp/rect.el
> > +++ b/lisp/rect.el
> > @@ -212,7 +212,10 @@ rectangle-dimensions
> >        (cons width height))))
> >  
> >  (defun delete-rectangle-line (startcol endcol fill)
> > -  (when (= (move-to-column startcol (if fill t 'coerce)) startcol)
> > +  ;; We use >= here, not =, for characters that use more than one
> > +  ;; column on display, when STARTCOL is in the middle of such a
> > +  ;; character.
> > +  (when (>= (move-to-column startcol (if fill t 'coerce)) startcol)
> >      (delete-region (point)
> >  		   (progn (move-to-column endcol 'coerce)
> >  			  (point)))))
> 
> This patch gives similar result of kill-rectangle.
> In the example above, I want all '4' characters moved to same column.

How can that be done, when the first character takes 2 or more
columns?  Deleting the first character is IMO wrong, since the other
lines leave the first character intact.  Adding SPC to other lines is
also wrong, since delete-rectangle is not supposed to _add_ columns.

So I think the effect you see after the patch I proposed is the only
reasonable outcome.  If that is not good enough for keeping the layout
of some table (as you hint in your original report, without showing
any details about the mode used in that case), then Lisp programs
which allow you to keep such tables aligned should be modified to do
something that cannot be done in general by delete-rectangle.

IOW, the general issue in delete-rectangle cannot do anything smarter
than the above, I think, and any solution specific to some particular
implementation or use of rectangles will have to be fixed by code
specific to that particular implementation (if that is some mode that
is part of Emacs).

> And TAB characters crossing the end column are not edited correctly
> with delete-rectangle if indent-tabs-mode is on.
> 
> 012345678
> 	8(TAB at head)
> 012345678
> 
> The text above is edited to the text below.
> 45678
> 	8(TAB at head)
> 45678
> 
> If indent-tabs-mode is off, the result is the text below.
> 45678
>     8(four SPCs)
> 45678

This is a separate issue with the original code.  It also happens with
kill-rectangle, btw.  We could fix it by temporarily binding
indent-tabs-mode to nil inside these commands -- would that be
acceptable?  The result will be that the killed rectangle includes
spaces, not the leading TAB.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#67925; Package emacs. (Thu, 21 Dec 2023 14:27:02 GMT) Full text and rfc822 format available.

Message #17 received at 67925 <at> debbugs.gnu.org (full text, mbox):

From: awrhygty <at> outlook.com
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 67925 <at> debbugs.gnu.org
Subject: Re: bug#67925: 29.1; delete-rectangle fails on multi-column characters
Date: Thu, 21 Dec 2023 23:26:05 +0900
Eli Zaretskii <eliz <at> gnu.org> writes:

>> From: awrhygty <at> outlook.com
>> Cc: 67925 <at> debbugs.gnu.org
>> Date: Thu, 21 Dec 2023 16:30:39 +0900
>> 
>> Eli Zaretskii <eliz <at> gnu.org> writes:
>> 
>> > Thanks.  Does the patch below give good results?
>> >
>> > diff --git a/lisp/rect.el b/lisp/rect.el
>> > index 8dc188b..9049e32 100644
>> > --- a/lisp/rect.el
>> > +++ b/lisp/rect.el
>> > @@ -212,7 +212,10 @@ rectangle-dimensions
>> >        (cons width height))))
>> >  
>> >  (defun delete-rectangle-line (startcol endcol fill)
>> > -  (when (= (move-to-column startcol (if fill t 'coerce)) startcol)
>> > +  ;; We use >= here, not =, for characters that use more than one
>> > +  ;; column on display, when STARTCOL is in the middle of such a
>> > +  ;; character.
>> > +  (when (>= (move-to-column startcol (if fill t 'coerce)) startcol)
>> >      (delete-region (point)
>> >  		   (progn (move-to-column endcol 'coerce)
>> >  			  (point)))))
>> 
>> This patch gives similar result of kill-rectangle.
>> In the example above, I want all '4' characters moved to same column.
>
> How can that be done, when the first character takes 2 or more
> columns?  Deleting the first character is IMO wrong, since the other
> lines leave the first character intact.  Adding SPC to other lines is
> also wrong, since delete-rectangle is not supposed to _add_ columns.

I think wide characters may be replaced with SPC like TAB.

>> And TAB characters crossing the end column are not edited correctly
>> with delete-rectangle if indent-tabs-mode is on.
>> 
>> 012345678
>> 	8(TAB at head)
>> 012345678
>> 
>> The text above is edited to the text below.
>> 45678
>> 	8(TAB at head)
>> 45678
>> 
>> If indent-tabs-mode is off, the result is the text below.
>> 45678
>>     8(four SPCs)
>> 45678
>
> This is a separate issue with the original code.  It also happens with
> kill-rectangle, btw.  We could fix it by temporarily binding
> indent-tabs-mode to nil inside these commands -- would that be
> acceptable?  The result will be that the killed rectangle includes
> spaces, not the leading TAB.

I prefer that the killed rectangle has same column for each line.
If TAB is included when yanking, the current column affects the width of
the yanked string for each line.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#67925; Package emacs. (Thu, 21 Dec 2023 16:47:02 GMT) Full text and rfc822 format available.

Message #20 received at 67925 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: awrhygty <at> outlook.com, Stefan Monnier <monnier <at> iro.umontreal.ca>,
 Stefan Kangas <stefankangas <at> gmail.com>, Juri Linkov <juri <at> linkov.net>
Cc: 67925 <at> debbugs.gnu.org
Subject: Re: bug#67925: 29.1; delete-rectangle fails on multi-column characters
Date: Thu, 21 Dec 2023 18:46:26 +0200
> From: awrhygty <at> outlook.com
> Cc: 67925 <at> debbugs.gnu.org
> Date: Thu, 21 Dec 2023 23:26:05 +0900
> 
> Eli Zaretskii <eliz <at> gnu.org> writes:
> 
> >> This patch gives similar result of kill-rectangle.
> >> In the example above, I want all '4' characters moved to same column.
> >
> > How can that be done, when the first character takes 2 or more
> > columns?  Deleting the first character is IMO wrong, since the other
> > lines leave the first character intact.  Adding SPC to other lines is
> > also wrong, since delete-rectangle is not supposed to _add_ columns.
> 
> I think wide characters may be replaced with SPC like TAB.

I don't think I agree.  Let's see what others think Stefan, Juri,
Stefan, any opinions?  Does anyone else have an opinion on this?

> >> And TAB characters crossing the end column are not edited correctly
> >> with delete-rectangle if indent-tabs-mode is on.
> >> 
> >> 012345678
> >> 	8(TAB at head)
> >> 012345678
> >> 
> >> The text above is edited to the text below.
> >> 45678
> >> 	8(TAB at head)
> >> 45678
> >> 
> >> If indent-tabs-mode is off, the result is the text below.
> >> 45678
> >>     8(four SPCs)
> >> 45678
> >
> > This is a separate issue with the original code.  It also happens with
> > kill-rectangle, btw.  We could fix it by temporarily binding
> > indent-tabs-mode to nil inside these commands -- would that be
> > acceptable?  The result will be that the killed rectangle includes
> > spaces, not the leading TAB.
> 
> I prefer that the killed rectangle has same column for each line.
> If TAB is included when yanking, the current column affects the width of
> the yanked string for each line.

Again, does anyone else have an opinion here?  I tend to think that we
should bind indent-tabs-mode to nil inside those functions.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#67925; Package emacs. (Thu, 21 Dec 2023 21:14:02 GMT) Full text and rfc822 format available.

Message #23 received at 67925 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Monnier <monnier <at> iro.umontreal.ca>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 67925 <at> debbugs.gnu.org, Juri Linkov <juri <at> linkov.net>,
 Stefan Kangas <stefankangas <at> gmail.com>, awrhygty <at> outlook.com
Subject: Re: bug#67925: 29.1; delete-rectangle fails on multi-column characters
Date: Thu, 21 Dec 2023 16:12:56 -0500
>> I think wide characters may be replaced with SPC like TAB.
> I don't think I agree.   Let's see what others think Stefan, Juri,
> Stefan, any opinions?  Does anyone else have an opinion on this?

I think in those circumstances, all options suck, and I suspect that the
preferred behavior will depend on not only who you ask, but also what
the specific case looks like :-(

IME inserting SPCs is wrong when the text you started from doesn't
include any whitespace at all, for example.

And not inserting SPC tends to be equally wrong when alignment needs to
be preserved.

There's no way to win, unless we can find a way to let the user control
the behavior, which seems difficult to do without making the UI overlay complex.


        Stefan





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#67925; Package emacs. (Fri, 22 Dec 2023 08:19:02 GMT) Full text and rfc822 format available.

Message #26 received at 67925 <at> debbugs.gnu.org (full text, mbox):

From: Juri Linkov <juri <at> linkov.net>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 67925 <at> debbugs.gnu.org, Stefan Kangas <stefankangas <at> gmail.com>,
 Stefan Monnier <monnier <at> iro.umontreal.ca>, awrhygty <at> outlook.com
Subject: Re: bug#67925: 29.1; delete-rectangle fails on multi-column characters
Date: Fri, 22 Dec 2023 09:56:20 +0200
>> >> This patch gives similar result of kill-rectangle.
>> >> In the example above, I want all '4' characters moved to same column.
>> >
>> > How can that be done, when the first character takes 2 or more
>> > columns?  Deleting the first character is IMO wrong, since the other
>> > lines leave the first character intact.  Adding SPC to other lines is
>> > also wrong, since delete-rectangle is not supposed to _add_ columns.
>>
>> I think wide characters may be replaced with SPC like TAB.
>
> I don't think I agree.  Let's see what others think Stefan, Juri,
> Stefan, any opinions?  Does anyone else have an opinion on this?

Does the same problem exist for deleting rectangles in texts
with a variable-pitch font?  If you draw a vertical line
it will cross a lot of characters in the middle.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#67925; Package emacs. (Fri, 22 Dec 2023 11:47:02 GMT) Full text and rfc822 format available.

Message #29 received at 67925 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Juri Linkov <juri <at> linkov.net>
Cc: 67925 <at> debbugs.gnu.org, stefankangas <at> gmail.com, monnier <at> iro.umontreal.ca,
 awrhygty <at> outlook.com
Subject: Re: bug#67925: 29.1; delete-rectangle fails on multi-column characters
Date: Fri, 22 Dec 2023 13:45:56 +0200
> From: Juri Linkov <juri <at> linkov.net>
> Cc: awrhygty <at> outlook.com,  Stefan Monnier <monnier <at> iro.umontreal.ca>,
>   Stefan Kangas <stefankangas <at> gmail.com>,  67925 <at> debbugs.gnu.org
> Date: Fri, 22 Dec 2023 09:56:20 +0200
> 
> >> >> This patch gives similar result of kill-rectangle.
> >> >> In the example above, I want all '4' characters moved to same column.
> >> >
> >> > How can that be done, when the first character takes 2 or more
> >> > columns?  Deleting the first character is IMO wrong, since the other
> >> > lines leave the first character intact.  Adding SPC to other lines is
> >> > also wrong, since delete-rectangle is not supposed to _add_ columns.
> >>
> >> I think wide characters may be replaced with SPC like TAB.
> >
> > I don't think I agree.  Let's see what others think Stefan, Juri,
> > Stefan, any opinions?  Does anyone else have an opinion on this?
> 
> Does the same problem exist for deleting rectangles in texts
> with a variable-pitch font?  If you draw a vertical line
> it will cross a lot of characters in the middle.

No, since columns still count correctly, as long as Emacs considers
all characters to be of the same single-column width.  IOW, the
rectangle commands work by columns, not by pixel-coordinates.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#67925; Package emacs. (Fri, 22 Dec 2023 14:28:02 GMT) Full text and rfc822 format available.

Message #32 received at 67925 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Monnier <monnier <at> iro.umontreal.ca>
To: Juri Linkov <juri <at> linkov.net>
Cc: Eli Zaretskii <eliz <at> gnu.org>, 67925 <at> debbugs.gnu.org,
 Stefan Kangas <stefankangas <at> gmail.com>, awrhygty <at> outlook.com
Subject: Re: bug#67925: 29.1; delete-rectangle fails on multi-column characters
Date: Fri, 22 Dec 2023 09:27:16 -0500
> Does the same problem exist for deleting rectangles in texts
> with a variable-pitch font?

No, with variable pitch fonts there is also a problem but it's
a different one.  Basically the rectangle commands operate by pretending
your font is monospaced.  You can see it with the rectangle highlighting
of `C-x SPC` where the "rectangle" won't be very rectangular in the
presence of variable pitch fonts.

For such cases, it's not even clear what The Right Thing™ should be.


        Stefan





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#67925; Package emacs. (Sat, 23 Dec 2023 17:38:01 GMT) Full text and rfc822 format available.

Message #35 received at 67925 <at> debbugs.gnu.org (full text, mbox):

From: Juri Linkov <juri <at> linkov.net>
To: Stefan Monnier <monnier <at> iro.umontreal.ca>
Cc: Eli Zaretskii <eliz <at> gnu.org>, 67925 <at> debbugs.gnu.org,
 Stefan Kangas <stefankangas <at> gmail.com>, awrhygty <at> outlook.com
Subject: Re: bug#67925: 29.1; delete-rectangle fails on multi-column characters
Date: Sat, 23 Dec 2023 19:30:03 +0200
[Message part 1 (text/plain, inline)]
>> Does the same problem exist for deleting rectangles in texts
>> with a variable-pitch font?
>
> No, with variable pitch fonts there is also a problem but it's
> a different one.  Basically the rectangle commands operate by pretending
> your font is monospaced.  You can see it with the rectangle highlighting
> of `C-x SPC` where the "rectangle" won't be very rectangular in the
> presence of variable pitch fonts.
>
> For such cases, it's not even clear what The Right Thing™ should be.

I tried "Block Area Selection" in LibreOffice with variable pitch fonts,
and the vertical lines are not straight:

[rect_libre.png (image/png, inline)]
[Message part 3 (text/plain, inline)]
So maybe it's impossible to draw straight rectangle boundaries.

OTOH, with monospaced fonts LibreOffice selects such Block Area
on the reported text:

[mono_libre.png (image/png, inline)]
[Message part 5 (text/plain, inline)]
and DEL deletes the selected text.  So maybe Emacs should do the same.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#67925; Package emacs. (Sat, 23 Dec 2023 18:08:01 GMT) Full text and rfc822 format available.

Message #38 received at 67925 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Juri Linkov <juri <at> linkov.net>
Cc: 67925 <at> debbugs.gnu.org, stefankangas <at> gmail.com, monnier <at> iro.umontreal.ca,
 awrhygty <at> outlook.com
Subject: Re: bug#67925: 29.1; delete-rectangle fails on multi-column characters
Date: Sat, 23 Dec 2023 20:07:38 +0200
> From: Juri Linkov <juri <at> linkov.net>
> Cc: Eli Zaretskii <eliz <at> gnu.org>,  awrhygty <at> outlook.com,  Stefan Kangas
>  <stefankangas <at> gmail.com>,  67925 <at> debbugs.gnu.org
> Date: Sat, 23 Dec 2023 19:30:03 +0200
> 
> OTOH, with monospaced fonts LibreOffice selects such Block Area
> on the reported text:
> 
> 
> and DEL deletes the selected text.  So maybe Emacs should do the same.

The patch I posted in

  https://debbugs.gnu.org/cgi/bugreport.cgi?bug=67925#8

is supposed to do precisely that (and does it at least in this simple
example).




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#67925; Package emacs. (Sun, 24 Dec 2023 08:35:02 GMT) Full text and rfc822 format available.

Message #41 received at 67925 <at> debbugs.gnu.org (full text, mbox):

From: Juri Linkov <juri <at> linkov.net>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 67925 <at> debbugs.gnu.org, stefankangas <at> gmail.com, monnier <at> iro.umontreal.ca,
 awrhygty <at> outlook.com
Subject: Re: bug#67925: 29.1; delete-rectangle fails on multi-column characters
Date: Sun, 24 Dec 2023 10:31:06 +0200
>> OTOH, with monospaced fonts LibreOffice selects such Block Area
>> on the reported text:
>> 
>> and DEL deletes the selected text.  So maybe Emacs should do the same.
>
> The patch I posted in
>
>   https://debbugs.gnu.org/cgi/bugreport.cgi?bug=67925#8
>
> is supposed to do precisely that (and does it at least in this simple
> example).

I confirm this, so probably it's impossible to do anything better than that.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#67925; Package emacs. (Sun, 24 Dec 2023 14:53:01 GMT) Full text and rfc822 format available.

Message #44 received at 67925 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Kangas <stefankangas <at> gmail.com>
To: Juri Linkov <juri <at> linkov.net>, Eli Zaretskii <eliz <at> gnu.org>
Cc: 67925 <at> debbugs.gnu.org, monnier <at> iro.umontreal.ca, awrhygty <at> outlook.com
Subject: Re: bug#67925: 29.1; delete-rectangle fails on multi-column characters
Date: Sun, 24 Dec 2023 06:52:13 -0800
Juri Linkov <juri <at> linkov.net> writes:

>>> OTOH, with monospaced fonts LibreOffice selects such Block Area
>>> on the reported text:
>>>
>>> and DEL deletes the selected text.  So maybe Emacs should do the same.
>>
>> The patch I posted in
>>
>>   https://debbugs.gnu.org/cgi/bugreport.cgi?bug=67925#8
>>
>> is supposed to do precisely that (and does it at least in this simple
>> example).
>
> I confirm this, so probably it's impossible to do anything better than that.

Doing as well as LibreOffice is probably already not bad.

Perhaps we should add a comment pointing to this discussion, to explain
why we have chosen this particular heuristic.




Reply sent to Eli Zaretskii <eliz <at> gnu.org>:
You have taken responsibility. (Thu, 28 Dec 2023 09:02:02 GMT) Full text and rfc822 format available.

Notification sent to awrhygty <at> outlook.com:
bug acknowledged by developer. (Thu, 28 Dec 2023 09:02:02 GMT) Full text and rfc822 format available.

Message #49 received at 67925-done <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Stefan Kangas <stefankangas <at> gmail.com>
Cc: 67925-done <at> debbugs.gnu.org, awrhygty <at> outlook.com, monnier <at> iro.umontreal.ca,
 juri <at> linkov.net
Subject: Re: bug#67925: 29.1; delete-rectangle fails on multi-column characters
Date: Thu, 28 Dec 2023 11:01:13 +0200
> From: Stefan Kangas <stefankangas <at> gmail.com>
> Date: Sun, 24 Dec 2023 06:52:13 -0800
> Cc: monnier <at> iro.umontreal.ca, awrhygty <at> outlook.com, 67925 <at> debbugs.gnu.org
> 
> Juri Linkov <juri <at> linkov.net> writes:
> 
> >>> OTOH, with monospaced fonts LibreOffice selects such Block Area
> >>> on the reported text:
> >>>
> >>> and DEL deletes the selected text.  So maybe Emacs should do the same.
> >>
> >> The patch I posted in
> >>
> >>   https://debbugs.gnu.org/cgi/bugreport.cgi?bug=67925#8
> >>
> >> is supposed to do precisely that (and does it at least in this simple
> >> example).
> >
> > I confirm this, so probably it's impossible to do anything better than that.
> 
> Doing as well as LibreOffice is probably already not bad.
> 
> Perhaps we should add a comment pointing to this discussion, to explain
> why we have chosen this particular heuristic.

Thanks.  Since it sounds like everyone agreed with the solution I
proposed, I have now installed that on the master branch, and I'm
therefore closing this bug.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#67925; Package emacs. (Wed, 03 Jan 2024 19:02:02 GMT) Full text and rfc822 format available.

Message #52 received at 67925-done <at> debbugs.gnu.org (full text, mbox):

From: awrhygty <at> outlook.com
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 67925-done <at> debbugs.gnu.org, Stefan Kangas <stefankangas <at> gmail.com>,
 monnier <at> iro.umontreal.ca, juri <at> linkov.net
Subject: Re: bug#67925: 29.1; delete-rectangle fails on multi-column characters
Date: Thu, 04 Jan 2024 04:00:49 +0900
Eli Zaretskii <eliz <at> gnu.org> writes:

>> From: Stefan Kangas <stefankangas <at> gmail.com>
>> Date: Sun, 24 Dec 2023 06:52:13 -0800
>> Cc: monnier <at> iro.umontreal.ca, awrhygty <at> outlook.com, 67925 <at> debbugs.gnu.org
>> 
>> Juri Linkov <juri <at> linkov.net> writes:
>> 
>> >>> OTOH, with monospaced fonts LibreOffice selects such Block Area
>> >>> on the reported text:
>> >>>
>> >>> and DEL deletes the selected text.  So maybe Emacs should do the same.
>> >>
>> >> The patch I posted in
>> >>
>> >>   https://debbugs.gnu.org/cgi/bugreport.cgi?bug=67925#8
>> >>
>> >> is supposed to do precisely that (and does it at least in this simple
>> >> example).
>> >
>> > I confirm this, so probably it's impossible to do anything better
>> > than that.
>> 
>> Doing as well as LibreOffice is probably already not bad.
>> 
>> Perhaps we should add a comment pointing to this discussion, to explain
>> why we have chosen this particular heuristic.
>
> Thanks.  Since it sounds like everyone agreed with the solution I
> proposed, I have now installed that on the master branch, and I'm
> therefore closing this bug.

The preview of 'C-x r t'(string-rectangle) seems different from the
result.

Before:
12345
一二5
12345

Preview:
1x2345
 x 二5
1x2345

Result:
1x2345
一x二5
1x2345




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#67925; Package emacs. (Wed, 03 Jan 2024 19:32:02 GMT) Full text and rfc822 format available.

Message #55 received at 67925 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: awrhygty <at> outlook.com
Cc: 67925 <at> debbugs.gnu.org, stefankangas <at> gmail.com, monnier <at> iro.umontreal.ca,
 juri <at> linkov.net
Subject: Re: bug#67925: 29.1; delete-rectangle fails on multi-column characters
Date: Wed, 03 Jan 2024 21:31:12 +0200
> From: awrhygty <at> outlook.com
> Cc: Stefan Kangas <stefankangas <at> gmail.com>,  juri <at> linkov.net,
>   monnier <at> iro.umontreal.ca,  67925-done <at> debbugs.gnu.org
> Date: Thu, 04 Jan 2024 04:00:49 +0900
> 
> Eli Zaretskii <eliz <at> gnu.org> writes:
> 
> >> From: Stefan Kangas <stefankangas <at> gmail.com>
> >> Date: Sun, 24 Dec 2023 06:52:13 -0800
> >> Cc: monnier <at> iro.umontreal.ca, awrhygty <at> outlook.com, 67925 <at> debbugs.gnu.org
> >> 
> >> Juri Linkov <juri <at> linkov.net> writes:
> >> 
> >> >>> OTOH, with monospaced fonts LibreOffice selects such Block Area
> >> >>> on the reported text:
> >> >>>
> >> >>> and DEL deletes the selected text.  So maybe Emacs should do the same.
> >> >>
> >> >> The patch I posted in
> >> >>
> >> >>   https://debbugs.gnu.org/cgi/bugreport.cgi?bug=67925#8
> >> >>
> >> >> is supposed to do precisely that (and does it at least in this simple
> >> >> example).
> >> >
> >> > I confirm this, so probably it's impossible to do anything better
> >> > than that.
> >> 
> >> Doing as well as LibreOffice is probably already not bad.
> >> 
> >> Perhaps we should add a comment pointing to this discussion, to explain
> >> why we have chosen this particular heuristic.
> >
> > Thanks.  Since it sounds like everyone agreed with the solution I
> > proposed, I have now installed that on the master branch, and I'm
> > therefore closing this bug.
> 
> The preview of 'C-x r t'(string-rectangle) seems different from the
> result.
> 
> Before:
> 12345
> 一二5
> 12345
> 
> Preview:
> 1x2345
>  x 二5
> 1x2345
> 
> Result:
> 1x2345
> 一x二5
> 1x2345

I don't see this as a significant problem, and don't think we should
waste time and efforts on trying to "fix" it.  The current preview
doesn't look less correct or more incorrect than what we had before
the changes.

Sorry, I don't want to try to change anything due to this new issue.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Thu, 01 Feb 2024 12:24:10 GMT) Full text and rfc822 format available.

This bug report was last modified 1 year and 232 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.