-(defun xselect-convert-to-filename (selection type value)
- (cond ((overlayp value)
- (buffer-file-name (or (overlay-buffer value)
- (error "selection is in a killed buffer"))))
- ((and (consp value)
- (markerp (car value))
- (markerp (cdr value)))
- (buffer-file-name (or (marker-buffer (car value))
- (error "selection is in a killed buffer"))))
- (t nil)))
-
-(defun xselect-convert-to-charpos (selection type value)
- (let (a b tmp)
- (cond ((cond ((overlayp value)
- (setq a (overlay-start value)
- b (overlay-end value)))
- ((and (consp value)
- (markerp (car value))
- (markerp (cdr value)))
- (setq a (car value)
- b (cdr value))))
- (setq a (1- a) b (1- b)) ; zero-based
- (if (< b a) (setq tmp a a b b tmp))
- (cons 'SPAN
- (vector (cons (ash a -16) (logand a 65535))
- (cons (ash b -16) (logand b 65535))))))))
-
-(defun xselect-convert-to-lineno (selection type value)
- (let (a b buf tmp)
- (cond ((cond ((and (consp value)
- (markerp (car value))
- (markerp (cdr value)))
- (setq a (marker-position (car value))
- b (marker-position (cdr value))
- buf (marker-buffer (car value))))
- ((overlayp value)
- (setq buf (overlay-buffer value)
- a (overlay-start value)
- b (overlay-end value)))
- )
- (save-excursion
- (set-buffer buf)
- (setq a (count-lines 1 a)
- b (count-lines 1 b)))
- (if (< b a) (setq tmp a a b b tmp))
- (cons 'SPAN
- (vector (cons (ash a -16) (logand a 65535))
- (cons (ash b -16) (logand b 65535))))))))
-
-(defun xselect-convert-to-colno (selection type value)
- (let (a b buf tmp)
- (cond ((cond ((and (consp value)
- (markerp (car value))
- (markerp (cdr value)))
- (setq a (car value)
- b (cdr value)
- buf (marker-buffer a)))
- ((overlayp value)
- (setq buf (overlay-buffer value)
- a (overlay-start value)
- b (overlay-end value)))
- )
- (save-excursion
- (set-buffer buf)
- (goto-char a)
- (setq a (current-column))
- (goto-char b)
- (setq b (current-column)))
- (if (< b a) (setq tmp a a b b tmp))
- (cons 'SPAN
- (vector (cons (ash a -16) (logand a 65535))
- (cons (ash b -16) (logand b 65535))))))))
-
-(defun xselect-convert-to-os (selection type size)
- (symbol-name system-type))
-
-(defun xselect-convert-to-host (selection type size)
- (system-name))
-
-(defun xselect-convert-to-user (selection type size)
- (user-full-name))
-
-(defun xselect-convert-to-class (selection type size)
+(defun xselect-convert-to-filename (_selection _type value)
+ (when (setq value (xselect--selection-bounds value))
+ (xselect--encode-string 'TEXT (buffer-file-name (nth 2 value)))))
+
+(defun xselect-convert-to-charpos (_selection _type value)
+ (when (setq value (xselect--selection-bounds value))
+ (let ((beg (1- (nth 0 value))) ; zero-based
+ (end (1- (nth 1 value))))
+ (cons 'SPAN (vector (xselect--int-to-cons (min beg end))
+ (xselect--int-to-cons (max beg end)))))))
+
+(defun xselect-convert-to-lineno (_selection _type value)
+ (when (setq value (xselect--selection-bounds value))
+ (with-current-buffer (nth 2 value)
+ (let ((beg (line-number-at-pos (nth 0 value)))
+ (end (line-number-at-pos (nth 1 value))))
+ (cons 'SPAN (vector (xselect--int-to-cons (min beg end))
+ (xselect--int-to-cons (max beg end))))))))
+
+(defun xselect-convert-to-colno (_selection _type value)
+ (when (setq value (xselect--selection-bounds value))
+ (with-current-buffer (nth 2 value)
+ (let ((beg (progn (goto-char (nth 0 value)) (current-column)))
+ (end (progn (goto-char (nth 1 value)) (current-column))))
+ (cons 'SPAN (vector (xselect--int-to-cons (min beg end))
+ (xselect--int-to-cons (max beg end))))))))
+
+(defun xselect-convert-to-os (_selection _type _size)
+ (xselect--encode-string 'TEXT (symbol-name system-type)))
+
+(defun xselect-convert-to-host (_selection _type _size)
+ (xselect--encode-string 'TEXT (system-name)))
+
+(defun xselect-convert-to-user (_selection _type _size)
+ (xselect--encode-string 'TEXT (user-full-name)))
+
+(defun xselect-convert-to-class (_selection _type _size)