diff lisp/select.el @ 416:ebe98a74bd68 r21-2-16

Import from CVS: tag r21-2-16
author cvs
date Mon, 13 Aug 2007 11:22:23 +0200
parents da8ed4261e83
children e804706bfb8c
line wrap: on
line diff
--- a/lisp/select.el	Mon Aug 13 11:21:40 2007 +0200
+++ b/lisp/select.el	Mon Aug 13 11:22:23 2007 +0200
@@ -40,6 +40,11 @@
 If a list is provided, the types are tried in sequence until
 there is a successful conversion.")
 
+(defvar selection-is-clipboard-p nil 
+  "Controls the selection's relationship to the clipboard.
+When non-nil, any operation that sets the primary selection will also
+set the clipboard.")
+
 (defun copy-primary-selection ()
   "Copy the selection to the Clipboard and the kill ring."
   (interactive)
@@ -74,7 +79,17 @@
   "Return the value of a Windows selection.
 The argument TYPE (default `PRIMARY') says which selection,
 and the argument DATA-TYPE (default `STRING', or `COMPOUND_TEXT' under Mule)
-says how to convert the data."
+says how to convert the data. If there is no selection an error is signalled."
+  (let ((text (get-selection-no-error type data-type)))
+    (when (not (stringp text))
+      (error "Selection is not a string: %S" text))
+    text))
+
+(defun get-selection-no-error (&optional type data-type)
+  "Return the value of a Windows selection.
+The argument TYPE (default `PRIMARY') says which selection,
+and the argument DATA-TYPE (default `STRING', or `COMPOUND_TEXT' under Mule)
+says how to convert the data. Returns NIL if there is no selection"
   (or type (setq type 'PRIMARY))
   (or data-type (setq data-type selected-text-type))
   (let ((text
@@ -88,8 +103,6 @@
 	   (get-selection-internal type data-type))))
     (when (and (consp text) (symbolp (car text)))
       (setq text (cdr text)))
-    (when (not (stringp text))
-      (error "Selection is not a string: %S" text))
     text))
 
 ;; FSFmacs calls this `x-set-selection', and reverses the
@@ -127,9 +140,12 @@
 	     valid))
       (signal 'error (list "invalid selection" data)))
   (or type (setq type 'PRIMARY))
-  (if data
-      (own-selection-internal type data)
-    (disown-selection-internal type))
+  (if (null data)
+      (disown-selection-internal type)
+    (own-selection-internal type data)
+    (when (and (eq type 'PRIMARY)
+	       selection-is-clipboard-p)
+      (own-selection-internal 'CLIPBOARD data)))
   (cond ((eq type 'PRIMARY)
 	 (setq primary-selection-extent
 	       (select-make-extent-for-selection