lib/clipboard/linux_wayland.rb
# frozen_string_literal: true require_relative "implementation" require_relative "utils" module Clipboard module LinuxWayland include Implementation extend self CLIPBOARDS = %w[clipboard primary].freeze TEST_COMMAND = "wl-copy" WRITE_COMMAND = "wl-copy --type text/plain" READ_COMMAND = "wl-paste --type text/plain --no-newline" if !Utils.executable_installed?(TEST_COMMAND) raise Clipboard::ClipboardLoadError, "clipboard: Could not find required program wl-clipboard" end def paste(which = nil, clipboard: "clipboard") selection = which || clipboard raise ArgumentError, "unknown clipboard selection" unless CLIPBOARDS.include?(selection) primary_flag = selection == "primary" ? " --primary" : "" `#{READ_COMMAND}#{primary_flag}` end def copy(data, clipboard: "all") selections = clipboard.to_s == "all" ? CLIPBOARDS : [clipboard] selections.each{ |selection| raise ArgumentError, "unknown clipboard selection" unless CLIPBOARDS.include?(selection) primary_flag = selection == "primary" ? " --primary" : "" Utils.popen("#{WRITE_COMMAND}#{primary_flag}", data) } true end def clear(clipboard: "all") selections = clipboard.to_s == "all" ? CLIPBOARDS : [clipboard] selections.each{ |selection| raise ArgumentError, "unknown clipboard selection" unless CLIPBOARDS.include?(selection) primary_flag = selection.to_s == "primary" ? " --primary" : "" `#{WRITE_COMMAND}#{primary_flag} --clear` } true end end end