Fix bug #15090 with redisplay under linum-mode and visual-line-mode.
[emacs.git] / lisp / w32-common-fns.el
blob9f3501a01d7422f0bdf72db32a4ee45b326b231e
1 ;;; w32-common-fns.el --- Lisp routines for Windows and Cygwin-w32
3 ;; Copyright (C) 1994, 2001-2013 Free Software Foundation, Inc.
5 ;; This file is part of GNU Emacs.
7 ;; GNU Emacs is free software: you can redistribute it and/or modify
8 ;; it under the terms of the GNU General Public License as published by
9 ;; the Free Software Foundation, either version 3 of the License, or
10 ;; (at your option) any later version.
12 ;; GNU Emacs is distributed in the hope that it will be useful,
13 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
14 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 ;; GNU General Public License for more details.
17 ;; You should have received a copy of the GNU General Public License
18 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
20 ;;; Commentary:
21 ;;;
22 ;;; This file contains functions that are used by both native NT Emacs
23 ;;; and Cygwin Emacs compiled to use the native Windows widget
24 ;;; library.
26 (defun w32-version ()
27 "Return the MS-Windows version numbers.
28 The value is a list of three integers: the major and minor version
29 numbers, and the build number."
30 (x-server-version))
32 (defun w32-using-nt ()
33 "Return non-nil if running on a Windows NT descendant.
34 That includes all Windows systems except for 9X/Me."
35 (getenv "SystemRoot"))
37 (declare-function w32-get-clipboard-data "w32select.c")
38 (declare-function w32-set-clipboard-data "w32select.c")
39 (declare-function x-server-version "w32fns.c" (&optional display))
41 ;;; Fix interface to (X-specific) mouse.el
42 (defun x-set-selection (type data)
43 "Make an X selection of type TYPE and value DATA.
44 The argument TYPE (nil means `PRIMARY') says which selection, and
45 DATA specifies the contents. TYPE must be a symbol. \(It can also
46 be a string, which stands for the symbol with that name, but this
47 is considered obsolete.) DATA may be a string, a symbol, an
48 integer (or a cons of two integers or list of two integers).
50 The selection may also be a cons of two markers pointing to the same buffer,
51 or an overlay. In these cases, the selection is considered to be the text
52 between the markers *at whatever time the selection is examined*.
53 Thus, editing done in the buffer after you specify the selection
54 can alter the effective value of the selection.
56 The data may also be a vector of valid non-vector selection values.
58 The return value is DATA.
60 Interactively, this command sets the primary selection. Without
61 prefix argument, it reads the selection in the minibuffer. With
62 prefix argument, it uses the text of the region as the selection value.
64 Note that on MS-Windows, primary and secondary selections set by Emacs
65 are not available to other programs."
66 (put 'x-selections (or type 'PRIMARY) data))
68 (defun x-get-selection (&optional type _data-type)
69 "Return the value of an X Windows selection.
70 The argument TYPE (default `PRIMARY') says which selection,
71 and the argument DATA-TYPE (default `STRING') says
72 how to convert the data.
74 TYPE may be any symbol \(but nil stands for `PRIMARY'). However,
75 only a few symbols are commonly used. They conventionally have
76 all upper-case names. The most often used ones, in addition to
77 `PRIMARY', are `SECONDARY' and `CLIPBOARD'.
79 DATA-TYPE is usually `STRING', but can also be one of the symbols
80 in `selection-converter-alist', which see."
81 (get 'x-selections (or type 'PRIMARY)))
83 ;; x-selection-owner-p is used in simple.el
84 (defun x-selection-owner-p (&optional type)
85 (and (memq type '(nil PRIMARY SECONDARY))
86 (get 'x-selections (or type 'PRIMARY))))
88 ;; The "Windows" keys on newer keyboards bring up the Start menu
89 ;; whether you want it or not - make Emacs ignore these keystrokes
90 ;; rather than beep.
91 (global-set-key [lwindow] 'ignore)
92 (global-set-key [rwindow] 'ignore)
94 (defvar w32-charset-info-alist) ; w32font.c
97 ;;;; Selections
99 ;; We keep track of the last text selected here, so we can check the
100 ;; current selection against it, and avoid passing back our own text
101 ;; from x-selection-value.
102 (defvar x-last-selected-text nil)
104 (defun x-get-selection-value ()
105 "Return the value of the current selection.
106 Consult the selection. Treat empty strings as if they were unset."
107 (if x-select-enable-clipboard
108 (let (text)
109 ;; Don't die if x-get-selection signals an error.
110 (condition-case c
111 (setq text (w32-get-clipboard-data))
112 (error (message "w32-get-clipboard-data:%s" c)))
113 (if (string= text "") (setq text nil))
114 (cond
115 ((not text) nil)
116 ((eq text x-last-selected-text) nil)
117 ((string= text x-last-selected-text)
118 ;; Record the newer string, so subsequent calls can use the 'eq' test.
119 (setq x-last-selected-text text)
120 nil)
122 (setq x-last-selected-text text))))))
124 (defalias 'x-selection-value 'x-get-selection-value)
126 ;; Arrange for the kill and yank functions to set and check the clipboard.
127 (setq interprogram-cut-function 'x-select-text)
128 (setq interprogram-paste-function 'x-get-selection-value)
130 (provide 'w32-common-fns)