changeset 56433:a7600d0e7fdc

(cua--preserve-mark-commands): New defvar. Init to beginning-of-buffer and end-of-buffer. (cua--undo-push-mark): New defvar. (cua--pre-command-handler): Set inhibit-mark-movement if mark is already active and command is in cua--preserve-mark-commands. Also fix check for shift modifier on non-window systems. (cua--post-command-handler): Clear inhibit-mark-movement if set.
author Kim F. Storm <storm@cua.dk>
date Fri, 16 Jul 2004 10:42:26 +0000
parents af62749c9497
children a11286d6cf94
files lisp/emulation/cua-base.el
diffstat 1 files changed, 19 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/emulation/cua-base.el	Fri Jul 16 10:42:00 2004 +0000
+++ b/lisp/emulation/cua-base.el	Fri Jul 16 10:42:26 2004 +0000
@@ -974,6 +974,13 @@
 (defvar cua-movement-commands nil
   "User may add additional movement commands to this list.")
 
+(defvar cua--preserve-mark-commands
+  '(end-of-buffer beginning-of-buffer)
+  "List of movement commands that move the mark.
+CUA will preserve the previous mark position if a mark is already
+active before one of these commands is executed.")
+
+(defvar cua--undo-push-mark nil)
 
 ;;; Scrolling commands which does not signal errors at top/bottom
 ;;; of buffer at first key-press (instead moves to top/bottom
@@ -1062,8 +1069,15 @@
 	;; If rectangle is active, expand rectangle in specified direction and ignore the movement.
 	(if movement
 	    (cond
-	     ((memq 'shift (event-modifiers (aref (this-single-command-raw-keys) 0)))
-	      (unless mark-active
+	     ((memq 'shift (event-modifiers
+			    (aref (if window-system
+				      (this-single-command-raw-keys)
+				    (this-single-command-keys)) 0)))
+	      (if mark-active
+		  (if (and (memq this-command cua--preserve-mark-commands)
+			   (not inhibit-mark-movement))
+		      (setq cua--undo-push-mark t
+			    inhibit-mark-movement t))
 		(push-mark-command nil t))
 	      (setq cua--last-region-shifted t)
 	      (setq cua--explicit-region-start nil))
@@ -1110,6 +1124,9 @@
 (defun cua--post-command-handler ()
   (condition-case nil
       (progn
+	(when cua--undo-push-mark
+	  (setq cua--undo-push-mark nil
+		inhibit-mark-movement nil))
 	(when cua--global-mark-active
 	  (cua--global-mark-post-command))
 	(when (fboundp 'cua--rectangle-post-command)