From ee38ddc390f79891dbcf5cfabea8cbd695677458 Mon Sep 17 00:00:00 2001 From: Leo Liu Date: Sun, 5 Feb 2012 21:21:55 -0500 Subject: [PATCH 1/1] Add xclip.el. --- packages/xclip/xclip.el | 112 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 packages/xclip/xclip.el diff --git a/packages/xclip/xclip.el b/packages/xclip/xclip.el new file mode 100644 index 000000000..5b5e28e52 --- /dev/null +++ b/packages/xclip/xclip.el @@ -0,0 +1,112 @@ +;;; xclip.el --- Emacs Interface to XClip + +;; Copyright (C) 2007 Leo Shidai Liu + +;; Author: Leo Shidai Liu +;; Keywords: convenience, tools +;; Created: 2007-12-30 + +;; $Id: xclip.el,v 0.9 2008/02/10 11:12:56 leo Exp $ + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 3, or (at your option) +;; any later version. + +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;; This code provides an Emacs interface to the tool with the same +;; name on http://people.debian.org/~kims/xclip/. + +;;; Code: +(defvar xclip-program (executable-find "xclip") + "Name of XClip program tool.") + +(defvar xclip-select-enable-clipboard t + "Non-nil means cutting and pasting uses the clipboard. +This is in addition to, but in preference to, the primary selection.") + +(defvar xclip-last-selected-text-clipboard nil + "The value of the CLIPBOARD X selection from xclip.") + +(defvar xclip-last-selected-text-primary nil + "The value of the PRIMARY X selection from xclip.") + +(defun xclip-set-selection (type data) + "TYPE is a symbol: primary, secondary and clipboard. + +See `x-set-selection'." + (when (and xclip-program (getenv "DISPLAY")) + (let* ((process-connection-type nil) + (proc (start-process "xclip" nil "xclip" + "-selection" (symbol-name type)))) + (process-send-string proc data) + (process-send-eof proc)))) + +(defun xclip-select-text (text &optional push) + "See `x-select-text'." + (xclip-set-selection 'primary text) + (setq xclip-last-selected-text-primary text) + (when xclip-select-enable-clipboard + (xclip-set-selection 'clipboard text) + (setq xclip-last-selected-text-clipboard text))) + +(defun xclip-selection-value () + "See `x-cut-buffer-or-selection-value'." + (when (and xclip-program (getenv "DISPLAY")) + (let (clip-text primary-text) + (when xclip-select-enable-clipboard + (setq clip-text (shell-command-to-string "xclip -o -selection clipboard")) + (setq clip-text + (cond ;; check clipboard selection + ((or (not clip-text) (string= clip-text "")) + (setq xclip-last-selected-text-primary nil)) + ((eq clip-text xclip-last-selected-text-clipboard) nil) + ((string= clip-text xclip-last-selected-text-clipboard) + ;; Record the newer string, + ;; so subsequent calls can use the `eq' test. + (setq xclip-last-selected-text-clipboard clip-text) + nil) + (t (setq xclip-last-selected-text-clipboard clip-text))))) + (setq primary-text (shell-command-to-string "xclip -o")) + (setq primary-text + (cond ;; check primary selection + ((or (not primary-text) (string= primary-text "")) + (setq xclip-last-selected-text-primary nil)) + ((eq primary-text xclip-last-selected-text-primary) nil) + ((string= primary-text xclip-last-selected-text-primary) + ;; Record the newer string, + ;; so subsequent calls can use the `eq' test. + (setq xclip-last-selected-text-primary primary-text) + nil) + (t (setq xclip-last-selected-text-primary primary-text)))) + (or clip-text primary-text)))) + +;;;###autoload +(defun turn-on-xclip () + (interactive) + (setq interprogram-cut-function 'xclip-select-text) + (setq interprogram-paste-function 'xclip-selection-value)) + +;;;###autoload +(defun turn-off-xclip () + (interactive) + (setq interprogram-cut-function nil) + (setq interprogram-paste-function nil)) + + +(add-hook 'terminal-init-xterm-hook 'turn-on-xclip) + + +(provide 'xclip) +;;; xclip.el ends here -- 2.39.2