From dfe917a4ff5ceab21328febcfaf1ff536ffbe01c Mon Sep 17 00:00:00 2001 From: Randall Winkhart Date: Tue, 5 Mar 2024 10:47:41 -0500 Subject: [PATCH] Implement Termux clipboard support --- src/offline/copyTERMUX.go | 51 ++++++++++++++++++++++++++++++++++ src/offline/copyUNIXGeneric.go | 4 +-- 2 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 src/offline/copyTERMUX.go diff --git a/src/offline/copyTERMUX.go b/src/offline/copyTERMUX.go new file mode 100644 index 0000000..360cc32 --- /dev/null +++ b/src/offline/copyTERMUX.go @@ -0,0 +1,51 @@ +//go:build termux + +package offline + +import ( + "fmt" + "os" + "os/exec" + "strings" + "time" +) + +// CopyField copies a field from an entry to the clipboard +func copyField(copySubject string, executableName string) { + cmd := exec.Command("termux-clipboard-set") + writeToStdin(cmd, copySubject) + err := cmd.Run() + if err != nil { + fmt.Println(AnsiError + "Failed to copy to clipboard: " + err.Error() + AnsiReset) + os.Exit(1) + } + + cmd = exec.Command(executableName, "clipclear") + writeToStdin(cmd, copySubject) + err = cmd.Start() + if err != nil { + fmt.Println(AnsiError + "Failed to launch automated clipboard clearing process - does this libmutton implementation support the \"clipclear\" argument?" + AnsiReset) + os.Exit(1) + } + + os.Exit(0) +} + +// ClipClear is called in a separate process to clear the clipboard after 30 seconds +func clipClear(oldContents string) { + time.Sleep(30 * time.Second) + + cmd := exec.Command("termux-clipboard-get") + newContents, _ := cmd.Output() + + if oldContents == strings.TrimRight(string(newContents), "\r\n") { + cmd = exec.Command("termux-clipboard-set") + writeToStdin(cmd, "") + err := cmd.Run() + if err != nil { + fmt.Println(AnsiError + "Failed to clear clipboard: " + err.Error() + AnsiReset) + os.Exit(1) + } + } + os.Exit(0) +} diff --git a/src/offline/copyUNIXGeneric.go b/src/offline/copyUNIXGeneric.go index 6827d0a..fd95b90 100644 --- a/src/offline/copyUNIXGeneric.go +++ b/src/offline/copyUNIXGeneric.go @@ -1,4 +1,4 @@ -//go:build !windows && !darwin +//go:build !windows && !darwin && !termux package offline @@ -10,8 +10,6 @@ import ( "time" ) -// TODO Implement support for Termux via termux-clipboard-set (in separate file) - // CopyField copies a field from an entry to the clipboard func copyField(copySubject string, executableName string) { var envSet bool // track whether environment variables are set