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:
parent
7319f5e078
commit
3a8222e700
1 changed files with 22 additions and 2 deletions
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
|
||||
|
|
Loading…
Reference in a new issue