diff lisp/msw-select.el @ 280:7df0dd720c89 r21-0b38

Import from CVS: tag r21-0b38
author cvs
date Mon, 13 Aug 2007 10:32:22 +0200
parents 83b3d10dcba9
children 558f606b08ae
line wrap: on
line diff
--- a/lisp/msw-select.el	Mon Aug 13 10:31:30 2007 +0200
+++ b/lisp/msw-select.el	Mon Aug 13 10:32:22 2007 +0200
@@ -82,3 +82,55 @@
 ;;	    (setq zmacs-region-stays t)
 	    ))
       (error "there is no selection to cut or copy"))))
+
+(defvar mswindows-selection-owned-p nil
+  "Whether we have a selection or not. 
+MS-Windows has no concept of ownership; don't use this.")
+
+(defun mswindows-own-selection (data &optional type)
+  "Make an MS Windows selection of type TYPE and value DATA.
+The argument TYPE is ignored, and DATA specifies the contents.  
+DATA may be a string,
+a symbol, an integer (or a cons of two integers or list of two integers).
+
+The selection may also be a cons of two markers pointing to the same buffer,
+or an overlay.  In these cases, the selection is considered to be the text
+between the markers *at whatever time the selection is examined*.
+Thus, editing done in the buffer after you specify the selection
+can alter the effective value of the selection.
+
+The data may also be a vector of valid non-vector selection values.
+
+Interactively, the text of the region is used as the selection value."
+  (interactive (if (not current-prefix-arg)
+		   (list (read-string "Store text for pasting: "))
+		 (list (substring (region-beginning) (region-end)))))
+  (or (valid-simple-selection-p data)
+      (and (vectorp data)
+	   (let ((valid t)
+		 (i (1- (length data))))
+	     (while (>= i 0)
+	       (or (valid-simple-selection-p (aref data i))
+		   (setq valid nil))
+	       (setq i (1- i)))
+	     valid))
+      (signal 'error (list "invalid selection" data)))
+  (if data
+      (setq mswindows-selection-owned-p data)
+    (setq mswindows-selection-owned-p nil))
+  (setq primary-selection-extent
+	(select-make-extent-for-selection
+	 data primary-selection-extent))
+  (setq zmacs-region-stays t)
+  data)
+
+(defun mswindows-disown-selection (&optional secondary-p)
+  "Assuming we own the selection, disown it.  With an argument, discard the
+secondary selection instead of the primary selection."
+  (setq mswindows-selection-owned-p nil))
+
+(defun mswindows-selection-owner-p (&optional selection)
+  "Return t if current emacs process owns the given Selection.
+The arg is ignored."
+  (not (eq mswindows-selection-owned-p nil)))
+