Faster region-beginning and region-end for rectangle selections
* lisp/rect.el (rectangle--region-beginning, rectangle--region-end): Make these run in O(1), not linear, time and space.
This commit is contained in:
24
lisp/rect.el
24
lisp/rect.el
@@ -766,7 +766,17 @@ Ignores `line-move-visual'."
|
||||
((not rectangle-mark-mode)
|
||||
(funcall orig))
|
||||
(t
|
||||
(apply #'min (mapcar #'car (region-bounds))))))
|
||||
(save-excursion
|
||||
(let* ((pt (point))
|
||||
(mk (mark))
|
||||
(start (min pt mk))
|
||||
(end (max pt mk))
|
||||
(cols (rectangle--pos-cols start end))
|
||||
(startcol (car cols))
|
||||
(endcol (cdr cols)))
|
||||
(goto-char start)
|
||||
(move-to-column (min startcol endcol))
|
||||
(point))))))
|
||||
|
||||
(defun rectangle--region-end (orig)
|
||||
"Like `region-end' but supports rectangular regions."
|
||||
@@ -774,7 +784,17 @@ Ignores `line-move-visual'."
|
||||
((not rectangle-mark-mode)
|
||||
(funcall orig))
|
||||
(t
|
||||
(apply #'max (mapcar #'cdr (region-bounds))))))
|
||||
(save-excursion
|
||||
(let* ((pt (point))
|
||||
(mk (mark))
|
||||
(start (min pt mk))
|
||||
(end (max pt mk))
|
||||
(cols (rectangle--pos-cols start end))
|
||||
(startcol (car cols))
|
||||
(endcol (cdr cols)))
|
||||
(goto-char end)
|
||||
(move-to-column (max startcol endcol))
|
||||
(point))))))
|
||||
|
||||
(defun rectangle--extract-region (orig &optional delete)
|
||||
(cond
|
||||
|
||||
Reference in New Issue
Block a user