* lisp/rect.el (rectangle-mark-mode): Activate mark even if

transient-mark-mode is off.
(rectangle--highlight-for-redisplay): Fix boundary condition when point
is > mark and at bolp.

Fixes: debbugs:16066
This commit is contained in:
Stefan Monnier 2013-12-08 02:32:01 -05:00
parent 6407822c66
commit 02033d491f
2 changed files with 74 additions and 65 deletions

View file

@ -7,6 +7,11 @@
2013-12-08 Stefan Monnier <monnier@iro.umontreal.ca>
* rect.el (rectangle-mark-mode): Activate mark even if
transient-mark-mode is off (bug#16066).
(rectangle--highlight-for-redisplay): Fix boundary condition when point
is > mark and at bolp.
* emulation/cua-rect.el (cua--rectangle-region-extract): New function.
(region-extract-function): Use it.
(cua-mouse-save-then-kill-rectangle): Use cua-copy-region.

View file

@ -443,7 +443,9 @@ with a prefix argument, prompt for START-AT and FORMAT."
Activates the region if needed. Only lasts until the region is deactivated."
nil nil nil
(when rectangle-mark-mode
(unless (region-active-p) (push-mark-command t))))
(unless (region-active-p)
(push-mark)
(activate-mark))))
(defun rectangle--extract-region (orig &optional delete)
(if (not rectangle-mark-mode)
@ -495,7 +497,7 @@ Activates the region if needed. Only lasts until the region is deactivated."
(leftcol (min ptcol markcol))
(rightcol (max ptcol markcol)))
(goto-char start)
(while (< (point) end)
(while
(let* ((mleft (move-to-column leftcol))
(left (point))
(mright (move-to-column rightcol))
@ -534,7 +536,7 @@ Activates the region if needed. Only lasts until the region is deactivated."
;; after this highlighted pseudo-text.
(put-text-property 0 1 'cursor t str)
(overlay-put ol 'after-string str)))
((and (> mright rightcol) ;`rightcol' is in the middle of a char.
((and (> mright rightcol) ;`rightcol's in the middle of a char.
(eq (char-before right) ?\t))
(setq right (1- right))
(move-overlay ol left right)
@ -542,7 +544,8 @@ Activates the region if needed. Only lasts until the region is deactivated."
(overlay-put ol 'after-string nil)
(goto-char right)
(let ((str (make-string
(- rightcol (max leftcol (current-column))) ?\s)))
(- rightcol (max leftcol (current-column)))
?\s)))
(put-text-property 0 (length str) 'face 'region str)
(when (= left right)
;; If cursor happens to be here, draw it *before* rather
@ -557,8 +560,9 @@ Activates the region if needed. Only lasts until the region is deactivated."
(concat (propertize " "
'face '(region (:height 0.2)))
(overlay-get ol 'after-string))))
(push ol nrol))
(forward-line 1))
(push ol nrol)
(and (zerop (forward-line 1))
(<= (point) end))))
(mapc #'delete-overlay old)
`(rectangle ,(buffer-chars-modified-tick) ,start ,end ,@nrol))))))