Module: OllamaChat::Clipboard

Included in:
Chat
Defined in:
lib/ollama_chat/clipboard.rb

Overview

A module that provides clipboard functionality for copying and pasting chat messages.

This module enables users to copy the last assistant message to the system clipboard and paste content from input, facilitating easy transfer of conversation content between different applications and contexts.

Instance Method Summary collapse

Instance Method Details

#perform_copy_to_clipboard(text: nil, content: false, edit: true) ⇒ TrueClass

Copies the last assistant message to the system clipboard.

This method finds the most recent message from the assistant and writes its content to the system clipboard using the command specified in the configuration (config.copy).

Parameters:

  • (defaults to: nil)

    The text to copy. If nil, the last assistant message is used (default: nil)

  • (defaults to: false)

    If true, copies the content of the message; if false, copies the entire message object (default: false)

  • (defaults to: true)

    If true, opens the content in the editor for modification before copying (default: true)

Returns:

  • if the copying has been performed successfully.

Raises:

  • if the clipboard command specified in config.copy is not found in the system's PATH

  • if no assistant message is available to copy to the clipboard



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/ollama_chat/clipboard.rb', line 27

def perform_copy_to_clipboard(text: nil, content: false, edit: true)
  text ||= last_message_content(content:)
  if text
    edit and text = edit_text(text)
    copy = `which #{config.copy}`.chomp
    if copy.present?
      IO.popen(copy, 'w') do |clipboard|
        clipboard.write(text)
      end
      true
    else
      raise OllamaChat::OllamaChatError,
        "#{config.copy.inspect} command not found in system's path!"
    end
  else
    raise OllamaChat::OllamaChatError,
      "No text available to copy to the system clipboard."
  end
end

#perform_paste_from_clipboard(edit: false) ⇒ String

Performs the actual clipboard paste operation.

This method executes the configured clipboard paste command to retrieve content from the system clipboard. It uses the command specified in the configuration (config.paste) to fetch clipboard content.

Examples:

# Assuming config.paste is "pfc"
content = perform_paste_from_clipboard
# => "Some content from clipboard"

Parameters:

  • (defaults to: false)

    If true, opens the retrieved content in the editor for modification before returning it (default: false)

Returns:

  • The content retrieved from the system clipboard

Raises:

  • if the clipboard command is not found or if there is no content available to paste



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/ollama_chat/clipboard.rb', line 63

def perform_paste_from_clipboard(edit: false)
  paste = `which #{config.paste}`.chomp
  if paste.present?
    IO.popen(paste, 'r') do |clipboard|
      text = clipboard.read
      if text.empty?
        raise OllamaChat::OllamaChatError,
          "No content available to paste from the system clipboard."
      else
        edit and text = edit_text(text)
        return text
      end
    end
  else
    raise OllamaChat::OllamaChatError,
      "#{config.paste.inspect} command not found in system's path!"
  end
end