選択した文字列を Ruby スクリプトとして実行してくれる環境を作る手順。
まず先人への感謝
返値が欲しい!
先人が示してくれた Automator を使ってみると、スクリプト自身で "print" や "puts" などを使って、結果をわざわざ出力しないといけないことが分かる。
わたしは irb や pry のように返値を返してほしいんだ!
あと -Ku というオプションが嫌いなので無くしたい*1。そしてシステムじゃなく rbenv で指定している Ruby を使って実行したい。
返値を返すように作ってみたので手順込みで説明( rbenv 利用版)
- Automator を起動
- 新規スクリプトを作成し「サービス」を選択
- ウィンドウ上部にある「"サービス"は、次の選択項目を受け取る:」プルダウンメニューから「テキスト」を選択、「検索対象:」プルダウンメニューから「すべてのアプリケーション」を選択
- 左側にライブラリが表示されていない場合には「ライブラリを表示」を押してライブラリを表示させる
- アクション>ライブラリ>ユーティリティにある「シェルスクリプトを実行」を右側の「ワークフローを作成するには、ここにアクションまたはファイルをドラッグしてください」とある部分にドラッグ&ドロップ
- ウィンドウ上部の「選択されたテキストを出力で置き換える」にチェック
- 「シェルスクリプトを実行」区画で「シェル」を「/bin/bash」など通常使用しているシェルを指定、「入力の引き渡し方法:」を「stdin へ」を選択
- 以下のスクリプトを入力(なお bash を使っています。zshなど他のシェルを使っているならば一行目をそれに合わせてください)
source ~/.bashrc export PATH="~/.rbenv/shims:$PATH" ruby -e "eval(STDIN.read).tap{ |s| print s }" 2>&1 || echo
- 適当な名前を付けて保存(私はexec_rubyとしました)
システムの Ruby 利用版
Automator の設定準備は上と同じです。
- スクリプト部分を以下のように入力
ruby -Kue "eval(STDIN.read).tap{ |s| print s }" 2>&1 || echo
- 適当な名前を付けて保存(私はexec_rubyとしました)
使い方
エディタなどで書いた Ruby スクリプトを指定してコンテキストメニューから先ほどの保存名を選択すると実行されます。
ショートカットキーで実行したい場合は、先人の教えに従って設定してください。
例
前半:("あ".."ん").map.with_index(0) { |n,i| "#{n}: #{i}" }
irb などと同様に、puts 無しでも返値が見れます。
後半:("あ".."ん").map.with_index(0) { |n,i| puts "#{n}: #{i}" }
puts を付けると、 puts の返値 nil がくっついてきます。
個人的にはかなり満足
普段は pry を使っているので、puts などを書かなくても返値が表示されることに慣れています。なので結果を返すためにいちいち print とか書く習慣が無いのです。ので、この Automator だと普段の使い方にフィットします。