diff options
Diffstat (limited to 'client')
| -rw-r--r-- | client/clipboard/clipboard.go | 10 | ||||
| -rw-r--r-- | client/clipboard/shell_clipboard.go | 8 | ||||
| -rw-r--r-- | client/command.go | 9 | ||||
| -rw-r--r-- | client/main.go | 7 |
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 { |
