LoginSignup
7
1

More than 3 years have passed since last update.

Pryでpbcopy的なことをする

Last updated at Posted at 2019-10-09

経緯

pryって便利ですよねえ。
と言いつつ「pryのコピーってどうするの・・・?」とずっと思ってました。
まあ、もちろん普通のコピペのやり方であれば無難に出来るんですけど長文の結果が出てきたときにコピーするの大変じゃないですか・・・。
pbcopyどこなの・・・という気持ちを抑えながら(´ε` )
なので、とりあえず簡易的にコピペできるコマンドを書きました!

やりたいこと

  • 最後に実行したコマンドをコピー
  • 最後に実行したコマンドの結果をコピー
  • 最後に実行したコマンドと結果をコピー

コマンド

  • ということで、下記コマンドを .pryrc にぺぺっと貼ってください。
  • それで、pryを立ち上げてaliasに設定したコマンドを実行するとうまくいくと思います。
def pbcopy(str)
  IO.popen('pbcopy', 'r+') {|io| io.puts str }
  _pry_.output.puts text.green("--- Copy to ClipBoard ---")
  _pry_.output.puts str
end

Pry.config.commands.command "copy-history", "History copy to clipboard" do |n|
  pbcopy _pry_.input_ring[n ? n.to_i : -1]
end

Pry.config.commands.command "copy-result", "Last result copy to clipboard" do
  pbcopy _pry_.last_result
end

Pry.config.commands.command "copy", "Copy to clipboard" do |str|
  unless str
    str = "#{_pry_.input_ring[-1]}#=> #{_pry_.last_result}\n"
  end
  pbcopy str
end

Pry.config.commands.alias_command 'co', 'copy'
Pry.config.commands.alias_command 'ch', 'copy-history'
Pry.config.commands.alias_command 'cr', 'copy-result'

実行結果

pry(main)> 1+1+1
=> 3
pry(main)> ch
--- Copy to ClipBoard ---
1+1+1
# ペーストすると 1+1+1 がコピーされていることが分かる

pry(main)> 1+1+1
=> 3
pry(main)> cr
--- Copy to ClipBoard ---
3
# ペーストすると 3 がコピーされていることが分かる

pry(main)> 1+1+1
=> 3
pry(main)> co
--- Copy to ClipBoard ---
1+1+1
#=> 3

# ペーストすると 
# 1+1+1
# #=> 3
# がコピーされていることが分かる

ちなみに

_pry_.input_ring の中身はこうなっているらしいです。bufferから値を取得してるのかな。

pry(main)> 1+1+1
=> 3
pry(main)> 2+2+2
=> 6
pry(main)> 3+3+3
=> 9
pry(main)> _pry_.input_ring
=> #<Pry::Ring:0x00007fe7b36b0308 
@buffer=[nil, "1+1+1\n", "2+2+2\n", "3+3+3\n", "_pry_.input_ring\n"], 
@count=5, 
@max_size=100, 
@mutex=#<Thread::Mutex:0x00007fe7b36b02e0>>

一応、chをこう使うこともできます。引数を与えてあげるとindexに基づいた値を取得してくれる。
最新の値は -1 から始まって -1 ずつ古くなっていきます。
(Enter押すと "" 空文字がBufferに入っていく)

# 上記の状態から
pry(main)> ch -2
--- Copy to ClipBoard ---
3+3+3

Pry#input_array is deprecated

input_array を使ってたんですけど推奨されてないようなので input_ring を使用しています。

warning: method Pry#input_array is deprecated. Use Pry#input_ring instead

pryのwikiはこちらです。

まとめ

これでめちゃくちゃ長い値も簡単にコピーできるようになって嬉しい・・・!

7
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1