(insert-char-data): Change order.
[chise/xemacs-chise.git] / lisp / select.el
index db01d6a..f21d440 100644 (file)
@@ -40,6 +40,11 @@ COMPOUND_TEXT and STRING are the most commonly used data types.
 If a list is provided, the types are tried in sequence until
 there is a successful conversion.")
 
 If a list is provided, the types are tried in sequence until
 there is a successful conversion.")
 
+(defvar selection-sets-clipboard 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)
 (defun copy-primary-selection ()
   "Copy the selection to the Clipboard and the kill ring."
   (interactive)
@@ -70,11 +75,18 @@ there is a successful conversion.")
   "Return the value of one of the cut buffers.
 This will do nothing under anything other than X.")
 
   "Return the value of one of the cut buffers.
 This will do nothing under anything other than X.")
 
+(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"
+  (condition-case err (get-selection type data-type) (t nil)))
+
 (defun get-selection (&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)
 (defun get-selection (&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."
+says how to convert the data. If there is no selection an error is signalled."
   (or type (setq type 'PRIMARY))
   (or data-type (setq data-type selected-text-type))
   (let ((text
   (or type (setq type 'PRIMARY))
   (or data-type (setq data-type selected-text-type))
   (let ((text
@@ -127,9 +139,12 @@ Interactively, the text of the region is used as the selection value."
             valid))
       (signal 'error (list "invalid selection" data)))
   (or type (setq type 'PRIMARY))
             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-sets-clipboard)
+      (own-selection-internal 'CLIPBOARD data)))
   (cond ((eq type 'PRIMARY)
         (setq primary-selection-extent
               (select-make-extent-for-selection
   (cond ((eq type 'PRIMARY)
         (setq primary-selection-extent
               (select-make-extent-for-selection