]> git.eshelyaron.com Git - emacs.git/commitdiff
Consolidate management/ownership of selections.
authorStefan Monnier <monnier@iro.umontreal.ca>
Thu, 2 Oct 2014 03:19:32 +0000 (23:19 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Thu, 2 Oct 2014 03:19:32 +0000 (23:19 -0400)
* lisp/select.el (gui-get-selection-alist): New method.
(gui-get-selection): Use it.  Rename from x-get-selection.
(x-get-selection): Define as obsolete alias.
(x-get-clipboard): Mark obsolete.
(gui-get-primary-selection): New function.
(x-get-selection-value): Mark obsolete.
(gui-own-selection-alist, gui-disown-selection-alist)
(gui-selection-owner-p-alist): New methods.
(gui-set-selection): Use them.  Rename from x-set-selection.
(x-set-selection): Define as obsolete alias.
(gui--valid-simple-selection-p): Rename from
x-valid-simple-selection-p.
* lisp/w32-common-fns.el (gui-own-selection, gui-disown-selection)
(gui-selection-owner-p, gui-get-selection): Define for w32.
(w32-get-selection-value): Rename from x-get-selection-value.
Use the new gui-last-selected-text.
* lisp/term/x-win.el (x-get-selection-value): Remove.
(x-clipboard-yank): Declare obsolete.
(gui-own-selection, gui-disown-selection, gui-get-selection)
(gui-selection-owner-p): Define for x.
* lisp/term/w32-win.el (w32-win-suspend-error): Rename from
x-win-suspend-error.
* lisp/term/pc-win.el (w16-get-selection-value): Rename from
x-get-selection-value.
(w16-selection-owner-p): Rename from x-selection-owner-p.
(gui-own-selection, gui-disown-selection, gui-get-selection)
(gui-selection-owner-p): Define for pc.
(w16--select-text): New function.
* lisp/term/ns-win.el (gui-own-selection, gui-disown-selection)
(gui-get-selection, gui-selection-owner-p): Define for ns.
* lisp/term.el (term-mouse-paste):
* lisp/mouse.el (mouse-yank-primary): Use gui-get-primary-selection.
* src/nsselect.m (ns-own-selection-internal, ns-disown-selection-internal):
Rename from the "x-" prefix.

15 files changed:
etc/NEWS
lisp/ChangeLog
lisp/mouse-copy.el
lisp/mouse.el
lisp/obsolete/mouse-sel.el
lisp/select.el
lisp/simple.el
lisp/term.el
lisp/term/ns-win.el
lisp/term/pc-win.el
lisp/term/w32-win.el
lisp/term/x-win.el
lisp/w32-common-fns.el
src/ChangeLog
src/nsselect.m

index ddcd70cb11a626f6625c4f1e32c8c3268c85f25c..f5720280db46656c79a29d80d982aad306043a82 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -245,7 +245,12 @@ Emacs-21.
 \f
 * Lisp Changes in Emacs 25.1
 
-** x-select-text is renamed gui-select-text.
+** Some "x-*" were obsoleted:
+*** x-select-text is renamed gui-select-text.
+*** x-get-selection is renamed gui-get-selection.
+*** x-get-clipboard and x-clipboard-yank are marked obsolete.
+*** x-get-selection-value is renamed to gui-get-primary-selection.
+*** x-set-selection is renamed to gui-set-selection
 
 ** call-process-shell-command and process-file-shell-command
 don't take "&rest args" any more.
index 4e27e66a0b34b62a2744f3cb60e17b62c315181b..58dc8372a7ab14027778e3eb1f91b780f12675fa 100644 (file)
@@ -1,3 +1,39 @@
+2014-10-02  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Consolidate management/ownership of selections.
+       * select.el (gui-get-selection-alist): New method.
+       (gui-get-selection): Use it.  Rename from x-get-selection.
+       (x-get-selection): Define as obsolete alias.
+       (x-get-clipboard): Mark obsolete.
+       (gui-get-primary-selection): New function.
+       (x-get-selection-value): Mark obsolete.
+       (gui-own-selection-alist, gui-disown-selection-alist)
+       (gui-selection-owner-p-alist): New methods.
+       (gui-set-selection): Use them.  Rename from x-set-selection.
+       (x-set-selection): Define as obsolete alias.
+       (gui--valid-simple-selection-p): Rename from
+       x-valid-simple-selection-p.
+       * w32-common-fns.el (gui-own-selection, gui-disown-selection)
+       (gui-selection-owner-p, gui-get-selection): Define for w32.
+       (w32-get-selection-value): Rename from x-get-selection-value.
+       Use the new gui-last-selected-text.
+       * term/x-win.el (x-get-selection-value): Remove.
+       (x-clipboard-yank): Declare obsolete.
+       (gui-own-selection, gui-disown-selection, gui-get-selection)
+       (gui-selection-owner-p): Define for x.
+       * term/w32-win.el (w32-win-suspend-error): Rename from
+       x-win-suspend-error.
+       * term/pc-win.el (w16-get-selection-value): Rename from
+       x-get-selection-value.
+       (w16-selection-owner-p): Rename from x-selection-owner-p.
+       (gui-own-selection, gui-disown-selection, gui-get-selection)
+       (gui-selection-owner-p): Define for pc.
+       (w16--select-text): New function.
+       * term/ns-win.el (gui-own-selection, gui-disown-selection)
+       (gui-get-selection, gui-selection-owner-p): Define for ns.
+       * term.el (term-mouse-paste):
+       * mouse.el (mouse-yank-primary): Use gui-get-primary-selection.
+
 2014-10-02  H. Dieter Wilhelm <dieter@duenenhof-wilhelm.de>  (tiny change)
 
        * calc/calc-help.el (calc-describe-thing): Quote strings
index b8bd339acb3ad8482867b3b50b35d9bd28f0ee47..ddfb879318ff74a239a63638976096be0bdc24a1 100644 (file)
@@ -147,7 +147,7 @@ If you have the bug (or the real fix :-), please let me know."
       ;; Third, set the selection.
       ;; (setq me-beg beg me-end end me-range range)  ; for debugging
       (set-buffer end-buffer)
-      (x-set-selection 'SECONDARY (buffer-substring beg end)))))
+      (gui-set-selection 'SECONDARY (buffer-substring beg end)))))
 
 
 (defun mouse-drag-secondary-pasting (start-event)
@@ -203,7 +203,7 @@ by johnh@ficus.cs.ucla.edu."
     (kill-region (overlay-start mouse-secondary-overlay)
                 (overlay-end mouse-secondary-overlay)))
   ;; (delete-overlay mouse-secondary-overlay)
-  ;; (x-set-selection 'SECONDARY nil)
+  ;; (gui-set-selection 'SECONDARY nil)
   ;; (setq mouse-secondary-overlay nil)
 )
 
index 93bd6283158d7ae1de4a0c859b65f3c07261690f..f569ec3577d26ac3918ce51eee2c758f220a5263 100644 (file)
@@ -1068,24 +1068,7 @@ regardless of where you click."
     (let (select-active-regions)
       (deactivate-mark)))
   (or mouse-yank-at-point (mouse-set-point click))
-  (let ((primary
-         (if (fboundp 'x-get-selection-value)
-             (if (eq (framep (selected-frame)) 'w32)
-                 ;; MS-Windows emulates PRIMARY in x-get-selection, but not
-                 ;; in x-get-selection-value (the latter only accesses the
-                 ;; clipboard).  So try PRIMARY first, in case they selected
-                 ;; something with the mouse in the current Emacs session.
-                 (or (x-get-selection 'PRIMARY)
-                     (x-get-selection-value))
-               ;; Else MS-DOS or X.
-               ;; On X, x-get-selection-value supports more formats and
-               ;; encodings, so use it in preference to x-get-selection.
-               (or (x-get-selection-value)
-                   (x-get-selection 'PRIMARY)))
-           ;; FIXME: What about xterm-mouse-mode etc.?
-           (x-get-selection 'PRIMARY))))
-    (unless primary
-      (error "No selection is available"))
+  (let ((primary (gui-get-primary-selection)))
     (push-mark (point))
     (insert-for-yank primary)))
 
@@ -1272,7 +1255,7 @@ This must be bound to a mouse drag event."
       (if (numberp (posn-point posn))
          (setq beg (posn-point posn)))
       (move-overlay mouse-secondary-overlay beg (posn-point end))
-      (x-set-selection
+      (gui-set-selection
        'SECONDARY
        (buffer-substring (overlay-start mouse-secondary-overlay)
                         (overlay-end mouse-secondary-overlay))))))
@@ -1347,13 +1330,13 @@ The function returns a non-nil value if it creates a secondary selection."
            (if (marker-position mouse-secondary-start)
                (save-window-excursion
                  (delete-overlay mouse-secondary-overlay)
-                 (x-set-selection 'SECONDARY nil)
+                 (gui-set-selection 'SECONDARY nil)
                  (select-window start-window)
                  (save-excursion
                    (goto-char mouse-secondary-start)
                    (sit-for 1)
                    nil))
-             (x-set-selection
+             (gui-set-selection
               'SECONDARY
               (buffer-substring (overlay-start mouse-secondary-overlay)
                                 (overlay-end mouse-secondary-overlay)))))))))
@@ -1486,7 +1469,7 @@ CLICK position, kill the secondary selection."
         (setq str (buffer-substring (overlay-start mouse-secondary-overlay)
                                     (overlay-end mouse-secondary-overlay)))
         (> (length str) 0)
-        (x-set-selection 'SECONDARY str))))
+        (gui-set-selection 'SECONDARY str))))
 
 \f
 (defcustom mouse-buffer-menu-maxlen 20
index 21765c3d65253b16535d587fc5ed06b97aedd734..7d7cd1f137fc4a08d7a831c77d50e56c1e56979e 100644 (file)
@@ -97,7 +97,7 @@
 ;;      In this mode, mouse-insert-selection just calls mouse-yank-at-click.
 ;;
 ;;       Selection/kill-ring interaction is retained
-;;         interprogram-cut-function   = x-select-text
+;;         interprogram-cut-function   = gui-select-text
 ;;         interprogram-paste-function = x-selection-value
 ;;
 ;;       What you lose is the ability to select some text in
@@ -292,15 +292,13 @@ where   SELECTION-NAME          = name of selection
        SELECTION-THING-SYMBOL  = name of variable where the current selection
                                  type for this selection should be stored.")
 
-(declare-function x-select-text "term/common-win" (text))
-
 (defvar mouse-sel-set-selection-function
   (if (eq mouse-sel-default-bindings 'interprogram-cut-paste)
-      'x-set-selection
+      'gui-set-selection
     (lambda (selection value)
       (if (eq selection 'PRIMARY)
-         (x-select-text value)
-       (x-set-selection selection value))))
+         (gui-select-text value)
+       (gui-set-selection selection value))))
   "Function to call to set selection.
 Called with two arguments:
 
@@ -316,7 +314,6 @@ is `interprogram-cut-paste'.")
   (lambda (selection)
     (if (eq selection 'PRIMARY)
        (or (x-selection-value)
-           (bound-and-true-p x-last-selected-text)
            (bound-and-true-p x-last-selected-text-primary))
       (x-get-selection selection)))
   "Function to call to get the selection.
index c32b45f1c85216f850263b8459c9dfbaf3917795..d6be917f291c725ff13ce43f69416c6df546bd76 100644 (file)
@@ -71,9 +71,6 @@ other programs (X Windows clients or MS Windows programs).  But, if this
 variable is set, it is used for the next communication only.
 After the communication, this variable is set to nil.")
 
-(declare-function x-get-selection-internal "xselect.c"
-                 (selection-symbol target-type &optional time-stamp terminal))
-
 ;; Only declared obsolete in 23.3.
 (define-obsolete-function-alias 'x-selection 'x-get-selection "at least 19.34")
 
@@ -93,6 +90,13 @@ if applicable (i.e. under X11)."
 Called with one argument (the text selected).
 Should obey `gui-select-enable-clipboard' where applicable.")
 
+(gui-method-declare gui-get-selection #'ignore
+  "Return selected text.
+Called with 2 arguments: (SELECTION-SYMBOL TARGET-TYPE)
+SELECTION-SYMBOL is typically `PRIMARY', `SECONDARY', or `CLIPBOARD'.
+\(Those are literal upper-case symbol names, since that's what X expects.)
+TARGET-TYPE is the type of data desired, typically `STRING'.")
+
 (defvar gui-last-selected-text nil
   "Last text passed to `gui-select-text'.")
 
@@ -112,7 +116,7 @@ On MS-Windows, make TEXT the current selection."
   (setq gui-last-selected-text text))
 (define-obsolete-function-alias 'x-select-text 'gui-select-text "25.1")
 
-(defun x-get-selection (&optional type data-type)
+(defun gui-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
@@ -126,39 +130,69 @@ all upper-case names.  The most often used ones, in addition to
 DATA-TYPE is usually `STRING', but can also be one of the symbols
 in `selection-converter-alist', which see.  This argument is
 ignored on MS-Windows and MS-DOS."
-  (let ((data (x-get-selection-internal (or type 'PRIMARY)
-                                       (or data-type 'STRING)))
-       coding)
+  (let ((data (gui-call gui-get-selection (or type 'PRIMARY)
+                        (or data-type 'STRING))))
     (when (and (stringp data)
               (setq data-type (get-text-property 0 'foreign-selection data)))
-      (setq coding (or next-selection-coding-system
-                      selection-coding-system
-                      (cond ((eq data-type 'UTF8_STRING)
-                             'utf-8)
-                            ((eq data-type 'COMPOUND_TEXT)
-                             'compound-text-with-extensions)
-                            ((eq data-type 'C_STRING)
-                             nil)
-                            ((eq data-type 'STRING)
-                             'iso-8859-1)
-                            (t
-                             (error "Unknown selection data type: %S" type))))
-           data (if coding (decode-coding-string data coding)
-                  (string-to-multibyte data)))
+      (let ((coding (or next-selection-coding-system
+                        selection-coding-system
+                        (pcase data-type
+                          ('UTF8_STRING 'utf-8)
+                          ('COMPOUND_TEXT 'compound-text-with-extensions)
+                          ('C_STRING nil)
+                          ('STRING 'iso-8859-1)
+                          (_ (error "Unknown selection data type: %S"
+                                    type))))))
+        (setq data (if coding (decode-coding-string data coding)
+                     (string-to-multibyte data))))
       (setq next-selection-coding-system nil)
       (put-text-property 0 (length data) 'foreign-selection data-type data))
     data))
+(define-obsolete-function-alias 'x-get-selection 'gui-get-selection "25.1")
 
 (defun x-get-clipboard ()
   "Return text pasted to the clipboard."
-  (x-get-selection-internal 'CLIPBOARD 'STRING))
-
-(declare-function x-own-selection-internal "xselect.c"
-                 (selection-name selection-value &optional frame))
-(declare-function x-disown-selection-internal "xselect.c"
-                 (selection &optional time terminal))
-
-(defun x-set-selection (type data)
+  (declare (obsolete gui-get-selection "25.1"))
+  (gui-call gui-get-selection 'CLIPBOARD 'STRING))
+
+(defun gui-get-primary-selection ()
+  "Return the PRIMARY selection, or the best emulation thereof."
+  (or (gui-get-selection 'PRIMARY)
+      (and (fboundp 'w32-get-selection-value)
+           (eq (framep (selected-frame)) 'w32)
+           ;; MS-Windows emulates PRIMARY in x-get-selection, but only
+           ;; within the Emacs session, so consult the clipboard if
+           ;; primary is not found.
+           (w32-get-selection-value))
+      (error "No selection is available")))
+(define-obsolete-function-alias 'x-get-selection-value
+  'gui-get-primary-selection "25.1")
+
+(gui-method-declare gui-own-selection nil
+  "Method to assert a selection of type SELECTION and value VALUE.
+SELECTION is a symbol, typically `PRIMARY', `SECONDARY', or `CLIPBOARD'.
+(Those are literal upper-case symbol names, since that's what X expects.)
+VALUE is typically a string, or a cons of two markers, but may be
+anything that the functions on `selection-converter-alist' know about.
+
+Called with 2 args: (SELECTION VALUE).")
+
+(gui-method-declare gui-disown-selection nil
+  "If we own the selection SELECTION, disown it.
+Disowning it means there is no such selection.
+
+Called with one argument: (SELECTION)")
+
+(gui-method-declare gui-selection-owner-p #'ignore
+  "Whether the current Emacs process owns the given X Selection.
+Called with one argument: (SELECTION).
+The arg should be the name of the selection in question, typically one of
+the symbols `PRIMARY', `SECONDARY', or `CLIPBOARD'.
+(Those are literal upper-case symbol names, since that's what X expects.)
+For convenience, the symbol nil is the same as `PRIMARY',
+and t is the same as `SECONDARY'.")
+
+(defun gui-set-selection (type data)
   "Make an X selection of type TYPE and value DATA.
 The argument TYPE (nil means `PRIMARY') says which selection, and
 DATA specifies the contents.  TYPE must be a symbol.  \(It can also
@@ -186,23 +220,24 @@ are not available to other programs."
                   (list 'PRIMARY (read-string "Set text for pasting: "))
                 (list 'PRIMARY (buffer-substring (region-beginning) (region-end)))))
   (if (stringp type) (setq type (intern type)))
-  (or (x-valid-simple-selection-p data)
+  (or (gui--valid-simple-selection-p data)
       (and (vectorp data)
           (let ((valid t)
                 (i (1- (length data))))
             (while (>= i 0)
-              (or (x-valid-simple-selection-p (aref data i))
+              (or (gui--valid-simple-selection-p (aref data i))
                   (setq valid nil))
               (setq i (1- i)))
             valid))
       (signal 'error (list "invalid selection" data)))
   (or type (setq type 'PRIMARY))
   (if data
-      (x-own-selection-internal type data)
-    (x-disown-selection-internal type))
+      (gui-call gui-own-selection type data)
+    (gui-call gui-disown-selection type))
   data)
+(define-obsolete-function-alias 'x-set-selection 'gui-set-selection "25.1")
 
-(defun x-valid-simple-selection-p (data)
+(defun gui--valid-simple-selection-p (data)
   (or (bufferp data)
       (and (consp data)
           (markerp (car data))
@@ -358,7 +393,7 @@ two markers or an overlay.  Otherwise, it is nil."
     (apply 'vector all)))
 
 (defun xselect-convert-to-delete (selection _type _value)
-  (x-disown-selection-internal selection)
+  (gui-call gui-disown-selection selection)
   ;; A return value of nil means that we do not know how to do this conversion,
   ;; and replies with an "error".  A return value of NULL means that we have
   ;; done the conversion (and any side-effects) but have no value to return.
index 8504cf4be19a9719383f756297c2e779114f8142..f96904cc177e4e0211ce19eb8fe468e5003189a5 100644 (file)
@@ -3629,7 +3629,7 @@ No filtering is done unless a hook says to."
 
 ;;;; Window system cut and paste hooks.
 
-(defvar interprogram-cut-function #'x-select-text
+(defvar interprogram-cut-function #'gui-select-text
   "Function to call to make a killed region available to other programs.
 Most window systems provide a facility for cutting and pasting
 text between different programs, such as the clipboard on X and
@@ -4497,8 +4497,6 @@ a mistake; see the documentation of `set-mark'."
     (signal 'mark-inactive nil)))
 
 ;; Behind display-selections-p.
-(declare-function x-selection-owner-p "xselect.c"
-                  (&optional selection terminal))
 (declare-function x-selection-exists-p "xselect.c"
                   (&optional selection terminal))
 
@@ -4525,15 +4523,15 @@ run `deactivate-mark-hook'."
       ;; the region prior to the last command modifying the buffer.
       ;; Set the selection to that, or to the current region.
       (cond (saved-region-selection
-            (x-set-selection 'PRIMARY saved-region-selection)
+            (gui-set-selection 'PRIMARY saved-region-selection)
             (setq saved-region-selection nil))
            ;; If another program has acquired the selection, region
            ;; deactivation should not clobber it (Bug#11772).
            ((and (/= (region-beginning) (region-end))
-                 (or (x-selection-owner-p 'PRIMARY)
-                     (null (x-selection-exists-p 'PRIMARY))))
-            (x-set-selection 'PRIMARY
-                              (funcall region-extract-function nil)))))
+                 (or (call-gui gui-selection-owner-p 'PRIMARY)
+                     (null (gui-selection-exists-p 'PRIMARY))))
+            (gui-set-selection 'PRIMARY
+                                (funcall region-extract-function nil)))))
     (when mark-active (force-mode-line-update)) ;Refresh toolbar (bug#16382).
     (cond
      ((eq (car-safe transient-mark-mode) 'only)
index 825a202c04643f955516db6a1eb372508b694e2a..611a0c660e1e930b432b95a4ed2c51d352316758 100644 (file)
@@ -1249,16 +1249,7 @@ without any interpretation."
     (run-hooks 'mouse-leave-buffer-hook)
     (setq this-command 'yank)
     (mouse-set-point click)
-    (term-send-raw-string
-     ;; From `mouse-yank-primary':
-     (or (if (fboundp 'x-get-selection-value)
-             (if (eq system-type 'windows-nt)
-                 (or (x-get-selection 'PRIMARY)
-                     (x-get-selection-value))
-               (or (x-get-selection-value)
-                   (x-get-selection 'PRIMARY)))
-          (x-get-selection 'PRIMARY))
-        (error "No selection is available")))))
+    (term-send-raw-string (gui-get-primary-selection))))
 
 (defun term-paste ()
   "Insert the last stretch of killed text at point."
index fc13a2c5ddf432661366f446570fb8f9d3551b45..5889baf6946c85ff8e13e4f7452c4de505b00f63 100644 (file)
@@ -971,6 +971,11 @@ See the documentation of `create-fontset-from-fontset-spec' for the format.")
                      (when gui-select-enable-clipboard
                        (ns-set-pasteboard text))))
 
+(gui-method-define gui-own-selection x #'ns-own-selection-internal)
+(gui-method-define gui-disown-selection x #'ns-disown-selection-internal)
+(gui-method-define gui-selection-owner-p x #'ns-selection-owner-p)
+(gui-method-define gui-get-selection x #'x-get-selection-internal) ;FIXME:name!
+
 (provide 'ns-win)
 
 ;;; ns-win.el ends here
index 264d881bc1529d7548bc140834b39668ee826f10..3498937b4d23fe337d1a3788dd2b303a77bc933f 100644 (file)
@@ -219,7 +219,7 @@ the operating system.")
 ;
 ;;;; Selections
 ;
-(defun x-get-selection-value ()
+(defun w16-get-selection-value ()
   "Return the value of the current selection.
 Consult the selection.  Treat empty strings as if they were unset."
   (if gui-select-enable-clipboard
@@ -238,93 +238,44 @@ Consult the selection.  Treat empty strings as if they were unset."
         (t
          (setq gui-last-selected-text text))))))
 
-;; x-selection-owner-p is used in simple.el.
-(defun x-selection-owner-p (&optional _selection _terminal)
-  "Whether the current Emacs process owns the given X Selection.
-The arg should be the name of the selection in question, typically one of
-the symbols `PRIMARY', `SECONDARY', or `CLIPBOARD'.
-\(Those are literal upper-case symbol names, since that's what X expects.)
-For convenience, the symbol nil is the same as `PRIMARY',
-and t is the same as `SECONDARY'.
-
-TERMINAL should be a terminal object or a frame specifying the X
-server to query.  If omitted or nil, that stands for the selected
-frame's display, or the first available X display.
-
-On Nextstep, TERMINAL is unused.
-
-\(fn &optional SELECTION TERMINAL)"
-    (if gui-select-enable-clipboard
-      (let (text)
-       ;; Don't die if w16-get-clipboard-data signals an error.
-       (ignore-errors
-         (setq text (w16-get-clipboard-data)))
-       ;; We consider ourselves the owner of the selection if it does
-       ;; not exist, or exists and compares equal with the last text
-       ;; we've put into the Windows clipboard.
-       (cond
-        ((not text) t)
-        ((or (eq text gui-last-selected-text)
-             (string= text gui-last-selected-text))
-         text)
-        (t nil)))))
-
-;; x-own-selection-internal and x-disown-selection-internal are used
-;; in select.el:x-set-selection.
-(defun x-own-selection-internal (_selection value &optional _frame)
-  "Assert an X selection of the type SELECTION with and value VALUE.
-SELECTION is a symbol, typically `PRIMARY', `SECONDARY', or `CLIPBOARD'.
-\(Those are literal upper-case symbol names, since that's what X expects.)
-VALUE is typically a string, or a cons of two markers, but may be
-anything that the functions on `selection-converter-alist' know about.
-
-FRAME should be a frame that should own the selection.  If omitted or
-nil, it defaults to the selected frame.
-
-On Nextstep, FRAME is unused.
-
-\(fn SELECTION VALUE &optional FRAME)"
-  (ignore-errors
-    (x-select-text value))
-  value)
-
-(defun x-disown-selection-internal (selection &optional _time-object _terminal)
-  "If we own the selection SELECTION, disown it.
-Disowning it means there is no such selection.
-
-Sets the last-change time for the selection to TIME-OBJECT (by default
-the time of the last event).
-
-TERMINAL should be a terminal object or a frame specifying the X
-server to query.  If omitted or nil, that stands for the selected
-frame's display, or the first available X display.
-
-On Nextstep, the TIME-OBJECT and TERMINAL arguments are unused.
-On MS-DOS, all this does is return non-nil if we own the selection.
-
-\(fn SELECTION &optional TIME-OBJECT TERMINAL)"
-  (if (x-selection-owner-p selection)
-      t))
-
-;; x-get-selection-internal is used in select.el
-(defun x-get-selection-internal (_selection-symbol _target-type
-                                                 &optional _time-stamp _terminal)
-  "Return text selected from some X window.
-SELECTION-SYMBOL is typically `PRIMARY', `SECONDARY', or `CLIPBOARD'.
-\(Those are literal upper-case symbol names, since that's what X expects.)
-TARGET-TYPE is the type of data desired, typically `STRING'.
-
-TIME-STAMP is the time to use in the XConvertSelection call for foreign
-selections.  If omitted, defaults to the time for the last event.
-
-TERMINAL should be a terminal object or a frame specifying the X
-server to query.  If omitted or nil, that stands for the selected
-frame's display, or the first available X display.
-
-On Nextstep, TIME-STAMP and TERMINAL are unused.
-
-\(fn SELECTION-SYMBOL TARGET-TYPE &optional TIME-STAMP TERMINAL)"
-  (x-get-selection-value))
+;; gui-selection-owner-p is used in simple.el.
+(gui-method-define gui-selection-owner-p pc #'w16-selection-owner-p)
+(defun w16-selection-owner-p (_selection)
+  ;; FIXME: Other systems don't obey gui-select-enable-clipboard here.
+  (if gui-select-enable-clipboard
+      (let ((text
+             ;; Don't die if w16-get-clipboard-data signals an error.
+             (ignore-errors
+               (w16-get-clipboard-data))))
+        ;; We consider ourselves the owner of the selection
+        ;; if it does not exist, or exists and compares
+        ;; equal with the last text we've put into the
+        ;; Windows clipboard.
+        (cond
+         ((not text) t)
+         ((or (eq text gui-last-selected-text)
+              (string= text gui-last-selected-text))
+          text)
+         (t nil)))))
+
+;; gui-own-selection and gui-disown-selection are used in gui-set-selection.
+(gui-method-define gui-own-selection pc
+                   (lambda (_selection value)
+                     ;; FIXME: Other systems don't obey
+                     ;; gui-select-enable-clipboard here.
+                     (ignore-errors
+                       (w16--select-text value))
+                     value))
+
+(gui-method-define gui-disown-selection pc
+                   (lambda (selection &optional _time-object _terminal)
+                     (if (w16-selection-owner-p selection)
+                         t)))
+
+;; gui-get-selection is used in select.el
+(gui-method-define gui-get-selection pc
+                   (lambda (selection-symbol target-type)
+                     (w16-get-selection-value)))
 
 ;; From src/fontset.c:
 (fset 'query-fontset 'ignore)
@@ -429,7 +380,7 @@ Errors out because it is not supposed to be called, ever."
   (setq split-window-keep-point t)
   ;; Arrange for the kill and yank functions to set and check the
   ;; clipboard.
-  (setq interprogram-paste-function 'x-get-selection-value)
+  (setq interprogram-paste-function #'w16-get-selection-value)
   (menu-bar-enable-clipboard)
   (run-hooks 'terminal-init-msdos-hook))
 
@@ -446,10 +397,10 @@ Errors out because it is not supposed to be called, ever."
 
 (declare-function w16-set-clipboard-data "w16select.c"
                  (string &optional ignored))
-(gui-method-define gui-select-text pc
-                   (lambda (text)
-                     (when gui-select-enable-clipboard
-                       (w16-set-clipboard-data text))))
+(gui-method-define gui-select-text pc #'w16--select-text)
+(defun w16--select-text (text)
+  (when gui-select-enable-clipboard
+    (w16-set-clipboard-data text)))
 
 ;; ---------------------------------------------------------------------------
 
index 3eb8e69c28dbff5602697adb56f171d8ee6845f9..8ef718ad230e8af57906446e3663457712f3b019 100644 (file)
@@ -205,9 +205,8 @@ European languages which are distributed with Windows as
 
 See the documentation of `create-fontset-from-fontset-spec' for the format.")
 
-(defun x-win-suspend-error ()
-  "Report an error when a suspend is attempted.
-This returns an error if any Emacs frames are X frames, or always under W32."
+(defun w32-win-suspend-error ()
+  "Report an error when a suspend is attempted."
   (error "Suspending an Emacs running under W32 makes no sense"))
 
 (defvar dynamic-library-alist)
@@ -353,7 +352,7 @@ This returns an error if any Emacs frames are X frames, or always under W32."
                 (cons '(reverse . t) default-frame-alist)))))
 
   ;; Don't let Emacs suspend under Windows.
-  (add-hook 'suspend-hook 'x-win-suspend-error)
+  (add-hook 'suspend-hook #'w32-win-suspend-error)
 
   ;; Turn off window-splitting optimization; w32 is usually fast enough
   ;; that this is only annoying.
index daaef61e494b40677946d27db70379365f565723..a50f886c66abf5525d1e2771f3d43310045cc459 100644 (file)
@@ -1290,16 +1290,9 @@ The value nil is the same as the list (UTF8_STRING COMPOUND_TEXT STRING)."
 ;; Arrange for the kill and yank functions to set and check the clipboard.
 (setq interprogram-paste-function 'x-selection-value)
 
-;; Make paste from other applications use the decoding in x-select-request-type
-;; and not just STRING.
-(defun x-get-selection-value ()
-  "Get the current value of the PRIMARY selection.
-Request data types in the order specified by `x-select-request-type'."
-  (x-selection-value-internal 'PRIMARY))
-
 (defun x-clipboard-yank ()
-  ;; FIXME: How is that different from `clipboard-yank'?
   "Insert the clipboard contents, or the last stretch of killed text."
+  (declare (obsolete clipboard-yank "25.1"))
   (interactive "*")
   (let ((clipboard-text (x-selection-value-internal 'CLIPBOARD))
        (x-select-enable-clipboard t))
@@ -1325,9 +1318,9 @@ Request data types in the order specified by `x-select-request-type'."
 
 (defun x-win-suspend-error ()
   "Report an error when a suspend is attempted.
-This returns an error if any Emacs frames are X frames, or always under W32."
+This returns an error if any Emacs frames are X frames."
   ;; Don't allow suspending if any of the frames are X frames.
-  (if (memq 'x (mapcar 'window-system (frame-list)))
+  (if (memq 'x (mapcar #'window-system (frame-list)))
       (error "Cannot suspend Emacs while running under X")))
 
 (defvar x-initialized nil
@@ -1469,15 +1462,19 @@ This returns an error if any Emacs frames are X frames, or always under W32."
 (gui-method-define gui-select-text x
                    (lambda (text)
                      (when x-select-enable-primary
-                       (x-set-selection 'PRIMARY text)
+                       (gui-set-selection 'PRIMARY text)
                        (setq x-last-selected-text-primary text))
                      (when x-select-enable-clipboard
                        ;; When cutting, the selection is cleared and PRIMARY
                        ;; set to the empty string.  Prevent that, PRIMARY
                        ;; should not be reset by cut (Bug#16382).
                        (setq saved-region-selection text)
-                       (x-set-selection 'CLIPBOARD text)
+                       (gui-set-selection 'CLIPBOARD text)
                        (setq x-last-selected-text-clipboard text))))
+(gui-method-define gui-own-selection x #'x-own-selection-internal)
+(gui-method-define gui-disown-selection x #'x-disown-selection-internal)
+(gui-method-define gui-selection-owner-p x #'x-selection-owner-p)
+(gui-method-define gui-get-selection x #'x-get-selection-internal)
 
 ;; Initiate drag and drop
 (add-hook 'after-make-frame-functions 'x-dnd-init-frame)
index 343a4c25895723be523d55818eacb183707319a4..3f8cbc19dbafbcbf86ffefa96215b60d79afc631 100644 (file)
@@ -41,53 +41,23 @@ That includes all Windows systems except for 9X/Me."
 (declare-function x-server-version "w32fns.c" (&optional display))
 
 ;;; Fix interface to (X-specific) mouse.el
-(defun x-set-selection (type data)
-  "Make an X selection of type TYPE and value DATA.
-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
-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.
-
-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.
-
-Note that on MS-Windows, primary and secondary selections set by Emacs
-are not available to other programs."
-  (put 'x-selections (or type 'PRIMARY) data))
-
-(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.
-
-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.  This argument is
-ignored on MS-Windows and MS-DOS."
-  (get 'x-selections (or type 'PRIMARY)))
-
-;; x-selection-owner-p is used in simple.el
-(defun x-selection-owner-p (&optional selection _terminal)
-  "" ; placeholder for doc.c
-  (and (memq selection '(nil PRIMARY SECONDARY))
-       (get 'x-selections (or selection 'PRIMARY))))
+(gui-method-define gui-own-selection w32
+                   (lambda (type value)
+                     (put 'x-selections (or type 'PRIMARY) data)))
+
+(gui-method-define gui-disown-selection w32
+                   (lambda (type &optional _time-object _frame)
+                     (put 'x-selections (or type 'PRIMARY) nil)))
+
+(gui-method-define gui-get-selection w32
+                   (lambda (&optional type _data-type)
+                     (get 'x-selections (or type 'PRIMARY))))
+
+;; gui-selection-owner-p is used in simple.el
+(gui-method-define gui-selection-owner-p w32
+                   (lambda (selection)
+                     (and (memq selection '(nil PRIMARY SECONDARY))
+                          (get 'x-selections (or selection 'PRIMARY)))))
 
 ;; The "Windows" keys on newer keyboards bring up the Start menu
 ;; whether you want it or not - make Emacs ignore these keystrokes
@@ -103,30 +73,29 @@ ignored on MS-Windows and MS-DOS."
 ;; We keep track of the last text selected here, so we can check the
 ;; current selection against it, and avoid passing back our own text
 ;; from x-selection-value.
-(defvar x-last-selected-text nil)
 
-(defun x-get-selection-value ()
+(defun w32-get-selection-value ()
   "Return the value of the current selection.
 Consult the selection.  Treat empty strings as if they were unset."
   (if gui-select-enable-clipboard
-      (let (text)
-       ;; Don't die if x-get-selection signals an error.
-       (with-demoted-errors "w32-get-clipboard-data:%s"
-         (setq text (w32-get-clipboard-data)))
+      (let ((text
+             ;; Don't die if x-get-selection signals an error.
+             (with-demoted-errors "w32-get-clipboard-data:%S"
+               (w32-get-clipboard-data))))
        (if (string= text "") (setq text nil))
        (cond
         ((not text) nil)
-        ((eq text x-last-selected-text) nil)
-        ((string= text x-last-selected-text)
+        ((eq text gui-last-selected-text) nil)
+        ((string= text gui-last-selected-text)
          ;; Record the newer string, so subsequent calls can use the 'eq' test.
-         (setq x-last-selected-text text)
+         (setq gui-last-selected-text text)
          nil)
         (t
-         (setq x-last-selected-text text))))))
+         (setq gui-last-selected-text text))))))
 \f
-(defalias 'x-selection-value 'x-get-selection-value)
+(defalias 'x-selection-value #'w32-get-selection-value)
 
 ;; Arrange for the kill and yank functions to set and check the clipboard.
-(setq interprogram-paste-function 'x-get-selection-value)
+(setq interprogram-paste-function #'w32-get-selection-value)
 
 (provide 'w32-common-fns)
index 34f19b853896cac8ce9f27f70fb263f09ee569da..2c5aa61e4175e63031f2b89e333e61fd1feefcb5 100644 (file)
@@ -1,3 +1,8 @@
+2014-10-02  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * nsselect.m (ns-own-selection-internal, ns-disown-selection-internal):
+       Rename from the "x-" prefix.
+
 2014-10-01  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        * xselect.c (selection-converter-alist): Fix docstring.
index 038849c0aed7ef2413c6766c0f65eab307a56ed6..3712ba064e792f2dbf0c71d18e92db0b48782a2b 100644 (file)
@@ -328,19 +328,14 @@ ns_string_to_pasteboard (id pb, Lisp_Object str)
    ========================================================================== */
 
 
-DEFUN ("x-own-selection-internal", Fx_own_selection_internal,
-       Sx_own_selection_internal, 2, 3, 0,
+DEFUN ("ns-own-selection-internal", Fns_own_selection_internal,
+       Sns_own_selection_internal, 2, 2, 0,
        doc: /* Assert an X selection of type SELECTION and value VALUE.
 SELECTION is a symbol, typically `PRIMARY', `SECONDARY', or `CLIPBOARD'.
 \(Those are literal upper-case symbol names, since that's what X expects.)
 VALUE is typically a string, or a cons of two markers, but may be
-anything that the functions on `selection-converter-alist' know about.
-
-FRAME should be a frame that should own the selection.  If omitted or
-nil, it defaults to the selected frame.
-
-On Nextstep, FRAME is unused.  */)
-     (Lisp_Object selection, Lisp_Object value, Lisp_Object frame)
+anything that the functions on `selection-converter-alist' know about.  */)
+     (Lisp_Object selection, Lisp_Object value)
 {
   id pb;
   Lisp_Object old_value, new_value;
@@ -385,21 +380,11 @@ On Nextstep, FRAME is unused.  */)
 }
 
 
-DEFUN ("x-disown-selection-internal", Fx_disown_selection_internal,
-       Sx_disown_selection_internal, 1, 3, 0,
+DEFUN ("ns-disown-selection-internal", Fns_disown_selection_internal,
+       Sns_disown_selection_internal, 1, 1, 0,
        doc: /* If we own the selection SELECTION, disown it.
-Disowning it means there is no such selection.
-
-Sets the last-change time for the selection to TIME-OBJECT (by default
-the time of the last event).
-
-TERMINAL should be a terminal object or a frame specifying the X
-server to query.  If omitted or nil, that stands for the selected
-frame's display, or the first available X display.
-
-On Nextstep, the TIME-OBJECT and TERMINAL arguments are unused.
-On MS-DOS, all this does is return non-nil if we own the selection.  */)
-  (Lisp_Object selection, Lisp_Object time_object, Lisp_Object terminal)
+Disowning it means there is no such selection.  */)
+  (Lisp_Object selection)
 {
   id pb;
   check_window_system (NULL);
@@ -443,7 +428,7 @@ On Nextstep, TERMINAL is unused.  */)
 }
 
 
-DEFUN ("x-selection-owner-p", Fx_selection_owner_p, Sx_selection_owner_p,
+DEFUN ("ns-selection-owner-p", Fns_selection_owner_p, Sns_selection_owner_p,
        0, 2, 0,
        doc: /* Whether the current Emacs process owns the given X Selection.
 The arg should be the name of the selection in question, typically one of
@@ -507,7 +492,7 @@ On Nextstep, TIME-STAMP and TERMINAL are unused.  */)
 DEFUN ("ns-get-selection-internal", Fns_get_selection_internal,
        Sns_get_selection_internal, 1, 1, 0,
        doc: /* Returns the value of SELECTION as a string.
-SELECTION is a symbol, typically `PRIMARY', `SECONDARY', or `CLIPBOARD'. */)
+SELECTION is a symbol, typically `PRIMARY', `SECONDARY', or `CLIPBOARD'.  */)
      (Lisp_Object selection)
 {
   id pb;
@@ -520,7 +505,7 @@ SELECTION is a symbol, typically `PRIMARY', `SECONDARY', or `CLIPBOARD'. */)
 DEFUN ("ns-store-selection-internal", Fns_store_selection_internal,
        Sns_store_selection_internal, 2, 2, 0,
        doc: /* Sets the string value of SELECTION.
-SELECTION is a symbol, typically `PRIMARY', `SECONDARY', or `CLIPBOARD'. */)
+SELECTION is a symbol, typically `PRIMARY', `SECONDARY', or `CLIPBOARD'.  */)
      (Lisp_Object selection, Lisp_Object string)
 {
   id pb;
@@ -546,11 +531,11 @@ syms_of_nsselect (void)
   QTEXT      = intern_c_string ("TEXT");       staticpro (&QTEXT);
   QFILE_NAME = intern_c_string ("FILE_NAME");  staticpro (&QFILE_NAME);
 
-  defsubr (&Sx_disown_selection_internal);
+  defsubr (&Sns_disown_selection_internal);
   defsubr (&Sx_get_selection_internal);
-  defsubr (&Sx_own_selection_internal);
+  defsubr (&Sns_own_selection_internal);
   defsubr (&Sx_selection_exists_p);
-  defsubr (&Sx_selection_owner_p);
+  defsubr (&Sns_selection_owner_p);
   defsubr (&Sns_get_selection_internal);
   defsubr (&Sns_store_selection_internal);