Alfred 4のWorkflowsで16進/10進/2進変換を作る

macOS用のランチャーとして今はAlfred 4を使っています。先日Mega SupporterになってPowerPackをずっと使えるようになりました。PowerPackで活用しているのはテキスト展開ツール(TextExpanderやaTextというツールがよく使われてるやつ)なんですが、WorkflowsというAlfredの機能を自作できる機能を使えば以前からやりたかったことができることに気が付いて、いろいろ調べて成功したので記録しておきます。

やりたかったのは、数字(特に10進数)を入力すると16進数や2進数に変換して表示してくれて、必要ならクリップボードにコピーできる機能です。そのために電卓アプリを立ち上げたりリアル関数電卓を出してきたりするんですが、どちらも基数変換のための電卓ではないのでいちいちそのモードに切り替えないといけなくて不便だなぁと思っていました。

Alfredには計算機能があって、単純な四則演算なら数式を入れるだけで使えます。先頭に=を入力すれば平方根などの関数を使うこともできます。それと同じように基数変換ができればいいのでは?と思い立ったのでやり方を調べたところ、AlfredのWorkflowsという機能を使えばできそうなことがわかりました。

こういうのがやりたかった

WorkflowsはAlfredのPowerPackを買うと追加される機能の一つで、要はAlfredに機能を(そこそこ簡単に)追加できる機能です。だいたいこういうのは誰かしらやってるので探してみたところ、あんまりやっている人がいませんでした。あってもAlfred2や3のものが多く、最新の4でやっている人は見つけられませんでした。

Workflowsはいろいろできるようですが、Script Filterというのを使えばよさそうだということはわかりました。ということで、まずは新しいWorkflowを作ります。Workflowsを選んで一番下にある+を選んでBlank Workflowです。

できたらInput-Script Filterを選ぶとダイアログが出ます。

とまあここまではいいんですが問題はここからで、とりあえず一番上にキーワードを入れればいいことはわかりました。そして出力はXMLで、というのが調べて出てきたのですが、今はJSONでよくなってるみたいです。というわけで公式の解説はここ Script Filter JSON Format にあるんですが、英語だなあということで最低限必要なのは何かを調べたら、”title”と”arg”を出力しとけばよさそうなことがわかりました。

“title”は人間が見る文字列なので入れるとして、”arg”は公式解説にもoptional だけど highly recommended と書かれている通り、ここに指定した文字列が次に渡されるのであった方がよさそうです。

と、ここまではわかったのであとはコードを書いていきます。Rubyで書きました。何の説明もしませんでしたが query = ARGV.first でキーワードの次の文字列がqueryに渡されます。

def output_16(q16)
output  = <<"EOS"
    {	"title": "#{q16}",
		"arg": "#{q16}",
	},
    {	"title": "0x#{q16}",
		"arg": "0x#{q16}",
	}
EOS
output
end

def output_02(q02)
output  = <<"EOS"
    {	"title": "#{q02}",
		"arg": "#{q02}",
	},
    {	"title": "0b#{q02}",
		"arg": "0b#{q02}",
	}
EOS
output
end

def output_10(q10)
output  = <<"EOS"
    {	"title": "#{q10}",
		"arg": "#{q10}",
	}
EOS
output
end

start_string = "{\"items\": ["
end_string = "]}"
query = ARGV.first

if (/\A[+-]?[0-9]+\z/ =~ query) then
	q16 = query.to_i(10).to_s(16)
	q02 = query.to_i(10).to_s(2)
	output = start_string + output_16(q16) + ',' + output_02(q02) + end_string
elsif (/\A0[xX][0-9A-Fa-f]+/ =~ query) then
	q10 = Integer(query)
	q02 = q10.to_s(2)
	output = start_string + output_10(q10) + ',' + output_02(q02) + end_string
elsif (/\A0[bB][01]+/ =~ query) then
	q10 = Integer(query)
	q16 = q10.to_s(16)
	output = start_string + output_10(q10) + ',' + output_16(q16) + end_string
end

puts output

あとはScript Filterのブロックの後にCopy to Clipboardのブロックを付け足します。Outputの中にあります。

これで10進数、16進数、2進数の変換ができるようになりました。めでたしめでたし。

Alfred Hitchcock Presents Seasons 1-7 The Complete Collection

Alfred Hitchcock Presents Seasons 1-7 The Complete Collectionposted with amazlet at 20.02.26
Amazon.co.jpで詳細を見る

「Dark -闇に堕ちた愛-」第1巻 追放された英雄 海賊アルフレッド(CV:土門熱)

「Dark -闇に堕ちた愛-」第1巻 追放された英雄 海賊アルフレッド(CV:土門熱)posted with amazlet at 20.02.26GOLD (2017-10-25)
売り上げランキング: 3,662
Amazon.co.jpで詳細を見る

カテゴリー: ありものソフト, ソースコード, Mac, OSX タグ: パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中