summaryrefslogtreecommitdiff
path: root/lisp/emulation/cua-rect.el
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2013-12-08 01:24:54 -0500
committerStefan Monnier <monnier@iro.umontreal.ca>2013-12-08 01:24:54 -0500
commit6f8dfccfe3ec3e1137e712b49da12c8a9ab4bc85 (patch)
treeebe79741b1a81433ff73bd666e07626c1982bfbb /lisp/emulation/cua-rect.el
parent95b3d095f8791c9d0a2007f43fa4731401c64c87 (diff)
downloademacs-6f8dfccfe3ec3e1137e712b49da12c8a9ab4bc85.tar.gz
Use delete-selection-mode in cua-mode.
* lisp/emulation/cua-base.el (cua--prefix-copy-handler) (cua--prefix-cut-handler): Rely on region-extract-function rather than checking cua--rectangle. (cua-delete-region): Use region-extract-function. (cua-replace-region): Delete function. (cua-copy-region, cua-cut-region): Obey region-extract-function. (cua--pre-command-handler-1): Don't do the delete-selection thing. (cua--self-insert-char-p): Ignore `self-insert-iso'. (cua--init-keymaps): Don't remap delete-selection commands. (cua-mode): Use delete-selection-mode instead of rolling our own. * lisp/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. (cua-copy-rectangle, cua-cut-rectangle, cua-delete-rectangle): Delete functions. (cua--init-rectangles): Don't re-remap copy-region-as-kill, kill-ring-save, kill-region, delete-char, delete-forward-char. Ignore self-insert-iso. * lisp/menu-bar.el (clipboard-kill-ring-save, clipboard-kill-region): Obey region-extract-function. * lisp/emulation/cua-gmrk.el (cua--init-global-mark): Ignore `self-insert-iso'. Fixes: debbugs:16085
Diffstat (limited to 'lisp/emulation/cua-rect.el')
-rw-r--r--lisp/emulation/cua-rect.el58
1 files changed, 25 insertions, 33 deletions
diff --git a/lisp/emulation/cua-rect.el b/lisp/emulation/cua-rect.el
index 16d109c6360..fba80033281 100644
--- a/lisp/emulation/cua-rect.el
+++ b/lisp/emulation/cua-rect.el
@@ -461,7 +461,7 @@ If command is repeated at same position, delete the rectangle."
(cua--deactivate))
(cua-mouse-resize-rectangle event)
(let ((cua-keep-region-after-copy t))
- (cua-copy-rectangle arg)
+ (cua-copy-region arg)
(setq cua--mouse-last-pos (cons (point) cua--last-killed-rectangle)))))
(defun cua--mouse-ignore (_event)
@@ -945,32 +945,6 @@ With prefix argument, toggle restriction."
(interactive)
(cua--rectangle-move 'right))
-(defun cua-copy-rectangle (arg)
- (interactive "P")
- (setq arg (cua--prefix-arg arg))
- (cua--copy-rectangle-as-kill arg)
- (if cua-keep-region-after-copy
- (cua--keep-active)
- (cua--deactivate)))
-
-(defun cua-cut-rectangle (arg)
- (interactive "P")
- (if buffer-read-only
- (cua-copy-rectangle arg)
- (setq arg (cua--prefix-arg arg))
- (goto-char (min (mark) (point)))
- (cua--copy-rectangle-as-kill arg)
- (cua--delete-rectangle))
- (cua--deactivate))
-
-(defun cua-delete-rectangle ()
- (interactive)
- (goto-char (min (point) (mark)))
- (if cua-delete-copy-to-register-0
- (set-register ?0 (cua--extract-rectangle)))
- (cua--delete-rectangle)
- (cua--deactivate))
-
(defun cua-rotate-rectangle ()
(interactive)
(cua--rectangle-corner (if (= (cua--rectangle-left) (cua--rectangle-right)) 0 1))
@@ -1402,6 +1376,30 @@ With prefix arg, indent to that column."
(goto-char cua--rect-undo-set-point)
(setq cua--rect-undo-set-point nil)))
+(add-function :around region-extract-function
+ #'cua--rectangle-region-extract)
+
+(defun cua--rectangle-region-extract (orig &optional delete)
+ (cond
+ ((not cua--rectangle) (funcall orig delete))
+ ((eq delete 'delete-only) (cua--delete-rectangle))
+ (t
+ (let* ((strs (cua--extract-rectangle))
+ (str (mapconcat #'identity strs "\n")))
+ (if delete (cua--delete-rectangle))
+ (setq killed-rectangle strs)
+ (setq cua--last-killed-rectangle
+ (cons (and kill-ring (car kill-ring)) killed-rectangle))
+ (when (eq last-command 'kill-region)
+ ;; Try to prevent kill-region from appending this to some
+ ;; earlier element.
+ (setq last-command 'kill-region-dont-append))
+ (when strs
+ (put-text-property 0 (length str) 'yank-handler
+ `(rectangle--insert-for-yank ,strs t)
+ str)
+ str)))))
+
;;; Initialization
(defun cua--rect-M/H-key (key cmd)
@@ -1414,11 +1412,6 @@ With prefix arg, indent to that column."
(cua--rect-M/H-key ?\s 'cua-clear-rectangle-mark)
(cua--M/H-key cua--region-keymap ?\s 'cua-toggle-rectangle-mark))
- (define-key cua--rectangle-keymap [remap copy-region-as-kill] 'cua-copy-rectangle)
- (define-key cua--rectangle-keymap [remap kill-ring-save] 'cua-copy-rectangle)
- (define-key cua--rectangle-keymap [remap kill-region] 'cua-cut-rectangle)
- (define-key cua--rectangle-keymap [remap delete-char] 'cua-delete-rectangle)
- (define-key cua--rectangle-keymap [remap delete-forward-char] 'cua-delete-rectangle)
(define-key cua--rectangle-keymap [remap set-mark-command] 'cua-toggle-rectangle-mark)
(define-key cua--rectangle-keymap [remap forward-char] 'cua-resize-rectangle-right)
@@ -1440,7 +1433,6 @@ With prefix arg, indent to that column."
(define-key cua--rectangle-keymap [remap backward-delete-char] 'cua-delete-char-rectangle)
(define-key cua--rectangle-keymap [remap backward-delete-char-untabify] 'cua-delete-char-rectangle)
(define-key cua--rectangle-keymap [remap self-insert-command] 'cua-insert-char-rectangle)
- (define-key cua--rectangle-keymap [remap self-insert-iso] 'cua-insert-char-rectangle)
;; Catch self-inserting characters which are "stolen" by other modes
(define-key cua--rectangle-keymap [t]