aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/zyedidia/clipboard/clipboard_unix.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/zyedidia/clipboard/clipboard_unix.go')
-rw-r--r--vendor/github.com/zyedidia/clipboard/clipboard_unix.go105
1 files changed, 105 insertions, 0 deletions
diff --git a/vendor/github.com/zyedidia/clipboard/clipboard_unix.go b/vendor/github.com/zyedidia/clipboard/clipboard_unix.go
new file mode 100644
index 0000000..87d0251
--- /dev/null
+++ b/vendor/github.com/zyedidia/clipboard/clipboard_unix.go
@@ -0,0 +1,105 @@
+// Copyright 2013 @atotto. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build freebsd linux netbsd openbsd solaris
+
+package clipboard
+
+import "os/exec"
+
+const (
+ xsel = "xsel"
+ xclip = "xclip"
+)
+
+var (
+ internalClipboards map[string]string
+)
+
+func init() {
+ if _, err := exec.LookPath(xclip); err == nil {
+ if err := exec.Command("xclip", "-o").Run(); err == nil {
+ return
+ }
+ }
+ if _, err := exec.LookPath(xsel); err == nil {
+ if err := exec.Command("xsel").Run(); err == nil {
+ return
+ }
+ }
+
+ internalClipboards = make(map[string]string)
+ Unsupported = true
+}
+
+func copyCommand(register string) []string {
+ if _, err := exec.LookPath(xclip); err == nil {
+ return []string{xclip, "-in", "-selection", register}
+ }
+
+ if _, err := exec.LookPath(xsel); err == nil {
+ return []string{xsel, "--input", "--" + register}
+ }
+
+ return []string{}
+}
+func pasteCommand(register string) []string {
+ if _, err := exec.LookPath(xclip); err == nil {
+ return []string{xclip, "-out", "-selection", register}
+ }
+
+ if _, err := exec.LookPath(xsel); err == nil {
+ return []string{xsel, "--output", "--" + register}
+ }
+
+ return []string{}
+}
+
+func getPasteCommand(register string) *exec.Cmd {
+ pasteCmdArgs := pasteCommand(register)
+ return exec.Command(pasteCmdArgs[0], pasteCmdArgs[1:]...)
+}
+
+func getCopyCommand(register string) *exec.Cmd {
+ copyCmdArgs := copyCommand(register)
+ return exec.Command(copyCmdArgs[0], copyCmdArgs[1:]...)
+}
+
+func readAll(register string) (string, error) {
+ if Unsupported {
+ if text, ok := internalClipboards[register]; ok {
+ return text, nil
+ }
+ return "", nil
+ }
+ pasteCmd := getPasteCommand(register)
+ out, err := pasteCmd.Output()
+ if err != nil {
+ return "", err
+ }
+ return string(out), nil
+}
+
+func writeAll(text string, register string) error {
+ if Unsupported {
+ internalClipboards[register] = text
+ return nil
+ }
+ copyCmd := getCopyCommand(register)
+ in, err := copyCmd.StdinPipe()
+ if err != nil {
+ return err
+ }
+
+ if err := copyCmd.Start(); err != nil {
+ return err
+ }
+ if _, err := in.Write([]byte(text)); err != nil {
+ return err
+ }
+ if err := in.Close(); err != nil {
+ return err
+ }
+ return copyCmd.Wait()
+}