summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorAndrew Innes <andrewi@gnu.org>2000-12-08 14:32:49 +0000
committerAndrew Innes <andrewi@gnu.org>2000-12-08 14:32:49 +0000
commit3b4cf5db1655250c13ed72eb521523f97b6ba553 (patch)
tree54f582260b4fecfe75975f2cc1601bd187eb35b7 /lisp
parent9ab80679a3f02f7ced6fcee9cd9f6562bd74ce2e (diff)
downloademacs-3b4cf5db1655250c13ed72eb521523f97b6ba553.tar.gz
Add clipboard support from term/w32-win.el, so it is
accessible in -nw mode.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/w32-fns.el55
1 files changed, 55 insertions, 0 deletions
diff --git a/lisp/w32-fns.el b/lisp/w32-fns.el
index 41f4a34ff0b..ab9c8d82212 100644
--- a/lisp/w32-fns.el
+++ b/lisp/w32-fns.el
@@ -408,4 +408,59 @@ bit output with no translation."
(make-obsolete-variable 'w32-charset-to-codepage-alist
'w32-charset-info-alist "21.1")
+
+;;;; Selections and cut buffers
+
+;;; 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-cut-buffer-or-selection-value.
+(defvar x-last-selected-text nil)
+
+;;; It is said that overlarge strings are slow to put into the cut buffer.
+;;; Note this value is overridden below.
+(defvar x-cut-buffer-max 20000
+ "Max number of characters to put in the cut buffer.")
+
+(defcustom x-select-enable-clipboard t
+ "Non-nil means cutting and pasting uses the clipboard.
+This is in addition to the primary selection."
+ :type 'boolean
+ :group 'killing)
+
+(defun x-select-text (text &optional push)
+ "Make TEXT the last selected text.
+If `x-select-enable-clipboard' is non-nil, copy the text to the system
+clipboard as well. Optional PUSH is ignored on Windows."
+ (if x-select-enable-clipboard
+ (w32-set-clipboard-data text))
+ (setq x-last-selected-text text))
+
+(defun x-get-selection-value ()
+ "Return the value of the current selection.
+Consult the selection, then the cut buffer. Treat empty strings as if
+they were unset."
+ (if x-select-enable-clipboard
+ (let (text)
+ ;; Don't die if x-get-selection signals an error.
+ (condition-case c
+ (setq text (w32-get-clipboard-data))
+ (error (message "w32-get-clipboard-data:%s" c)))
+ (if (string= text "") (setq text nil))
+ (cond
+ ((not text) nil)
+ ((eq text x-last-selected-text) nil)
+ ((string= text x-last-selected-text)
+ ;; Record the newer string, so subsequent calls can use the 'eq' test.
+ (setq x-last-selected-text text)
+ nil)
+ (t
+ (setq x-last-selected-text text))))))
+
+(defalias 'x-cut-buffer-or-selection-value 'x-get-selection-value)
+
+;;; Arrange for the kill and yank functions to set and check the clipboard.
+(setq interprogram-cut-function 'x-select-text)
+(setq interprogram-paste-function 'x-get-selection-value)
+
+
;;; w32-fns.el ends here