Module: Pry::Clipboard

Defined in:
lib/pry/clipboard.rb

Overview

Originally from github.com/hotchpotch/pry-clipboard but modified since it is broken in Ruby 2.7

Constant Summary collapse

Command =
Pry::CommandSet.new do
  create_command "paste" do
    description "Paste from clipboard"

    banner "      Usage: paste [-q|--quiet]\n    BANNER\n\n    def options(opt)\n      opt.on :q, :quiet, \"quiet output\", optional: true\n    end\n\n    def process\n      str = Clipboard.paste\n      unless opts.present?(:q)\n        pry_instance.output.puts green(\"-*-*- Paste from clipboard -*-*-\")\n        pry_instance.output.puts str\n      end\n      eval_string << str\n    end\n  end\n\n  create_command \"copy-history\" do\n    description \"Copy history to clipboard\"\n\n    banner <<-BANNER\n        Usage: copy-history [N] [-T|--tail N] [-H|--head N] [-R|--range N..M]  [-G|--grep match] [-l] [-q|--quiet]\n        e.g: `copy-history`\n        e.g: `copy-history -l`\n        e.g: `copy-history 10`\n        e.g: `copy-history -H 10`\n        e.g: `copy-history -T 5`\n        e.g: `copy-history -R 5..10`\n    BANNER\n\n    def options(opt)\n      opt.on :l, \"Copy history with last result\", optional: true\n      opt.on :H, :head, \"Copy the first N items.\", optional: true, as: Integer\n      opt.on :T, :tail, \"Copy the last N items.\", optional: true, as: Integer\n      opt.on :R, :range, \"Copy the given range of lines.\", optional: true, as: Range\n      opt.on :G, :grep, \"Copy lines matching the given pattern.\", optional: true, as: String\n      opt.on :q, :quiet, \"quiet output\", optional: true\n    end\n\n    def process\n      history = Pry::Code(Pry.history.to_a)\n\n      history = if num_arg\n                  history.take_lines(num_arg, 1)\n      else\n        history = history.grep(opts[:grep]) if opts.present?(:grep)\n        if opts.present?(:range)\n          history.between(opts[:range])\n        elsif opts.present?(:head)\n          history.take_lines(1, opts[:head] || 10)\n        elsif opts.present?(:tail) || opts.present?(:grep)\n          n = opts[:tail] || 10\n          n = history.lines.count if n > history.lines.count\n          history.take_lines(-n, n)\n        else\n          history.take_lines(-1, 1)\n        end\n      end\n\n      str = history.raw\n      str += \"#=> \#{pry_instance.last_result}\\n\" if opts.present?(:l)\n      Clipboard.copy str\n\n      return if opts.present?(:q)\n      pry_instance.output.puts green(\"-*-*- Copy history to clipboard -*-*-\")\n      pry_instance.output.puts str\n    end\n\n    def num_arg\n      first = args[0]\n      first.to_i if first && first.to_i.to_s == first\n    end\n  end\n\n  create_command \"copy-result\" do\n    description \"Copy result to clipboard.\"\n\n    banner <<-BANNER\n        Usage: copy-result [-q|--quiet]\n    BANNER\n\n    def options(opt)\n      opt.on :q, :quiet, \"quiet output\", optional: true\n    end\n\n    def process\n      res = \"\#{pry_instance.last_result}\\n\"\n      Clipboard.copy res\n\n      return if opts.present?(:q)\n      pry_instance.output.puts green(\"-*-*- Copy result to clipboard -*-*-\")\n      pry_instance.output.print res\n    end\n  end\nend\n"