From cf03952c7bd44a3ad94a675b846cdfafb2af1c75 Mon Sep 17 00:00:00 2001 From: shane s Date: Thu, 4 May 2023 09:22:12 -0400 Subject: feat: add `config.auto_copy` (#102) * added config option to copy all ChatGPT output to clipboard * formatted with * updates --------- Co-authored-by: sigoden --- src/config/mod.rs | 18 ++++++++++++++++++ src/repl/handler.rs | 1 + 2 files changed, 19 insertions(+) (limited to 'src') diff --git a/src/config/mod.rs b/src/config/mod.rs index 376f923..021d2c1 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -10,6 +10,7 @@ use crate::config::message::num_tokens_from_messages; use crate::utils::{mask_text, now}; use anyhow::{anyhow, bail, Context, Result}; +use copypasta::{ClipboardContext, ClipboardProvider}; use inquire::{Confirm, Text}; use parking_lot::RwLock; use serde::Deserialize; @@ -70,6 +71,8 @@ pub struct Config { pub light_theme: bool, /// Set a timeout in seconds for connect to gpt pub connect_timeout: usize, + /// Automatically copy the last message output to the clipboard + pub auto_copy: bool, /// Predefined roles #[serde(skip)] pub roles: Vec, @@ -97,6 +100,7 @@ impl Default for Config { conversation_first: false, light_theme: false, connect_timeout: 10, + auto_copy: false, roles: vec![], role: None, conversation: None, @@ -169,6 +173,20 @@ impl Config { Ok(path) } + pub fn copy_message(&self, output: &str) -> Result<()> { + if self.auto_copy { + match ClipboardContext::new() { + Ok(mut ctx) => { + ctx.set_contents(output.to_string()).map_err(|err| { + anyhow!("Error: Unable to the last message output to clipboard, {err}") + })?; + } + Err(_) => bail!("Error: Unable to access clipboard context."), + } + } + Ok(()) + } + pub fn save_message(&self, input: &str, output: &str) -> Result<()> { if !self.save { return Ok(()); diff --git a/src/repl/handler.rs b/src/repl/handler.rs index 8d51439..c38f607 100644 --- a/src/repl/handler.rs +++ b/src/repl/handler.rs @@ -64,6 +64,7 @@ impl ReplCmdHandler { wg.wait(); let buffer = ret?; self.config.read().save_message(&input, &buffer)?; + let _ = self.config.read().copy_message(&buffer); self.config.write().save_conversation(&input, &buffer)?; *self.reply.borrow_mut() = buffer; } -- cgit v1.2.3