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)
"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)
-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
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