comparison lisp/select.el @ 5571:5273dd66a1ba

Strip extent information when passing text to external programs, select.el lisp/ChangeLog addition: 2011-09-21 Aidan Kehoe <kehoea@parhasard.net> * select.el (select-convert-to-text): * select.el (select-convert-to-utf-8-text): Ignore extent information in these functions, other programs can't do anything useful with it, and it actively interferes when copying from an ERC buffer to external programs-- #'encode-coding-string complains that the string is read-only, which is arguably in itself a separate problem, since it allocates a new string there's no reason for it ever to throw that error.
author Aidan Kehoe <kehoea@parhasard.net>
date Wed, 21 Sep 2011 19:14:15 +0100
parents ac37a5f7e5be
children cc1ec4c93a67
comparison
equal deleted inserted replaced
5570:6c76f5b7e2e3 5571:5273dd66a1ba
454 454
455 ;; The rest of the functions on this "page" are conversion handlers, 455 ;; The rest of the functions on this "page" are conversion handlers,
456 ;; append handlers and buffer-kill handlers. 456 ;; append handlers and buffer-kill handlers.
457 (defun select-convert-to-text (selection type value) 457 (defun select-convert-to-text (selection type value)
458 (cond ((stringp value) 458 (cond ((stringp value)
459 value) 459 (substring-no-properties value))
460 ((extentp value) 460 ((extentp value)
461 (save-excursion 461 (save-excursion
462 (set-buffer (extent-object value)) 462 (set-buffer (extent-object value))
463 (save-restriction 463 (save-restriction
464 (widen) 464 (widen)
465 (buffer-substring (extent-start-position value) 465 (buffer-substring-no-properties (extent-start-position value)
466 (extent-end-position value))))) 466 (extent-end-position value)))))
467 ((and (consp value) 467 ((and (consp value)
468 (markerp (car value)) 468 (markerp (car value))
469 (markerp (cdr value))) 469 (markerp (cdr value)))
470 (or (eq (marker-buffer (car value)) (marker-buffer (cdr value))) 470 (or (eq (marker-buffer (car value)) (marker-buffer (cdr value)))
471 (signal 'error 471 (signal 'error
474 (save-excursion 474 (save-excursion
475 (set-buffer (or (marker-buffer (car value)) 475 (set-buffer (or (marker-buffer (car value))
476 (error "selection is in a killed buffer"))) 476 (error "selection is in a killed buffer")))
477 (save-restriction 477 (save-restriction
478 (widen) 478 (widen)
479 (buffer-substring (car value) (cdr value))))) 479 (buffer-substring-no-properties (car value) (cdr value)))))
480 (t nil))) 480 (t nil)))
481 481
482 (defun select-convert-to-timestamp (selection type value) 482 (defun select-convert-to-timestamp (selection type value)
483 (let ((ts (get-xemacs-selection-timestamp selection))) 483 (let ((ts (get-xemacs-selection-timestamp selection)))
484 (if ts (cons 'TIMESTAMP ts)))) 484 (if ts (cons 'TIMESTAMP ts))))
485 485
486 (defun select-convert-to-utf-8-text (selection type value) 486 (defun select-convert-to-utf-8-text (selection type value)
487 (cond ((stringp value) 487 (cond ((stringp value)
488 (cons 'UTF8_STRING (encode-coding-string value 'utf-8))) 488 (cons 'UTF8_STRING (encode-coding-string
489 (substring-no-properties value) 'utf-8)))
489 ((extentp value) 490 ((extentp value)
490 (save-excursion 491 (save-excursion
491 (set-buffer (extent-object value)) 492 (set-buffer (extent-object value))
492 (save-restriction 493 (save-restriction
493 (widen) 494 (widen)
494 (cons 'UTF8_STRING 495 (cons 'UTF8_STRING
495 (encode-coding-string 496 (encode-coding-string (buffer-substring-no-properties
496 (buffer-substring (extent-start-position value) 497 (extent-start-position value)
497 (extent-end-position value)) 'utf-8))))) 498 (extent-end-position value))
499 'utf-8)))))
498 ((and (consp value) 500 ((and (consp value)
499 (markerp (car value)) 501 (markerp (car value))
500 (markerp (cdr value))) 502 (markerp (cdr value)))
501 (or (eq (marker-buffer (car value)) (marker-buffer (cdr value))) 503 (or (eq (marker-buffer (car value)) (marker-buffer (cdr value)))
502 (signal 'error 504 (signal 'error
506 (set-buffer (or (marker-buffer (car value)) 508 (set-buffer (or (marker-buffer (car value))
507 (error "selection is in a killed buffer"))) 509 (error "selection is in a killed buffer")))
508 (save-restriction 510 (save-restriction
509 (widen) 511 (widen)
510 (cons 'UTF8_STRING (encode-coding-string 512 (cons 'UTF8_STRING (encode-coding-string
511 (buffer-substring (car value) (cdr value)) 513 (buffer-substring-no-properties
512 'utf-8))))) 514 (car value) (cdr value)) 'utf-8)))))
513 (t nil))) 515 (t nil)))
514 516
515 (defun select-coerce-to-text (selection type value) 517 (defun select-coerce-to-text (selection type value)
516 (select-convert-to-text selection type value)) 518 (select-convert-to-text selection type value))
517 519