summaryrefslogtreecommitdiff
path: root/client/clipboard/clipboard.go
blob: b81b500c67d332f417d0a770a73c55173e51a12f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package clipboard

import (
	"sync"
)

type Clipboard interface {
	Copy(text string)
	Paste() <-chan string
}

type virtualClipboard string

func (clip *virtualClipboard) Copy(text string) {
	*clip = virtualClipboard(text)
}

var ch = make(chan string)
func (clip *virtualClipboard) Paste() <-chan string {
	go func() {
		ch <- string(*clip)
	}()
	return ch
}

var defaultClipboard virtualClipboard
var clipboard Clipboard = &defaultClipboard
var mut sync.RWMutex

func Get() Clipboard {
	mut.RLock()
	c := clipboard
	mut.RUnlock()
	return c
}

func Set(c Clipboard) {
	mut.Lock()
	clipboard = c
	mut.Unlock()
}