summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
Diffstat (limited to 'client')
-rw-r--r--client/clipboard/clipboard.go10
-rw-r--r--client/clipboard/shell_clipboard.go8
-rw-r--r--client/command.go9
-rw-r--r--client/main.go7
4 files changed, 23 insertions, 11 deletions
diff --git a/client/clipboard/clipboard.go b/client/clipboard/clipboard.go
index b81b500..632ec43 100644
--- a/client/clipboard/clipboard.go
+++ b/client/clipboard/clipboard.go
@@ -9,21 +9,21 @@ type Clipboard interface {
Paste() <-chan string
}
-type virtualClipboard string
+type VirtualClipboard string
-func (clip *virtualClipboard) Copy(text string) {
- *clip = virtualClipboard(text)
+func (clip *VirtualClipboard) Copy(text string) {
+ *clip = VirtualClipboard(text)
}
var ch = make(chan string)
-func (clip *virtualClipboard) Paste() <-chan string {
+func (clip *VirtualClipboard) Paste() <-chan string {
go func() {
ch <- string(*clip)
}()
return ch
}
-var defaultClipboard virtualClipboard
+var defaultClipboard VirtualClipboard
var clipboard Clipboard = &defaultClipboard
var mut sync.RWMutex
diff --git a/client/clipboard/shell_clipboard.go b/client/clipboard/shell_clipboard.go
index 9d8ecc8..af0130d 100644
--- a/client/clipboard/shell_clipboard.go
+++ b/client/clipboard/shell_clipboard.go
@@ -7,8 +7,8 @@ import (
)
type ShellClipboard struct {
- copyCommand string
- pasteCommand string
+ CopyCommand string
+ PasteCommand string
testCommand string
}
@@ -32,7 +32,7 @@ func (c ShellClipboard) Test() bool {
}
func (c ShellClipboard) Copy(text string) {
- cmd := command(c.copyCommand)
+ cmd := command(c.CopyCommand)
pipe, err := cmd.StdinPipe()
cmd.Start()
go func() {
@@ -47,7 +47,7 @@ func (c ShellClipboard) Copy(text string) {
}
func (c ShellClipboard) Paste() <-chan string {
- cmd := command(c.pasteCommand)
+ cmd := command(c.PasteCommand)
pipe, err := cmd.StdoutPipe()
cmd.Start()
ch := make(chan string, 1)
diff --git a/client/command.go b/client/command.go
index a96839c..108452c 100644
--- a/client/command.go
+++ b/client/command.go
@@ -3,6 +3,7 @@ package main
import (
"citrons.xyz/talk/proto"
"citrons.xyz/talk/client/window"
+ "citrons.xyz/talk/client/clipboard"
)
func isCommand(text string) (bool, string) {
@@ -106,6 +107,14 @@ func (a *application) doCommand(command string, args []string, text string) {
a.cmdWindow.err(err.Error())
}
return
+ case "clipboard-command":
+ if !argN(2) {
+ return
+ }
+ clipboard.Set(clipboard.ShellClipboard {
+ CopyCommand: args[0], PasteCommand: args[1],
+ })
+ return
}
if !a.connected {
diff --git a/client/main.go b/client/main.go
index dc3070c..6653203 100644
--- a/client/main.go
+++ b/client/main.go
@@ -19,8 +19,6 @@ func main() {
address = "talk.citrons.xyz:27508"
}
- go clipboard.DiscoverCommand()
-
err := tui.Start()
if err != nil {
fmt.Fprintln(os.Stderr, "error initializing terminal: ", err)
@@ -35,6 +33,11 @@ func main() {
go globalApp.RunClient()
defer globalApp.Stop()
+ switch clipboard.Get().(type) {
+ case *clipboard.VirtualClipboard:
+ go clipboard.DiscoverCommand()
+ }
+
drawTick := time.Tick(time.Second / 60)
for {
select {