From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Newsgroups: gmane.emacs.bugs Subject: bug#64185: proposal for new function: copy-line Date: Fri, 30 Jun 2023 19:13:26 +0200 Message-ID: References: <4C83E2DA-FE5F-4191-88CD-7E70008C9892@gmail.com> <86o7l66rw8.fsf@mail.linkov.net> <8494C1C8-435A-4817-9FA0-7D0A5F8DEC96@gmail.com> <86a5wnmu3x.fsf@mail.linkov.net> <62289D18-9F94-47E5-8D2B-DBDB35C2E2DB@gmail.com> <86r0pyt9a9.fsf@mail.linkov.net> <86fs6cn42v.fsf@mail.linkov.net> <9383E91E-0F4D-4B54-B999-6A42581CFF95@gmail.com> <86leg3trew.fsf@mail.linkov.net> <83zg4jtoud.fsf@gnu.org> <86cz1ezqou.fsf@mail.linkov.net> Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.120.0.1.15\)) Content-Type: multipart/mixed; boundary="Apple-Mail=_1259380C-F890-4C05-BC96-D7D046306F2A" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="37906"; mail-complaints-to="usenet@ciao.gmane.io" Cc: 64185@debbugs.gnu.org, Eli Zaretskii , me@eshelyaron.com, zkanfer@gmail.com To: Juri Linkov Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Fri Jun 30 19:14:19 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 1qFHhL-0009cf-2g for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 30 Jun 2023 19:14:19 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qFHh6-0001ik-9e; Fri, 30 Jun 2023 13:14:04 -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 1qFHh4-0001i3-Gq for bug-gnu-emacs@gnu.org; Fri, 30 Jun 2023 13:14:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qFHh4-0005Yc-8G for bug-gnu-emacs@gnu.org; Fri, 30 Jun 2023 13:14:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1qFHh4-0003Y5-3e for bug-gnu-emacs@gnu.org; Fri, 30 Jun 2023 13:14:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 30 Jun 2023 17:14:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 64185 X-GNU-PR-Package: emacs Original-Received: via spool by 64185-submit@debbugs.gnu.org id=B64185.168814521713595 (code B ref 64185); Fri, 30 Jun 2023 17:14:02 +0000 Original-Received: (at 64185) by debbugs.gnu.org; 30 Jun 2023 17:13:37 +0000 Original-Received: from localhost ([127.0.0.1]:55684 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qFHgf-0003XD-8n for submit@debbugs.gnu.org; Fri, 30 Jun 2023 13:13:37 -0400 Original-Received: from mail-lf1-f54.google.com ([209.85.167.54]:62584) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qFHgc-0003Wy-RU for 64185@debbugs.gnu.org; Fri, 30 Jun 2023 13:13:35 -0400 Original-Received: by mail-lf1-f54.google.com with SMTP id 2adb3069b0e04-4fba03becc6so1972155e87.0 for <64185@debbugs.gnu.org>; Fri, 30 Jun 2023 10:13:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1688145209; x=1690737209; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:sender:from:to:cc:subject:date:message-id:reply-to; bh=oY39kLmMdN1qLTp2yIK6E0Or74qH37Ous2+n6jiNZEU=; b=Y1dkmvFMi8llgKnFwdvelChEBOZ9faNrkEFT/HYAyW7PEs4xAvcaSzMnz1t2V7cZJE gd0A85AvVx1ilUxVNZZ79f0UcF6inUu239PDc/CygA0+DBzIIbXoU7xislW2/R4y9E/0 p0AT5rujGxqqne149gdCg+MO+9N/+jbAKy7XymtqWVrwwtw/2IRklPc/rYnuxBfz3mhZ bH/rg7zaw5T7qEfO8WNVuYwHiHQMqjcHJmW3aChB4IGTU0wPed03De2CEjsLzV3olR85 tRvvSzjCH3Fo9YAsgvmxX8Yl7dQ9Pw0Jkbw6w7MLxozsPlP8/7KMaRjyA1DpxaUfRw5Q lDZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688145209; x=1690737209; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:sender:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=oY39kLmMdN1qLTp2yIK6E0Or74qH37Ous2+n6jiNZEU=; b=YN7x2kuD6URXplLeu5+MSn4w33q7ZmNO/Bn7ezDcGIbQAvxp7ujc1XmMnfNyFzShyx kdC506YWFh/FBse/UDEimF9mgNaC2SsEydIqayFC/pdhG2X/KDdVp23SrUFQbNA2+WuL 8uJfcjsFcn2CAs/2iP1WC2WgBrYIX4PNWWENGKtvpe3CQXAFeW0Ufk4BJf1ED7yjP1VI kYC4LfYcXjC0zB27pccI7wPwd7PFBgCy3jcqZM4hpDK/1h7XmkqdLZlVdMZ1g2t2OzBr GkyzjtLXkZCW05uK6usGWLk28OQe0jBXi90k93AnAB2fzxiZVHW2IxiN+N1heyzLsKfw Y5jQ== X-Gm-Message-State: AC+VfDzdvwZdMjgfkBn2pp3vL8sQcEks1aet8G+eYOHD8/uKi4nlCjVG xK2wsZaj0M1oUzu3Gr6UBr0= X-Google-Smtp-Source: ACHHUZ4+frIOG9KC1gq4Aw+RESh2Q4awzLvS5vFrZPbMc2RjZHxSFvCK4DRLO0Ip31AslR6EKFp1mQ== X-Received: by 2002:a05:6512:1303:b0:4fb:74d8:c379 with SMTP id x3-20020a056512130300b004fb74d8c379mr2327890lfu.21.1688145208436; Fri, 30 Jun 2023 10:13:28 -0700 (PDT) Original-Received: from smtpclient.apple (c188-150-165-235.bredband.tele2.se. [188.150.165.235]) by smtp.gmail.com with ESMTPSA id n10-20020a19550a000000b004fb844a03c7sm1548469lfe.186.2023.06.30.10.13.27 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 30 Jun 2023 10:13:28 -0700 (PDT) In-Reply-To: <86cz1ezqou.fsf@mail.linkov.net> X-Mailer: Apple Mail (2.3654.120.0.1.15) 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:264325 Archived-At: --Apple-Mail=_1259380C-F890-4C05-BC96-D7D046306F2A Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii 29 juni 2023 kl. 09.13 skrev Juri Linkov : > I don't know if this can be closed now, since a new option for > duplicate-dwim could be created here as well. Indeed, and here it is. It also fixes a bug when duplicating some = rectangles, which arose from changes in Emacs 29. There is only a single variable for both contiguous and rectangular = regions; maybe we should have them separate -- not sure. Since this is intended for emacs-29, I'm posting it here for approval = first. --Apple-Mail=_1259380C-F890-4C05-BC96-D7D046306F2A Content-Disposition: attachment; filename=0001-Add-duplicate-region-final-position-bug-64185.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0001-Add-duplicate-region-final-position-bug-64185.patch" Content-Transfer-Encoding: quoted-printable =46rom=20c7051500cbfda75a2a218c323da3715cbf7263cc=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20=3D?UTF-8?q?Mattias=3D20Engdeg=3DC3=3DA5rd?=3D=20= =0ADate:=20Fri,=2030=20Jun=202023=2018:34:10=20+0200=0A= Subject:=20[PATCH]=20Add=20duplicate-region-final-position=20(bug#64185)=0A= =0A*=20lisp/misc.el=20(duplicate-region-final-position):=20New=20= defcustom.=0A(duplicate-dwim):=20Use=20it.=0A*=20lisp/rect.el=20= (rectangle--duplicate-right):=20Add=20displacement=0Aargument.=20=20= Adjust=20for=20changes=20in=20Emacs=2029.=0A*=20test/lisp/misc-tests.el=20= (misc--duplicate-dwim):=0AExtend=20test.=0A---=0A=20lisp/misc.el=20=20=20= =20=20=20=20=20=20=20=20=20|=2037=20+++++++++++++---=0A=20lisp/rect.el=20= =20=20=20=20=20=20=20=20=20=20=20|=2025=20+++++++----=0A=20= test/lisp/misc-tests.el=20|=2097=20= +++++++++++++++++++++++++++--------------=0A=203=20files=20changed,=20= 112=20insertions(+),=2047=20deletions(-)=0A=0Adiff=20--git=20= a/lisp/misc.el=20b/lisp/misc.el=0Aindex=2052df33911f7..c50eec9156e=20= 100644=0A---=20a/lisp/misc.el=0A+++=20b/lisp/misc.el=0A@@=20-100,7=20= +100,18=20@@=20duplicate-line=0A=20=20=20=20=20=20=20(forward-line=20= duplicate-line-final-position)=0A=20=20=20=20=20=20=20(move-to-column=20= col))))=0A=20=0A-(declare-function=20rectangle--duplicate-right=20"rect"=20= (n))=0A+(defcustom=20duplicate-region-final-position=200=0A+=20=20"Where=20= the=20region=20ends=20up=20after=20duplicating=20a=20region=20with=20= `duplicate-dwim'.=0A+When=200,=20leave=20the=20region=20in=20place.=0A= +When=201,=20put=20the=20region=20around=20the=20first=20copy.=0A+When=20= -1,=20put=20the=20region=20around=20the=20last=20copy."=0A+=20=20:type=20= '(choice=20(const=20:tag=20"Leave=20region=20in=20place"=200)=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(const=20:tag=20"Put=20region=20= around=20first=20copy"=201)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(const=20:tag=20"Put=20region=20around=20last=20copy"=20-1))=0A= +=20=20:group=20'editing=0A+=20=20:version=20"29.1")=0A+=0A= +(declare-function=20rectangle--duplicate-right=20"rect"=20(n=20= displacement))=0A=20=0A=20;;=20`duplicate-dwim'=20preserves=20an=20= active=20region=20and=20changes=20the=20buffer=0A=20;;=20outside=20of=20= it:=20disregard=20the=20region=20when=20immediately=20undoing=20the=0A@@=20= -113,25=20+124,41=20@@=20duplicate-dwim=0A=20If=20the=20region=20is=20= inactive,=20duplicate=20the=20current=20line=20(like=20= `duplicate-line').=0A=20Otherwise,=20duplicate=20the=20region,=20which=20= remains=20active=20afterwards.=0A=20If=20the=20region=20is=20= rectangular,=20duplicate=20on=20its=20right-hand=20side.=0A= -Interactively,=20N=20is=20the=20prefix=20numeric=20argument,=20and=20= defaults=20to=201."=0A+Interactively,=20N=20is=20the=20prefix=20numeric=20= argument,=20and=20defaults=20to=201.=0A+The=20variables=20= `duplicate-line-final-position'=20and=0A= +`duplicate-region-final-position'=20control=20the=20position=20of=20= point=0A+and=20the=20region=20after=20the=20duplication."=0A=20=20=20= (interactive=20"p")=0A=20=20=20(unless=20n=0A=20=20=20=20=20(setq=20n=20= 1))=0A=20=20=20(cond=0A+=20=20=20((<=3D=20n=200)=20nil)=0A=20=20=20=20;;=20= Duplicate=20rectangle.=0A=20=20=20=20((bound-and-true-p=20= rectangle-mark-mode)=0A-=20=20=20=20(rectangle--duplicate-right=20n)=0A+=20= =20=20=20(rectangle--duplicate-right=20n=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20= (<=20duplicate-region-final-position=200)=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20n=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20duplicate-region-final-position))=0A=20= =20=20=20=20(setq=20deactivate-mark=20nil))=0A=20=0A=20=20=20=20;;=20= Duplicate=20(contiguous)=20region.=0A=20=20=20=20((use-region-p)=0A=20=20= =20=20=20(let*=20((beg=20(region-beginning))=0A=20=20=20=20=20=20=20=20=20= =20=20=20(end=20(region-end))=0A-=20=20=20=20=20=20=20=20=20=20=20(text=20= (buffer-substring=20beg=20end)))=0A+=20=20=20=20=20=20=20=20=20=20=20= (text=20(buffer-substring=20beg=20end))=0A+=20=20=20=20=20=20=20=20=20=20= =20(pt=20(point))=0A+=20=20=20=20=20=20=20=20=20=20=20(mk=20(mark)))=0A=20= =20=20=20=20=20=20(save-excursion=0A=20=20=20=20=20=20=20=20=20= (goto-char=20end)=0A=20=20=20=20=20=20=20=20=20(dotimes=20(_=20n)=0A-=20=20= =20=20=20=20=20=20=20=20(insert=20text))))=0A+=20=20=20=20=20=20=20=20=20= =20(insert=20text)))=0A+=20=20=20=20=20=20(let*=20((displace=20(if=20(<=20= duplicate-region-final-position=200)=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20n=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= duplicate-region-final-position))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20(d=20(*=20displace=20(-=20end=20beg))))=0A+=20=20=20=20=20=20=20=20= (unless=20(zerop=20d)=0A+=20=20=20=20=20=20=20=20=20=20(push-mark=20(+=20= mk=20d))=0A+=20=20=20=20=20=20=20=20=20=20(goto-char=20(+=20pt=20d)))))=0A= =20=20=20=20=20(setq=20deactivate-mark=20nil))=0A=20=0A=20=20=20=20;;=20= Duplicate=20line.=0Adiff=20--git=20a/lisp/rect.el=20b/lisp/rect.el=0A= index=205ff821abb3f..8dc188b1de0=20100644=0A---=20a/lisp/rect.el=0A+++=20= b/lisp/rect.el=0A@@=20-930,8=20+930,9=20@@=20= rectangle--unhighlight-for-redisplay=0A=20=20=20=20=20(mapc=20= #'delete-overlay=20(nthcdr=205=20rol))=0A=20=20=20=20=20(setcar=20(cdr=20= rol)=20nil)))=0A=20=0A-(defun=20rectangle--duplicate-right=20(n)=0A-=20=20= "Duplicate=20the=20rectangular=20region=20N=20times=20on=20the=20= right-hand=20side."=0A+(defun=20rectangle--duplicate-right=20(n=20= displacement)=0A+=20=20"Duplicate=20the=20rectangular=20region=20N=20= times=20on=20the=20right-hand=20side.=0A+Leave=20the=20region=20moved=20= DISPLACEMENT=20region-wide=20steps=20to=20the=20right."=0A=20=20=20(let=20= ((cols=20(rectangle--pos-cols=20(point)=20(mark))))=0A=20=20=20=20=20= (apply-on-rectangle=0A=20=20=20=20=20=20(lambda=20(startcol=20endcol)=0A= @@=20-940,16=20+941,22=20@@=20rectangle--duplicate-right=0A=20=20=20=20=20= =20=20=20=20=20(move-to-column=20endcol=20t)=0A=20=20=20=20=20=20=20=20=20= =20(dotimes=20(_=20n)=0A=20=20=20=20=20=20=20=20=20=20=20=20(insert=20= (cadr=20lines)))))=0A-=20=20=20=20=20(region-beginning)=20(region-end))=0A= -=20=20=20=20;;=20Recompute=20the=20rectangle=20state;=20no=20crutches=20= should=20be=20needed=20now.=0A-=20=20=20=20(let=20((p=20(point))=0A-=20=20= =20=20=20=20=20=20=20=20(m=20(mark)))=0A+=20=20=20=20=20(min=20(point)=20= (mark))=0A+=20=20=20=20=20(max=20(point)=20(mark)))=0A+=20=20=20=20;;=20= Recompute=20the=20rectangle=20state.=0A+=20=20=20=20(let*=20((p=20= (point))=0A+=20=20=20=20=20=20=20=20=20=20=20(m=20(mark))=0A+=20=20=20=20= =20=20=20=20=20=20=20(point-col=20(car=20cols))=0A+=20=20=20=20=20=20=20=20= =20=20=20(mark-col=20(cdr=20cols))=0A+=20=20=20=20=20=20=20=20=20=20=20= (d=20(*=20displacement=20(abs=20(-=20point-col=20mark-col)))))=0A=20=20=20= =20=20=20=20(rectangle--reset-crutches)=0A=20=20=20=20=20=20=20= (goto-char=20m)=0A-=20=20=20=20=20=20(move-to-column=20(cdr=20cols)=20t)=0A= -=20=20=20=20=20=20(set-mark=20(point))=0A+=20=20=20=20=20=20= (move-to-column=20(+=20mark-col=20d)=20t)=0A+=20=20=20=20=20=20(if=20(=3D=20= d=200)=0A+=20=20=20=20=20=20=20=20=20=20(set-mark=20(point))=0A+=20=20=20= =20=20=20=20=20(push-mark=20(point)))=0A=20=20=20=20=20=20=20(goto-char=20= p)=0A-=20=20=20=20=20=20(move-to-column=20(car=20cols)=20t))))=0A+=20=20=20= =20=20=20(move-to-column=20(+=20point-col=20d)=20t))))=0A=20=0A=20= (provide=20'rect)=0A=20=0Adiff=20--git=20a/test/lisp/misc-tests.el=20= b/test/lisp/misc-tests.el=0Aindex=20ea27ea1653b..b9bafe4bd11=20100644=0A= ---=20a/test/lisp/misc-tests.el=0A+++=20b/test/lisp/misc-tests.el=0A@@=20= -24,6=20+24,7=20@@=0A=20;;;=20Code:=0A=20=0A=20(require=20'ert)=0A= +(require=20'misc)=0A=20=0A=20(defmacro=20with-misc-test=20(original=20= result=20&rest=20body)=0A=20=20=20(declare=20(indent=202))=0A@@=20= -113,40=20+114,70=20@@=20misc--duplicate-line=0A=20(require=20'rect)=0A=20= =0A=20(ert-deftest=20misc--duplicate-dwim=20()=0A-=20=20;;=20Duplicate=20= a=20line.=0A-=20=20(with-temp-buffer=0A-=20=20=20=20(insert=20= "abc\ndefg\nh\n")=0A-=20=20=20=20(goto-char=207)=0A-=20=20=20=20= (duplicate-dwim=202)=0A-=20=20=20=20(should=20(equal=20(buffer-string)=20= "abc\ndefg\ndefg\ndefg\nh\n"))=0A-=20=20=20=20(should=20(equal=20(point)=20= 7)))=0A+=20=20(let=20((duplicate-line-final-position=200)=0A+=20=20=20=20= =20=20=20=20(duplicate-region-final-position=200))=0A+=20=20=20=20;;=20= Duplicate=20a=20line.=0A+=20=20=20=20(dolist=20(final-pos=20'(0=20-1=20= 1))=0A+=20=20=20=20=20=20(ert-info=20((prin1-to-string=20final-pos)=20= :prefix=20"final-pos:=20")=0A+=20=20=20=20=20=20=20=20(with-temp-buffer=0A= +=20=20=20=20=20=20=20=20=20=20(insert=20"abc\ndefg\nh\n")=0A+=20=20=20=20= =20=20=20=20=20=20(goto-char=207)=0A+=20=20=20=20=20=20=20=20=20=20(let=20= ((duplicate-line-final-position=20final-pos))=0A+=20=20=20=20=20=20=20=20= =20=20=20=20(duplicate-dwim=203))=0A+=20=20=20=20=20=20=20=20=20=20= (should=20(equal=20(buffer-string)=20= "abc\ndefg\ndefg\ndefg\ndefg\nh\n"))=0A+=20=20=20=20=20=20=20=20=20=20= (let=20((delta=20(*=205=20(if=20(<=20final-pos=200)=203=20final-pos))))=0A= +=20=20=20=20=20=20=20=20=20=20=20=20(should=20(equal=20(point)=20(+=207=20= delta)))))))=0A+=0A+=20=20=20=20;;=20Duplicate=20a=20region.=0A+=20=20=20= =20(dolist=20(final-pos=20'(0=20-1=201))=0A+=20=20=20=20=20=20(ert-info=20= ((prin1-to-string=20final-pos)=20:prefix=20"final-pos:=20")=0A+=20=20=20=20= =20=20=20=20(with-temp-buffer=0A+=20=20=20=20=20=20=20=20=20=20(insert=20= "abCDEFghi")=0A+=20=20=20=20=20=20=20=20=20=20(set-mark=203)=0A+=20=20=20= =20=20=20=20=20=20=20(goto-char=207)=0A+=20=20=20=20=20=20=20=20=20=20= (transient-mark-mode)=0A+=20=20=20=20=20=20=20=20=20=20(should=20= (use-region-p))=0A+=20=20=20=20=20=20=20=20=20=20(let=20= ((duplicate-region-final-position=20final-pos))=0A+=20=20=20=20=20=20=20=20= =20=20=20=20(duplicate-dwim=203))=0A+=20=20=20=20=20=20=20=20=20=20= (should=20(equal=20(buffer-string)=20"abCDEFCDEFCDEFCDEFghi"))=0A+=20=20=20= =20=20=20=20=20=20=20(should=20(region-active-p))=0A+=20=20=20=20=20=20=20= =20=20=20(let=20((delta=20(*=204=20(if=20(<=20final-pos=200)=203=20= final-pos))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20(should=20(equal=20= (point)=20(+=207=20delta)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= (should=20(equal=20(mark)=20(+=203=20delta)))))))=0A+=0A+=20=20=20=20;;=20= Duplicate=20a=20rectangular=20region=20(sparse).=0A+=20=20=20=20= (with-temp-buffer=0A+=20=20=20=20=20=20(insert=20= "x\n>a\n>bcde\n>fg\nyz\n")=0A+=20=20=20=20=20=20(goto-char=204)=0A+=20=20= =20=20=20=20(rectangle-mark-mode)=0A+=20=20=20=20=20=20(goto-char=2015)=0A= +=20=20=20=20=20=20(rectangle-forward-char=201)=0A+=20=20=20=20=20=20= (duplicate-dwim)=0A+=20=20=20=20=20=20(should=20(equal=20(buffer-string)=20= "x\n>a=20=20a=20=20\n>bcdbcde\n>fg=20fg=20\nyz\n"))=0A+=20=20=20=20=20=20= (should=20(equal=20(point)=2024))=0A+=20=20=20=20=20=20(should=20= (region-active-p))=0A+=20=20=20=20=20=20(should=20rectangle-mark-mode)=0A= +=20=20=20=20=20=20(should=20(equal=20(mark)=204)))=0A+=0A+=20=20=20=20= ;;=20Idem=20(dense).=0A+=20=20=20=20(dolist=20(final-pos=20'(0=20-1=20= 1))=0A+=20=20=20=20=20=20(ert-info=20((prin1-to-string=20final-pos)=20= :prefix=20"final-pos:=20")=0A+=20=20=20=20=20=20=20=20(with-temp-buffer=0A= +=20=20=20=20=20=20=20=20=20=20(insert=20"aBCd\neFGh\niJKl\n")=0A+=20=20=20= =20=20=20=20=20=20=20(goto-char=202)=0A+=20=20=20=20=20=20=20=20=20=20= (rectangle-mark-mode)=0A+=20=20=20=20=20=20=20=20=20=20(goto-char=2014)=0A= +=20=20=20=20=20=20=20=20=20=20(let=20((duplicate-region-final-position=20= final-pos))=0A+=20=20=20=20=20=20=20=20=20=20=20=20(duplicate-dwim=203))=0A= +=20=20=20=20=20=20=20=20=20=20(should=20(equal=20(buffer-string)=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= "aBCBCBCBCd\neFGFGFGFGh\niJKJKJKJKl\n"))=0A+=20=20=20=20=20=20=20=20=20=20= (should=20(region-active-p))=0A+=20=20=20=20=20=20=20=20=20=20(should=20= rectangle-mark-mode)=0A+=20=20=20=20=20=20=20=20=20=20(let=20((hdelta=20= (*=202=20(if=20(<=20final-pos=200)=203=20final-pos)))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(vdelta=2012))=0A+=20=20=20=20=20=20=20=20=20= =20=20=20(should=20(equal=20(point)=20(+=2014=20vdelta=20hdelta)))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20(should=20(equal=20(mark)=20(+=202=20= hdelta)))))))))=0A=20=0A-=20=20;;=20Duplicate=20a=20region.=0A-=20=20= (with-temp-buffer=0A-=20=20=20=20(insert=20"abc\ndef\n")=0A-=20=20=20=20= (set-mark=202)=0A-=20=20=20=20(goto-char=207)=0A-=20=20=20=20= (transient-mark-mode)=0A-=20=20=20=20(should=20(use-region-p))=0A-=20=20=20= =20(duplicate-dwim)=0A-=20=20=20=20(should=20(equal=20(buffer-string)=20= "abc\ndebc\ndef\n"))=0A-=20=20=20=20(should=20(equal=20(point)=207))=0A-=20= =20=20=20(should=20(region-active-p))=0A-=20=20=20=20(should=20(equal=20= (mark)=202)))=0A-=0A-=20=20;;=20Duplicate=20a=20rectangular=20region.=0A= -=20=20(with-temp-buffer=0A-=20=20=20=20(insert=20= "x\n>a\n>bcde\n>fg\nyz\n")=0A-=20=20=20=20(goto-char=204)=0A-=20=20=20=20= (rectangle-mark-mode)=0A-=20=20=20=20(goto-char=2015)=0A-=20=20=20=20= (rectangle-forward-char=201)=0A-=20=20=20=20(duplicate-dwim)=0A-=20=20=20= =20(should=20(equal=20(buffer-string)=20"x\n>a=20=20a=20=20= \n>bcdbcde\n>fg=20fg=20\nyz\n"))=0A-=20=20=20=20(should=20(equal=20= (point)=2024))=0A-=20=20=20=20(should=20(region-active-p))=0A-=20=20=20=20= (should=20rectangle-mark-mode)=0A-=20=20=20=20(should=20(equal=20(mark)=20= 4))))=0A=20=0A=20(provide=20'misc-tests)=0A=20;;;=20misc-tests.el=20ends=20= here=0A--=20=0A2.32.0=20(Apple=20Git-132)=0A=0A= --Apple-Mail=_1259380C-F890-4C05-BC96-D7D046306F2A--