Macでクリップボードの文字を、ターミナルからRubyの即席ワンライナーで処理する
〜ある日のこと〜
Flutterプロジェクト作ろうとしたらめちゃくちゃ怒られた。
$ flutter create FlutterSandbox "FlutterSandbox" is not a valid Dart package name. From the [Pubspec format description](https://www.dartlang.org/tools/pub/pubspec.html): **DO** use `lowercase_with_underscores` for package names. Package names should be all lowercase, with underscores to separate words, `just_like_this`. Use only basic Latin letters and Arabic digits: [a-z0-9_]. Also, make sure the name is a valid Dart identifier -- that it doesn't start with digits and isn't a reserved word.
DO use
lowercase_with_underscores
for package names.
Flutterさん激おこやんけ...
で、どうやらFlutterプロジェクトはファイル名もsnake_case
で書くことが多いらしいことがわかった。
本題
Flutterのチュートリアルをこなすときに、ファイル名はできるだけチュートリアルの名前をそのまま使うようにしたい。
例えば以下のようなチュートリアルだったら、navigate_to_a_new_screen_and_back.dart
という風にしたい。(ちょっと長いけど)
でも、チュートリアルのタイトルはNavigate to a new screen and back
といった感じで、snake_caseで記述されていない。
絶対に手打ちしたくない
クリップボードにコピーされた文章を、いい感じにワンライナーで。でもシェルスクリプトも書きたくないので、Rubyでやった。
$ pbpaste Navigate to a new screen and back $ ruby -e "puts '`pbpaste`'.gsub(' ', '_').downcase" navigate_to_a_new_screen_and_back
いい感じ。
バッククォートでくくるとそこだけ展開してくれるので、クリップボードの文字列がpbpaste
に格納される。それをシングルクォートでくくってStringとして認識させ、あとは置換してdowncaseするだけで完成。
おわりに
別に難しい処理じゃないしsedとかawkとか使えよって言われたらそれはそうなんだけど、普段使い慣れているツールをこういう場面でコソッと使いこなせると結構楽しい。