Created
February 23, 2014 16:58
-
-
Save suhailshergill/9173965 to your computer and use it in GitHub Desktop.
emacs: get inter-program kill/yank to work
This file contains hidden or 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