X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/7e773fb425c8de50d71643365ba125e716cac911..d18a808f42266d6a1873373e6fef9ca6e74a5226:/lisp/select.el diff --git a/lisp/select.el b/lisp/select.el index 0b55bebd24..3933efdd1a 100644 --- a/lisp/select.el +++ b/lisp/select.el @@ -2,7 +2,7 @@ ;; Keywords: internal -;; Copyright (c) 1993 Free Software Foundation, Inc. +;; Copyright (c) 1993, 1994 Free Software Foundation, Inc. ;; Based partially on earlier release by Lucid. ;; This file is part of GNU Emacs. @@ -18,8 +18,9 @@ ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to -;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. ;;; Code: @@ -28,7 +29,8 @@ (defun x-get-selection (&optional type data-type) "Return the value of an X Windows selection. The argument TYPE (default `PRIMARY') says which selection, -and the argument DATA-TYPE (default `STRING') says how to convert the data." +and the argument DATA-TYPE (default `STRING') says +how to convert the data." (x-get-selection-internal (or type 'PRIMARY) (or data-type 'STRING))) (defun x-get-clipboard () @@ -39,16 +41,20 @@ and the argument DATA-TYPE (default `STRING') says how to convert the data." "Make an X Windows selection of type TYPE and value DATA. The argument TYPE (default `PRIMARY') says which selection, and DATA specifies the contents. DATA may be a string, -a symbol, an integer (or a cons of two integers or list of two integers), -or a cons of two markers pointing to the same buffer. -In the last case, the selection is considered to be the text -between the markers. -The data may also be a vector of valid non-vector selection values." +a symbol, an integer (or a cons of two integers or list of two integers). + +The selection may also be a cons of two markers pointing to the same buffer, +or an overlay. In these cases, the selection is considered to be the text +between the markers *at whatever time the selection is examined*. +Thus, editing done in the buffer after you specify the selection +can alter the effective value of the selection. + +The data may also be a vector of valid non-vector selection values. + +Interactively, the text of the region is used as the selection value." (interactive (if (not current-prefix-arg) - (list (read-string "Store text for pasting: ")) - (list (cons ;; these need not be ordered. - (copy-marker (point-marker)) - (copy-marker (mark-marker)))))) + (list 'PRIMARY (read-string "Set text for pasting: ")) + (list 'PRIMARY (substring (region-beginning) (region-end))))) ;; This is for temporary compatibility with pre-release Emacs 19. (if (stringp type) (setq type (intern type))) @@ -77,8 +83,7 @@ The data may also be a vector of valid non-vector selection values." (or (integerp (cdr data)) (and (consp (cdr data)) (integerp (car (cdr data)))))) -;;; (and (fboundp 'extentp) -;;; (extentp data)) + (overlayp data) (and (consp data) (markerp (car data)) (markerp (cdr data)) @@ -102,14 +107,16 @@ Cut buffers are considered obsolete; you should use selections instead." which-one) 'CUT_BUFFER0))) -(defun x-set-cut-buffer (string) +(defun x-set-cut-buffer (string &optional push) "Store STRING into the X server's primary cut buffer. -The previous value of the primary cut buffer is rotated to the secondary +If PUSH is non-nil, also rotate the cut buffers: +this means the previous value of the primary cut buffer moves the second cut buffer, and the second to the third, and so on (there are 8 buffers.) Cut buffers are considered obsolete; you should use selections instead." ;; Check the data type of STRING. (substring string 0 0) - (x-rotate-cut-buffers-internal 1) + (if push + (x-rotate-cut-buffers-internal 1)) (x-store-cut-buffer-internal 'CUT_BUFFER0 string)) @@ -120,11 +127,13 @@ Cut buffers are considered obsolete; you should use selections instead." (defun xselect-convert-to-string (selection type value) (cond ((stringp value) value) -;;; ((extentp value) -;;; (save-excursion -;;; (set-buffer (extent-buffer value)) -;;; (buffer-substring (extent-start-position value) -;;; (extent-end-position value)))) + ((overlayp value) + (save-excursion + (or (buffer-name (overlay-buffer value)) + (error "selection is in a killed buffer")) + (set-buffer (overlay-buffer value)) + (buffer-substring (overlay-start value) + (overlay-end value)))) ((and (consp value) (markerp (car value)) (markerp (cdr value))) @@ -142,8 +151,8 @@ Cut buffers are considered obsolete; you should use selections instead." (let ((value (cond ((stringp value) (length value)) -;;; ((extentp value) -;;; (extent-length value)) + ((overlayp value) + (abs (- (overlay-end value) (overlay-start value)))) ((and (consp value) (markerp (car value)) (markerp (cdr value))) @@ -178,10 +187,9 @@ Cut buffers are considered obsolete; you should use selections instead." 'NULL) (defun xselect-convert-to-filename (selection type value) - (cond -;;; ((extentp value) -;;; (buffer-file-name (or (extent-buffer value) -;;; (error "selection is in a killed buffer")))) + (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))) @@ -191,10 +199,9 @@ Cut buffers are considered obsolete; you should use selections instead." (defun xselect-convert-to-charpos (selection type value) (let (a b tmp) - (cond ((cond -;;; ((extentp value) -;;; (setq a (extent-start-position value) -;;; b (extent-end-position value))) + (cond ((cond ((overlayp value) + (setq a (overlay-start value) + b (overlay-end value))) ((and (consp value) (markerp (car value)) (markerp (cdr value))) @@ -214,10 +221,10 @@ Cut buffers are considered obsolete; you should use selections instead." (setq a (marker-position (car value)) b (marker-position (cdr value)) buf (marker-buffer (car value)))) -;;; ((extentp value) -;;; (setq buf (extent-buffer value) -;;; a (extent-start-position value) -;;; b (extent-end-position value))) + ((overlayp value) + (setq buf (overlay-buffer value) + a (overlay-start value) + b (overlay-end value))) ) (save-excursion (set-buffer buf) @@ -236,10 +243,10 @@ Cut buffers are considered obsolete; you should use selections instead." (setq a (car value) b (cdr value) buf (marker-buffer a))) -;;; ((extentp value) -;;; (setq buf (extent-buffer value) -;;; a (extent-start-position value) -;;; b (extent-end-position value))) + ((overlayp value) + (setq buf (overlay-buffer value) + a (overlay-start value) + b (overlay-end value))) ) (save-excursion (set-buffer buf) @@ -281,6 +288,7 @@ Cut buffers are considered obsolete; you should use selections instead." (setq selection-converter-alist '((TEXT . xselect-convert-to-string) + (COMPOUND_TEXT . xselect-convert-to-string) (STRING . xselect-convert-to-string) (TARGETS . xselect-convert-to-targets) (LENGTH . xselect-convert-to-length)