[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#55234: 28.1; replace-string in rectangle regio
From: |
Juri Linkov |
Subject: |
bug#55234: 28.1; replace-string in rectangle regio |
Date: |
Fri, 03 Jun 2022 21:09:31 +0300 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (x86_64-pc-linux-gnu) |
>>>> (mapcar 'car (region-bounds))
>>>
>>> Sounds reasonable.
>>
>> Then here is the implementation that is more less in line with
>> how other rectangular functions are implemented:
>>
>> diff --git a/lisp/rect.el b/lisp/rect.el
>> +(advice-add 'region-beginning :around #'rectangle--region-beginning)
>
> This causes a strange compilation error:
> Symbol's function definition is void: easy-menu-define
This patch avoids such problem:
diff --git a/lisp/rect.el b/lisp/rect.el
index 15d636f074..334c6f59fd 100644
--- a/lisp/rect.el
+++ b/lisp/rect.el
@@ -656,6 +656,8 @@ rectangle-mark-mode
:lighter nil
(rectangle--reset-crutches)
(when rectangle-mark-mode
+ (advice-add 'region-beginning :around #'rectangle--region-beginning)
+ (advice-add 'region-end :around #'rectangle--region-end)
(add-hook 'deactivate-mark-hook
(lambda () (rectangle-mark-mode -1)))
(unless (region-active-p)
@@ -754,17 +756,38 @@ rectangle-previous-line
(rectangle--col-pos col 'point)))
+(defun rectangle--region-beginning (orig)
+ "Like `region-beginning' but supports rectangular regions."
+ (cond
+ ((not rectangle-mark-mode)
+ (funcall orig))
+ (t
+ (caar (region-bounds)))))
+
+(defun rectangle--region-end (orig)
+ "Like `region-end' but supports rectangular regions."
+ (cond
+ ((not rectangle-mark-mode)
+ (funcall orig))
+ (t
+ (cdar (last (region-bounds))))))
+
(defun rectangle--extract-region (orig &optional delete)
(cond
((not rectangle-mark-mode)
(funcall orig delete))
((eq delete 'bounds)
- (extract-rectangle-bounds (region-beginning) (region-end)))
+ (extract-rectangle-bounds
+ ;; Avoid recursive calls
+ (let (rectangle-mark-mode) (region-beginning))
+ (let (rectangle-mark-mode) (region-end))))
(t
(let* ((strs (funcall (if delete
#'delete-extract-rectangle
#'extract-rectangle)
- (region-beginning) (region-end)))
+ ;; Avoid recursive calls
+ (let (rectangle-mark-mode) (region-beginning))
+ (let (rectangle-mark-mode) (region-end))))
(str (mapconcat #'identity strs "\n")))
(when (eq last-command 'kill-region)
;; Try to prevent kill-region from appending this to some
- bug#55234: 28.1; replace-string in rectangle regio, Michael Heerdegen, 2022/06/01
- bug#55234: 28.1; replace-string in rectangle regio, Juri Linkov, 2022/06/01
- bug#55234: 28.1; replace-string in rectangle regio, Michael Heerdegen, 2022/06/02
- bug#55234: 28.1; replace-string in rectangle regio, Juri Linkov, 2022/06/02
- bug#55234: 28.1; replace-string in rectangle regio, Juri Linkov, 2022/06/03
- bug#55234: 28.1; replace-string in rectangle regio,
Juri Linkov <=
- bug#55234: 28.1; replace-string in rectangle regio, Michael Heerdegen, 2022/06/04
- bug#55234: 28.1; replace-string in rectangle regio, Juri Linkov, 2022/06/06
- bug#55234: 28.1; replace-string in rectangle regio, Michael Heerdegen, 2022/06/09
- bug#55234: 28.1; replace-string in rectangle regio, Juri Linkov, 2022/06/09
- bug#55234: 28.1; replace-string in rectangle regio, Juri Linkov, 2022/06/02
- bug#55234: 28.1; replace-string in rectangle regio, Michael Heerdegen, 2022/06/03