Created
July 31, 2012 07:16
-
-
Save suhailshergill/3214455 to your computer and use it in GitHub Desktop.
xsel voodoo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(setq x-select-enable-clipboard t) | |
;; [[https://hugoheden.wordpress.com/2009/03/08/copypaste-with-emacs-in-terminal/][source]] | |
;; If emacs is run in a terminal, the clipboard- functions have no | |
;; effect. Instead, we use of xsel, see | |
;; http://www.vergenet.net/~conrad/software/xsel/ -- "a command-line | |
;; program for getting and setting the contents of the X selection" | |
(unless window-system | |
(when (getenv "DISPLAY") | |
;; Callback for when user cuts | |
(defun xsel-cut-function (text &optional push) | |
;; Insert text to temp-buffer, and "send" content to xsel stdin | |
(with-temp-buffer | |
(insert text) | |
;; I prefer using the "clipboard" selection (the one the | |
;; typically is used by c-c/c-v) before the primary selection | |
;; (that uses mouse-select/middle-button-click) | |
(call-process-region (point-min) (point-max) "xsel" nil 0 nil | |
"--clipboard" "--input"))) | |
;; Call back for when user pastes | |
(defun xsel-paste-function() | |
;; Find out what is current selection by xsel. If it is different | |
;; from the top of the kill-ring (car kill-ring), then return | |
;; it. Else, nil is returned, so whatever is in the top of the | |
;; kill-ring will be used. | |
(let ((xsel-output (shell-command-to-string "xsel --clipboard --output"))) | |
(unless (string= (car kill-ring) xsel-output) | |
xsel-output ))) | |
;; Attach callbacks to hooks | |
(setq interprogram-cut-function 'xsel-cut-function) | |
(setq interprogram-paste-function 'xsel-paste-function) | |
;; Idea from | |
;; http://shreevatsa.wordpress.com/2006/10/22/emacs-copypaste-and-x/ | |
;; http://www.mail-archive.com/[email protected]/msg03577.html | |
)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment