Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@arashida

Pryでpbcopy的なことをする

More than 1 year has passed since last update.

経緯

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はこちらです。

まとめ

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

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
smarthr
社会の非合理を、ハックする。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?