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 }, } }