summaryrefslogtreecommitdiff
path: root/lisp/register.el
diff options
context:
space:
mode:
authorChong Yidong <cyd@gnu.org>2012-07-29 12:45:48 +0800
committerChong Yidong <cyd@gnu.org>2012-07-29 12:45:48 +0800
commit2549c068e14ab1ddfb1f1ea38ca7736c16db7296 (patch)
treedd718a18c5ea030f16f373e4020049634274ea88 /lisp/register.el
parentd8efda90aa36b6bea5cca9bd6765cbb76571d933 (diff)
downloademacs-2549c068e14ab1ddfb1f1ea38ca7736c16db7296.tar.gz
Deactivate the mark on more copy operations, and indicate the copied region.
* lisp/simple.el (indicate-copied-region): New function. (kill-ring-save): Split off from here. * lisp/rect.el (copy-rectangle-as-kill): Call indicate-copied-region. (kill-rectangle): Set deactivate-mark to t on read-only error. * lisp/register.el (copy-to-register, copy-rectangle-to-register): Deactivate the mark, and use indicate-copied-region. (append-to-register, prepend-to-register): Call Fixes: debbugs:10056
Diffstat (limited to 'lisp/register.el')
-rw-r--r--lisp/register.el29
1 files changed, 22 insertions, 7 deletions
diff --git a/lisp/register.el b/lisp/register.el
index 52c236e49be..2816c9831de 100644
--- a/lisp/register.el
+++ b/lisp/register.el
@@ -336,7 +336,11 @@ Called from program, takes four args: REGISTER, START, END and DELETE-FLAG.
START and END are buffer positions indicating what to copy."
(interactive "cCopy to register: \nr\nP")
(set-register register (filter-buffer-substring start end))
- (if delete-flag (delete-region start end)))
+ (setq deactivate-mark t)
+ (cond (delete-flag
+ (delete-region start end))
+ ((called-interactively-p 'interactive)
+ (indicate-copied-region))))
(defun append-to-register (register start end &optional delete-flag)
"Append region to text in register REGISTER.
@@ -350,7 +354,10 @@ START and END are buffer positions indicating what to append."
register (cond ((not reg) text)
((stringp reg) (concat reg text))
(t (error "Register does not contain text")))))
- (if delete-flag (delete-region start end)))
+ (cond (delete-flag
+ (delete-region start end))
+ ((called-interactively-p 'interactive)
+ (indicate-copied-region))))
(defun prepend-to-register (register start end &optional delete-flag)
"Prepend region to text in register REGISTER.
@@ -364,7 +371,10 @@ START and END are buffer positions indicating what to prepend."
register (cond ((not reg) text)
((stringp reg) (concat text reg))
(t (error "Register does not contain text")))))
- (if delete-flag (delete-region start end)))
+ (cond (delete-flag
+ (delete-region start end))
+ ((called-interactively-p 'interactive)
+ (indicate-copied-region))))
(defun copy-rectangle-to-register (register start end &optional delete-flag)
"Copy rectangular region into register REGISTER.
@@ -374,10 +384,15 @@ To insert this register in the buffer, use \\[insert-register].
Called from a program, takes four args: REGISTER, START, END and DELETE-FLAG.
START and END are buffer positions giving two corners of rectangle."
(interactive "cCopy rectangle to register: \nr\nP")
- (set-register register
- (if delete-flag
- (delete-extract-rectangle start end)
- (extract-rectangle start end))))
+ (let ((rectangle (if delete-flag
+ (delete-extract-rectangle start end)
+ (extract-rectangle start end))))
+ (set-register register rectangle)
+ (when (and (null delete-flag)
+ (called-interactively-p 'interactive))
+ (setq deactivate-mark t)
+ (indicate-copied-region (length (car rectangle))))))
+
(provide 'register)
;;; register.el ends here