X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Fselect.el;h=ef3072e3f047e5f95ab7c4a29e94e5db4107bc3f;hb=11e58c92d2c33159edc7e916d43e59d96c20daaf;hp=db01d6aaca9aa88bc5e0cb3e8e5e08a971b31bca;hpb=113b194be934327de99a168d809271db252c07c4;p=chise%2Fxemacs-chise.git- diff --git a/lisp/select.el b/lisp/select.el index db01d6a..ef3072e 100644 --- a/lisp/select.el +++ b/lisp/select.el @@ -40,6 +40,11 @@ COMPOUND_TEXT and STRING are the most commonly used data types. If a list is provided, the types are tried in sequence until there is a successful conversion.") +(defvar selection-sets-clipboard nil + "Controls the selection's relationship to the clipboard. +When non-nil, any operation that sets the primary selection will also +set the clipboard.") + (defun copy-primary-selection () "Copy the selection to the Clipboard and the kill ring." (interactive) @@ -61,20 +66,34 @@ there is a successful conversion.") (defun yank-clipboard-selection () "Insert the current Clipboard selection at point." (interactive "*") - (case (device-type (selected-device)) - (x (x-yank-clipboard-selection)) - (mswindows (mswindows-paste-clipboard)) - (otherwise nil))) + (when (console-on-window-system-p) + (setq last-command nil) + (setq this-command 'yank) ; so that yank-pop works. + (let ((clip (get-clipboard))) + (or clip (error "there is no clipboard selection")) + (push-mark) + (insert clip)))) + +(defun get-clipboard () + "Return text pasted to the clipboard." + (get-selection 'CLIPBOARD)) (define-device-method get-cutbuffer "Return the value of one of the cut buffers. This will do nothing under anything other than X.") +(defun get-selection-no-error (&optional type data-type) + "Return the value of a Windows selection. +The argument TYPE (default `PRIMARY') says which selection, +and the argument DATA-TYPE (default `STRING', or `COMPOUND_TEXT' under Mule) +says how to convert the data. Returns NIL if there is no selection" + (condition-case err (get-selection type data-type) (t nil))) + (defun get-selection (&optional type data-type) "Return the value of a Windows selection. The argument TYPE (default `PRIMARY') says which selection, and the argument DATA-TYPE (default `STRING', or `COMPOUND_TEXT' under Mule) -says how to convert the data." +says how to convert the data. If there is no selection an error is signalled." (or type (setq type 'PRIMARY)) (or data-type (setq data-type selected-text-type)) (let ((text @@ -127,9 +146,12 @@ Interactively, the text of the region is used as the selection value." valid)) (signal 'error (list "invalid selection" data))) (or type (setq type 'PRIMARY)) - (if data - (own-selection-internal type data) - (disown-selection-internal type)) + (if (null data) + (disown-selection-internal type) + (own-selection-internal type data) + (when (and (eq type 'PRIMARY) + selection-sets-clipboard) + (own-selection-internal 'CLIPBOARD data))) (cond ((eq type 'PRIMARY) (setq primary-selection-extent (select-make-extent-for-selection @@ -163,13 +185,18 @@ Interactively, the text of the region is used as the selection value." (setq lost-selection-hooks 'dehilight-selection) (defun own-clipboard (string) - "Paste the given string to the X Clipboard." + "Paste the given string to the window system Clipboard." (own-selection string 'CLIPBOARD)) (defun disown-selection (&optional secondary-p) "Assuming we own the selection, disown it. With an argument, discard the secondary selection instead of the primary selection." - (disown-selection-internal (if secondary-p 'SECONDARY 'PRIMARY))) + (disown-selection-internal (if secondary-p 'SECONDARY 'PRIMARY)) + (when (and selection-sets-clipboard + (or (not secondary-p) + (eq secondary-p 'PRIMARY) + (eq secondary-p 'CLIPBOARD))) + (disown-selection-internal 'CLIPBOARD))) ;; from x-init.el ;; selections and active regions