+(defun select-append-to-cf-text (selection type value1 value2)
+ (let ((text1 (select-convert-from-cf-text selection 'CF_TEXT value1))
+ (text2 (select-convert-from-cf-text selection 'CF_TEXT value2)))
+ (if (and text1 text2)
+ (select-convert-to-cf-text selection type (concat text1 text2))
+ nil)))
+
+(defun select-append-default (selection type value1 value2)
+;; This appender gets used if the type is "nil" - i.e. default.
+;; It should probably have more cases implemented than it does - e.g.
+;; appending numbers to strings, etc...
+ (cond ((and (stringp value1) (stringp value2))
+ (select-append-to-string selection 'STRING value1 value2))
+ (t nil)))
+
+;;; Buffer kill handlers
+
+(defun select-buffer-killed-default (selection type value buffer)
+;; This handler gets used if the type is "nil".
+ (cond ((extentp value)
+ (if (eq (extent-object value) buffer)
+ ; If this selection is on the clipboard, grab it quick
+ (when (eq selection 'CLIPBOARD)
+ (save-excursion
+ (set-buffer (extent-object value))
+ (save-restriction
+ (widen)
+ (buffer-substring (extent-start-position value)
+ (extent-end-position value)))))
+ value))
+ ((markerp value)
+ (unless (eq (marker-buffer value) buffer)
+ value))
+ ((and (consp value)
+ (markerp (car value))
+ (markerp (cdr value)))
+ (if (or (eq (marker-buffer (car value)) buffer)
+ (eq (marker-buffer (cdr value)) buffer))
+ ; If this selection is on the clipboard, grab it quick
+ (when (eq selection 'CLIPBOARD)
+ (save-excursion
+ (set-buffer (marker-buffer (car value)))
+ (save-restriction
+ (widen)
+ (buffer-substring (car value) (cdr value)))))
+ value))
+ (t value)))
+
+(defun select-buffer-killed-text (selection type value buffer)
+ (select-buffer-killed-default selection type value buffer))
+
+;; Types listed in here can be selections of XEmacs
+(setq selection-converter-out-alist