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 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/config') 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(()); -- cgit v1.2.3