kcm/src/commands/cmd_copy.go

41 lines
1.2 KiB
Go

package commands
import (
"strconv"
"github.com/rs/zerolog/log"
"github.com/spf13/cobra"
"github.com/vleeuwenmenno/kcm/src/config"
"github.com/vleeuwenmenno/kcm/src/models"
"golang.design/x/clipboard"
)
func NewCopyCmd(history *models.History) *cobra.Command {
return &cobra.Command{
Use: "copy [index]",
Short: "Copy a history item back to the clipboard",
Aliases: []string{"--copy"},
Args: cobra.ExactArgs(1),
Run: func(cmd *cobra.Command, args []string) {
index, err := strconv.Atoi(args[0])
if err != nil || index < 1 {
log.Fatal().Err(err).Msg("Invalid index")
}
cfg, _ := config.LoadConfig()
history.ReloadIfChanged(cfg.Clipboard.HistoryFile)
historyLen := len(history.Items)
if index > historyLen {
log.Fatal().Int("index", index).Int("historyLen", historyLen).Msg("Index out of range")
}
item := history.Items[index-1]
if err := clipboard.Init(); err != nil {
log.Fatal().Err(err).Msg("Failed to initialize clipboard")
}
log.Info().Str("item", string(item.Data)).Msg("Active on the clipboard, you can now paste it...")
done := clipboard.Write(clipboard.FmtText, []byte(item.Data))
<-done // Wait for clipboard write to complete
},
}
}