]> code.delx.au - gnu-emacs/blobdiff - lisp/select.el
(math-read-angle-bracket): Use declared variables math-exp-pos,
[gnu-emacs] / lisp / select.el
index 01b227d8712936d548e0230c1569d1c7ed415215..565ddd7d22ecf221ae718729bdf7db288824a26f 100644 (file)
@@ -3,7 +3,7 @@
 ;; Maintainer: FSF
 ;; Keywords: internal
 
-;; Copyright (c) 1993, 1994 Free Software Foundation, Inc.
+;; Copyright (c) 1993, 1994, 2004 Free Software Foundation, Inc.
 ;; Based partially on earlier release by Lucid.
 
 ;; This file is part of GNU Emacs.
@@ -35,7 +35,11 @@ The argument TYPE (default `PRIMARY') says which selection,
 and the argument DATA-TYPE (default `STRING') says
 how to convert the data.
 
-TYPE may be `SECONDARY' or `CLIPBOARD', in addition to `PRIMARY'.
+TYPE may be any symbol \(but nil stands for `PRIMARY').  However,
+only a few symbols are commonly used.  They conventionally have
+all upper-case names.  The most often used ones, in addition to
+`PRIMARY', are `SECONDARY' and `CLIPBOARD'.
+
 DATA-TYPE is usually `STRING', but can also be one of the symbols
 in `selection-converter-alist', which see."
   (let ((data (x-get-selection-internal (or type 'PRIMARY)
@@ -57,9 +61,11 @@ in `selection-converter-alist', which see."
 
 (defun x-set-selection (type 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).
+The argument TYPE (nil means `PRIMARY') says which selection, and
+DATA specifies the contents.  TYPE must be a symbol.  \(It can also
+be a string, which stands for the symbol with that name, but this
+is considered obsolete.)  DATA may be a string, 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
@@ -69,8 +75,11 @@ 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
-if the prefix arg is set."
+The return value is DATA.
+
+Interactively, this command sets the primary selection.  Without
+prefix argument, it reads the selection in the minibuffer.  With
+prefix argument, it uses the text of the region as the selection value ."
   (interactive (if (not current-prefix-arg)
                   (list 'PRIMARY (read-string "Set text for pasting: "))
                 (list 'PRIMARY (buffer-substring (region-beginning) (region-end)))))
@@ -176,47 +185,48 @@ Cut buffers are considered obsolete; you should use selections instead."
        (if coding
            (setq coding (coding-system-base coding))
          (setq coding 'raw-text))
-       ;; Suppress producing escape sequences for compositions.
-       (remove-text-properties 0 (length str) '(composition nil) str)
-       (cond
-        ((eq type 'TEXT)
-         (if (not (multibyte-string-p str))
-             ;; Don't have to encode unibyte string.
-             (setq type 'STRING)
-           ;; If STR contains only ASCII, Latin-1, and raw bytes,
-           ;; encode STR by iso-latin-1, and return it as type
-           ;; `STRING'.  Otherwise, encode STR by CODING.  In that
-           ;; case, the returing type depends on CODING.
-           (let ((charsets (find-charset-string str)))
-             (setq charsets
-                   (delq 'ascii
-                         (delq 'latin-iso8859-1
-                               (delq 'eight-bit-control
-                                     (delq 'eight-bit-graphic charsets)))))
-             (if charsets
-                 (setq str (encode-coding-string str coding)
-                       type (if (memq coding '(compound-text
-                                               compound-text-with-extensions))
-                                'COMPOUND_TEXT
-                              'STRING))
-               (setq type 'STRING
-                     str (encode-coding-string str 'iso-latin-1))))))
-
-        ((eq type 'COMPOUND_TEXT)
-         (setq str (encode-coding-string str coding)))
-
-        ((eq type 'STRING)
-         (if (memq coding '(compound-text
-                            compound-text-with-extensions))
-             (setq str (string-make-unibyte str))
-           (setq str (encode-coding-string str coding))))
-
-        ((eq type 'UTF8_STRING)
-         (setq str (encode-coding-string str 'utf-8)))
-
-        (t
-         (error "Unknow selection type: %S" type))
-        ))
+       (let ((inhibit-read-only t))
+         ;; Suppress producing escape sequences for compositions.
+         (remove-text-properties 0 (length str) '(composition nil) str)
+         (cond
+          ((eq type 'TEXT)
+           (if (not (multibyte-string-p str))
+               ;; Don't have to encode unibyte string.
+               (setq type 'STRING)
+             ;; If STR contains only ASCII, Latin-1, and raw bytes,
+             ;; encode STR by iso-latin-1, and return it as type
+             ;; `STRING'.  Otherwise, encode STR by CODING.  In that
+             ;; case, the returing type depends on CODING.
+             (let ((charsets (find-charset-string str)))
+               (setq charsets
+                     (delq 'ascii
+                           (delq 'latin-iso8859-1
+                                 (delq 'eight-bit-control
+                                       (delq 'eight-bit-graphic charsets)))))
+               (if charsets
+                   (setq str (encode-coding-string str coding)
+                         type (if (memq coding '(compound-text
+                                                 compound-text-with-extensions))
+                                  'COMPOUND_TEXT
+                                'STRING))
+                 (setq type 'STRING
+                       str (encode-coding-string str 'iso-latin-1))))))
+
+          ((eq type 'COMPOUND_TEXT)
+           (setq str (encode-coding-string str coding)))
+
+          ((eq type 'STRING)
+           (if (memq coding '(compound-text
+                              compound-text-with-extensions))
+               (setq str (string-make-unibyte str))
+             (setq str (encode-coding-string str coding))))
+
+          ((eq type 'UTF8_STRING)
+           (setq str (encode-coding-string str 'utf-8)))
+
+          (t
+           (error "Unknow selection type: %S" type))
+          )))
 
       (setq next-selection-coding-system nil)
       (cons type str))))