diff --git a/layers/+tools/xclipboard/README.org b/layers/+tools/xclipboard/README.org new file mode 100644 index 000000000000..866a178844bd --- /dev/null +++ b/layers/+tools/xclipboard/README.org @@ -0,0 +1,15 @@ +#+TITLE: xclipboard layer + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#key-bindings][Key Bindings]] + +* Description +This layer adds copy/paste support to the X-clipboard from the terminal. + +* Key Bindings + +| Key Binding | Description | +|-------------+---------------------------------------------| +| ~SPC x y~ | Copy selection to clipboard | +| ~SPC x p~ | Paste clipboard contents at cursor position | diff --git a/layers/+tools/xclipboard/funcs.el b/layers/+tools/xclipboard/funcs.el new file mode 100644 index 000000000000..d52e237fe84b --- /dev/null +++ b/layers/+tools/xclipboard/funcs.el @@ -0,0 +1,97 @@ +;;; funcs.el --- xclipboard layer functions file for Spacemacs. +;; +;; Copyright (c) 2012-2018 Sylvain Benner & Contributors +;; +;; Authors: Charles Weill +;; Google LLC. +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun spacemacs//xclipboard-get-display () + (shell-command-to-string "if [[ -n $TMUX ]]; then + export DISPLAY=$(tmux show-environment | grep -o '^DISPLAY.*$' | sed 's/DISPLAY=//') + fi + if [[ -z $DISPLAY ]]; then + export DISPLAY=:0 + fi + printf $DISPLAY") + ) + +(defun spacemacs//xclipboard-get-copy-command () + (shell-command-to-string "command_exists() { + local command=\"$1\" + type \"$command\" >/dev/null 2>&1 + } + + # Installing reattach-to-user-namespace is recommended on OS X + if command_exists \"pbcopy\"; then + if command_exists \"reattach-to-user-namespace\"; then + printf \"reattach-to-user-namespace pbcopy\" + else + printf \"pbcopy\" + fi + elif command_exists \"clip.exe\"; then # WSL clipboard command + printf \"clip.exe\" + elif command_exists \"xsel\"; then + printf \"xsel -ib\" + elif command_exists \"putclip\"; then # cygwin clipboard command + printf \"putclip\" + fi") + ) + +(defun spacemacs//xclipboard-get-paste-command () + (shell-command-to-string "command_exists() { + local command=\"$1\" + type \"$command\" >/dev/null 2>&1 + } + + # Installing reattach-to-user-namespace is recommended on OS X + if command_exists \"pbpaste\"; then + if command_exists \"reattach-to-user-namespace\"; then + printf \"reattach-to-user-namespace pbpaste\" + else + printf \"pbpaste\" + fi + elif command_exists \"paste.exe\"; then # WSL clipboard command + printf \"paste.exe\" + elif command_exists \"xsel\"; then + printf \"xsel -ob\" + elif command_exists \"getclip\"; then # cygwin clipboard command + printf \"getclip\" + fi") + ) + +(defun spacemacs/xclipboard-copy () + "Copies selection to x-clipboard." + (interactive) + (if (display-graphic-p) + (progn + (message "Copied region to x-clipboard!") + (call-interactively 'clipboard-kill-ring-save) + ) + (if (region-active-p) + (progn + (shell-command-on-region (region-beginning) (region-end) (format "DISPLAY=%s %s" (spacemacs//xclipboard-get-display) (spacemacs//xclipboard-get-copy-command))) + (message (format "Copied region to clipboard \"%s\"!" (spacemacs//xclipboard-get-display))) + (deactivate-mark) + ) + (message "No region active; can't copy to clipboard!") + ) + ) + ) + +(defun spacemacs/xclipboard-paste () + "Pastes from x-clipboard." + (interactive) + (if (display-graphic-p) + (progn + (clipboard-yank) + (message "graphics active") + ) + (insert (shell-command-to-string (format "DISPLAY=%s %s" (spacemacs//xclipboard-get-display) (spacemacs//xclipboard-get-paste-command)))) + ) + (message (format "Pasted from clipboard \"%s\"!" (spacemacs//xclipboard-get-display))) + ) diff --git a/layers/+tools/xclipboard/keybindings.el b/layers/+tools/xclipboard/keybindings.el new file mode 100644 index 000000000000..7bcbaa1e491b --- /dev/null +++ b/layers/+tools/xclipboard/keybindings.el @@ -0,0 +1,14 @@ +;;; keybindings.el --- xclipboard layer keybindings file for Spacemacs. +;; +;; Copyright (c) 2012-2018 Sylvain Benner & Contributors +;; +;; Authors: Charles Weill +;; Google LLC. +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(evil-leader/set-key "x y" 'spacemacs/xclipboard-copy) +(evil-leader/set-key "x p" 'spacemacs/xclipboard-paste) diff --git a/layers/+tools/xclipboard/packages.el b/layers/+tools/xclipboard/packages.el new file mode 100644 index 000000000000..f535388fe820 --- /dev/null +++ b/layers/+tools/xclipboard/packages.el @@ -0,0 +1,16 @@ +;;; packages.el --- xclipboard layer packages file for Spacemacs. +;; +;; Copyright (c) 2012-2018 Sylvain Benner & Contributors +;; +;; Authors: Charles Weill +;; Google LLC. +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defconst xclipboard-packages '()) + +(defun xclipboard/init-xclipboard () + (use-package xclipboard))