refactor: switch to upstream clipboard
This commit is contained in:
parent
6a930ac2ac
commit
695576c5b1
12 changed files with 16 additions and 118 deletions
4
.github/workflows/ci.yml
vendored
4
.github/workflows/ci.yml
vendored
|
|
@ -26,10 +26,6 @@ jobs:
|
|||
with:
|
||||
go-version: stable
|
||||
|
||||
- name: Install libx11-dev for clipboard support
|
||||
if: runner.os == 'Linux'
|
||||
run: sudo apt install libx11-dev
|
||||
|
||||
- name: Test
|
||||
run: go test -v ./...
|
||||
|
||||
|
|
|
|||
|
|
@ -33,10 +33,6 @@ cd discordo
|
|||
go build .
|
||||
```
|
||||
|
||||
### Wayland clipboard support
|
||||
|
||||
`wl-clipboard` is required for clipboard support.
|
||||
|
||||
## Usage
|
||||
|
||||
### Token (UI, recommended)
|
||||
|
|
|
|||
4
go.mod
4
go.mod
|
|
@ -10,7 +10,6 @@ require (
|
|||
github.com/BurntSushi/toml v1.6.0
|
||||
github.com/alecthomas/chroma/v2 v2.26.1
|
||||
github.com/andybalholm/brotli v1.2.1
|
||||
github.com/ayn2op/clipboard v0.0.0-20260308203959-c5ad7df3fc97
|
||||
github.com/ayn2op/tview v0.0.0-20260613222404-bc6acaaf92ef
|
||||
github.com/deckarep/gosx-notifier v0.0.0-20180201035817-e127226297fb
|
||||
github.com/diamondburned/arikawa/v3 v3.6.1-0.20260518050745-b430932b3ee1
|
||||
|
|
@ -28,6 +27,7 @@ require (
|
|||
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966
|
||||
github.com/yuin/goldmark v1.8.2
|
||||
github.com/zalando/go-keyring v0.2.8
|
||||
golang.design/x/clipboard v0.8.0
|
||||
)
|
||||
|
||||
require (
|
||||
|
|
@ -38,6 +38,7 @@ require (
|
|||
github.com/danieljoos/wincred v1.2.3 // indirect
|
||||
github.com/dchest/jsmin v1.0.0 // indirect
|
||||
github.com/dlclark/regexp2/v2 v2.2.1 // indirect
|
||||
github.com/ebitengine/purego v0.10.1 // indirect
|
||||
github.com/esiqveland/notify v0.13.3 // indirect
|
||||
github.com/gdamore/encoding v1.0.1 // indirect
|
||||
github.com/go-ole/go-ole v1.3.0 // indirect
|
||||
|
|
@ -54,6 +55,7 @@ require (
|
|||
github.com/tadvi/systray v0.0.0-20190226123456-11a2b8fa57af // indirect
|
||||
github.com/twmb/murmur3 v1.1.8 // indirect
|
||||
go4.org v0.0.0-20260112195520-a5071408f32f // indirect
|
||||
golang.design/x/x11 v0.2.0 // indirect
|
||||
golang.org/x/exp/shiny v0.0.0-20260611194520-c48552f49976 // indirect
|
||||
golang.org/x/image v0.42.0 // indirect
|
||||
golang.org/x/mobile v0.0.0-20260611195102-4dd8f1dbf5d2 // indirect
|
||||
|
|
|
|||
8
go.sum
8
go.sum
|
|
@ -12,8 +12,6 @@ github.com/alecthomas/repr v0.5.2 h1:SU73FTI9D1P5UNtvseffFSGmdNci/O6RsqzeXJtP0Qs
|
|||
github.com/alecthomas/repr v0.5.2/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
|
||||
github.com/andybalholm/brotli v1.2.1 h1:R+f5xP285VArJDRgowrfb9DqL18yVK0gKAW/F+eTWro=
|
||||
github.com/andybalholm/brotli v1.2.1/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY=
|
||||
github.com/ayn2op/clipboard v0.0.0-20260308203959-c5ad7df3fc97 h1:WujETUV+v0DEJyZgjeLzQvihWyL80c0Tg4qf0dDo+Io=
|
||||
github.com/ayn2op/clipboard v0.0.0-20260308203959-c5ad7df3fc97/go.mod h1:3kFnpNCa3dF6WryzOMCDao7PfZ7DTCh+pievlfuwV80=
|
||||
github.com/ayn2op/tview v0.0.0-20260613222404-bc6acaaf92ef h1:25kloMP4wqA8h5MQBRrPQ9/8O8OzNn0y2fr9gIudFS0=
|
||||
github.com/ayn2op/tview v0.0.0-20260613222404-bc6acaaf92ef/go.mod h1:CaEiemJYKtmWqR0khyMI3HzVIia6B61jOPcLeZ7y4xk=
|
||||
github.com/clipperhouse/displaywidth v0.11.0 h1:lBc6kY44VFw+TDx4I8opi/EtL9m20WSEFgwIwO+UVM8=
|
||||
|
|
@ -35,6 +33,8 @@ github.com/diamondburned/ningen/v3 v3.0.1-0.20260306213430-5a08d3a709b4 h1:m1Wyr
|
|||
github.com/diamondburned/ningen/v3 v3.0.1-0.20260306213430-5a08d3a709b4/go.mod h1:JSqSCBN5MAI9yjAO6tZlSayXM9KWx+8q3EhhlkCuscM=
|
||||
github.com/dlclark/regexp2/v2 v2.2.1 h1:mf4KkFUj0gJuarK8P+LgiS+Lit7m9N1yAwEfPbee7R0=
|
||||
github.com/dlclark/regexp2/v2 v2.2.1/go.mod h1:avUrQvPaLz2DrFNHJF0taWAFFX2C1GMSSoeiqFjcBmU=
|
||||
github.com/ebitengine/purego v0.10.1 h1:dewVBCBT2GaMu1SrNTYxQhgQBethzfhiwvZiLGP/qyY=
|
||||
github.com/ebitengine/purego v0.10.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
|
||||
github.com/esiqveland/notify v0.13.3 h1:QCMw6o1n+6rl+oLUfg8P1IIDSFsDEb2WlXvVvIJbI/o=
|
||||
github.com/esiqveland/notify v0.13.3/go.mod h1:hesw/IRYTO0x99u1JPweAl4+5mwXJibQVUcP0Iu5ORE=
|
||||
github.com/gdamore/encoding v1.0.1 h1:YzKZckdBL6jVt2Gc+5p82qhrGiqMdG/eNs6Wy0u3Uhw=
|
||||
|
|
@ -115,6 +115,10 @@ go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
|||
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
|
||||
go4.org v0.0.0-20260112195520-a5071408f32f h1:ziUVAjmTPwQMBmYR1tbdRFJPtTcQUI12fH9QQjfb0Sw=
|
||||
go4.org v0.0.0-20260112195520-a5071408f32f/go.mod h1:ZRJnO5ZI4zAwMFp+dS1+V6J6MSyAowhRqAE+DPa1Xp0=
|
||||
golang.design/x/clipboard v0.8.0 h1:6VEcH28wwcSgKc+vnxHHDWiRjrakTQIAJnPUrt3aOgg=
|
||||
golang.design/x/clipboard v0.8.0/go.mod h1:s0pwrtA3Q9fgnVtGDmP5ZK/pp55cQKB23esKsjwWhWM=
|
||||
golang.design/x/x11 v0.2.0 h1:Uiwu2guGihsJX/ZCzpoDPFz5gR/Qntm08mvoBCmRydo=
|
||||
golang.design/x/x11 v0.2.0/go.mod h1:/5q1mFkdc1rL8mvB7DsQFi6as4tIkBv4FXjcP07mrkE=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/exp/shiny v0.0.0-20260611194520-c48552f49976 h1:xAKfctaZuXDxw/I98uYRl7TXMBy4a1BgPgl7NavbrdY=
|
||||
|
|
|
|||
|
|
@ -1,10 +0,0 @@
|
|||
package clipboard
|
||||
|
||||
import "github.com/ayn2op/clipboard"
|
||||
|
||||
type Format = clipboard.Format
|
||||
|
||||
const (
|
||||
FmtText Format = clipboard.FmtText
|
||||
FmtImage = clipboard.FmtImage
|
||||
)
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
//go:build !linux && !freebsd
|
||||
|
||||
package clipboard
|
||||
|
||||
import (
|
||||
"github.com/ayn2op/clipboard"
|
||||
)
|
||||
|
||||
func Init() error {
|
||||
return clipboard.Init()
|
||||
}
|
||||
|
||||
func Read(t Format) ([]byte, error) {
|
||||
return clipboard.Read(clipboard.Format(t))
|
||||
}
|
||||
|
||||
func Write(t Format, buf []byte) error {
|
||||
return clipboard.Write(clipboard.Format(t), buf)
|
||||
}
|
||||
|
|
@ -1,62 +0,0 @@
|
|||
//go:build linux || freebsd
|
||||
|
||||
package clipboard
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"github.com/ayn2op/clipboard"
|
||||
"os"
|
||||
"os/exec"
|
||||
)
|
||||
|
||||
var wayland bool
|
||||
|
||||
func Init() error {
|
||||
if _, ok := os.LookupEnv("WAYLAND_DISPLAY"); !ok {
|
||||
return clipboard.Init()
|
||||
}
|
||||
if _, err := exec.LookPath("wl-copy"); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := exec.LookPath("wl-paste"); err != nil {
|
||||
return err
|
||||
}
|
||||
wayland = true
|
||||
return nil
|
||||
}
|
||||
|
||||
func Read(t Format) ([]byte, error) {
|
||||
if !wayland {
|
||||
return clipboard.Read(clipboard.Format(t))
|
||||
}
|
||||
// -n: Don't print a newline at the end
|
||||
// -t type: MIME type specifier
|
||||
cmd := exec.Command("wl-paste", "-nt", formatToType(t))
|
||||
outBuffer := bytes.Buffer{}
|
||||
cmd.Stdout = &outBuffer
|
||||
if err := cmd.Run(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return outBuffer.Bytes(), nil
|
||||
}
|
||||
|
||||
func Write(t Format, buf []byte) error {
|
||||
if !wayland {
|
||||
return clipboard.Write(clipboard.Format(t), buf)
|
||||
}
|
||||
// -t type: MIME type specifier
|
||||
cmd := exec.Command("wl-copy", "-t", formatToType(t))
|
||||
cmd.Stdin = bytes.NewReader(buf)
|
||||
return cmd.Run()
|
||||
}
|
||||
|
||||
func formatToType(t Format) string {
|
||||
switch t {
|
||||
case FmtImage:
|
||||
return "image"
|
||||
case FmtText:
|
||||
fallthrough
|
||||
default:
|
||||
return "text/plain;charset=utf-8"
|
||||
}
|
||||
}
|
||||
|
|
@ -14,7 +14,6 @@ import (
|
|||
"unicode"
|
||||
|
||||
"github.com/ayn2op/discordo/internal/cache"
|
||||
"github.com/ayn2op/discordo/internal/clipboard"
|
||||
"github.com/ayn2op/discordo/internal/config"
|
||||
"github.com/ayn2op/discordo/internal/consts"
|
||||
"github.com/ayn2op/discordo/internal/ui"
|
||||
|
|
@ -32,6 +31,7 @@ import (
|
|||
"github.com/ncruces/zenity"
|
||||
"github.com/sahilm/fuzzy"
|
||||
"github.com/yuin/goldmark/ast"
|
||||
"golang.design/x/clipboard"
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
@ -80,12 +80,7 @@ func newComposer(cfg *config.Config, chat *Model) *composer {
|
|||
}
|
||||
},
|
||||
func() string {
|
||||
data, err := clipboard.Read(clipboard.FmtText)
|
||||
if err != nil {
|
||||
slog.Error("failed to read clipboard text", "err", err)
|
||||
return ""
|
||||
}
|
||||
return string(data)
|
||||
return string(clipboard.Read(clipboard.FmtText))
|
||||
},
|
||||
).
|
||||
SetDisabled(true)
|
||||
|
|
@ -249,11 +244,7 @@ type imagePastedMsg []byte
|
|||
|
||||
func (c *composer) pasteImage() tview.Cmd {
|
||||
return func() tview.Msg {
|
||||
data, err := clipboard.Read(clipboard.FmtImage)
|
||||
if err != nil {
|
||||
slog.Error("failed to read clipboard image", "err", err)
|
||||
return nil
|
||||
}
|
||||
data := clipboard.Read(clipboard.FmtImage)
|
||||
return imagePastedMsg(data)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import (
|
|||
"fmt"
|
||||
"log/slog"
|
||||
|
||||
"github.com/ayn2op/discordo/internal/clipboard"
|
||||
"github.com/ayn2op/discordo/internal/config"
|
||||
"github.com/ayn2op/discordo/internal/ui"
|
||||
"github.com/ayn2op/tview"
|
||||
|
|
@ -15,6 +14,7 @@ import (
|
|||
"github.com/diamondburned/arikawa/v3/gateway"
|
||||
"github.com/diamondburned/ningen/v3"
|
||||
"github.com/gdamore/tcell/v3"
|
||||
"golang.design/x/clipboard"
|
||||
)
|
||||
|
||||
type dmNode struct{}
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ import (
|
|||
|
||||
"github.com/ayn2op/tview/layers"
|
||||
|
||||
"github.com/ayn2op/discordo/internal/clipboard"
|
||||
"github.com/ayn2op/discordo/internal/config"
|
||||
"github.com/ayn2op/discordo/internal/consts"
|
||||
"github.com/ayn2op/discordo/internal/markdown"
|
||||
|
|
@ -38,6 +37,7 @@ import (
|
|||
"github.com/yuin/goldmark/ast"
|
||||
"github.com/yuin/goldmark/parser"
|
||||
"github.com/yuin/goldmark/text"
|
||||
"golang.design/x/clipboard"
|
||||
)
|
||||
|
||||
type messagesList struct {
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@ package login
|
|||
import (
|
||||
"log/slog"
|
||||
|
||||
"github.com/ayn2op/discordo/internal/clipboard"
|
||||
"github.com/ayn2op/tview"
|
||||
"golang.design/x/clipboard"
|
||||
)
|
||||
|
||||
type errMsg struct {
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@ package root
|
|||
import (
|
||||
"log/slog"
|
||||
|
||||
"github.com/ayn2op/discordo/internal/clipboard"
|
||||
"github.com/ayn2op/discordo/internal/keyring"
|
||||
"github.com/ayn2op/tview"
|
||||
"golang.design/x/clipboard"
|
||||
)
|
||||
|
||||
type tokenMsg string
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue