アインシュタインの電話番号

Font Awesome 4.0に対応したAlfred Workflowをリリースしました

Font Awesome Workflow for Alfred 2
Font Awesome Workflow for Alfred 2

Font Awesomeのアイコンフォントを検索できるAlfred 2用Workflow「Font Awesome Workflow for Alfred 2」を最新のFont Awesome 4.0に対応しました。

Font Awesome 4.0

一昨日リリースされたFont Awesome 4.0は、新しいアイコンの追加は少なかったのですが、コード部分での大幅な変更が加えられていて、後方互換性がありません

Font Awesome 4.0を使用する上で従来から大きく変わったのは主に3点で、

  • クラス名のプレフィックスがicon-からfa-に変更された
  • アイコンの命名ルールが改善された上で既存クラス名が変更された
  • シングルクラス方式からマルチクラス方式に変更された

例えばHTML上では以下のような記述になります。

<i class="icon-circle-arrow-right"></i> 3.2までの書き方
<i class="fa fa-arrow-circle-right"></i> 4.0からの新しい書き方

同じアイコンでも上記のように3.24.0名称自体が変わっているものもあり、プレフィックスも変わり、さらに、常に付ける必要のあるベースクラスfaが追加されました。

昨日リリースしたFont Awesome Workflow for Alfred 2のバージョン1.0.0では、それらの変更に対応しているため、こちらも後方互換性が無くなっています。Font Awesome 3.2を使用する場合は古いバージョンを利用してください。

新しいキーワード

New keyword

冒頭のスクリーンショットにも写っていますが、Workflowのキーワードを従来のfontaとは別にfaを追加しました。前述の通り、4.0からはクラス名のプレフィックスがfa-になり、ベースクラスの名前もfaなので、キーワードもそれと同じにしました。これはエイリアスで、fafonta機能的な違いは何もありません

従来のfontaを残しているのは、このキーワードに慣れていたため使っていて何度も打ち間違えたのと、直感的な度合いで言えばこちらの方が若干良いかなと思ったためですが、単に慣れの問題な気もしますね。

このfontaキーワードを残したのは後方互換性みたいなもので、将来的なバージョンで無くす可能性もあるため、今後はfaキーワードのほうを使用することをおすすめします。

既知の不具合

Bug

このWorkflowでの検索結果のアイコン一覧は、アイコンの名称のアルファベット順にソートされている状態が望ましいのですが、操作の仕方によっては上記のスクリーンショットのように、一番最後にあるべきアイコンが最初に表示されてしまう不具合が起きます。1

これが起きる条件は、Workflowのキーワードfaまたはfontaを入力する際にEnterキーで確定させずに全部手動で入力した場合です。fontaの場合はキーワードが長いので、例えばfonの3文字まで入力して一覧からこのWorkflowをEnterで選択して、その上でアイコンを検索するワードを入力した場合はこの不具合は起きません。

この不具合は最初のリリースからある不具合なんですが、今回新しいキーワードfaを追加したことで、それが目立つようになりました。少し技術的な説明をすると、アイコンを読み込んでいる時点でファイル名でのソートは行っていて、Alfredに向けて検索結果をXMLで出力する時点でもそのソート順が維持されているのは確認できているので、そこから先のAlfredに渡されて一覧を表示する部分でこの不具合が起きているのではと予想しています。が、ここをどうすればデバッグ・修正できるのかが分からず未だに対応できていません。

もし、これについて何かご存じの方がいたら、GitHub IssueまたはTwitter宛などで教えてもらえると嬉しいです。


Font Awesomeはとても便利で、アイコン名を記憶できているかを試すクイズがあるくらいアイコンの数が多い点も魅力ですが、今回の4.0でやや複雑になった感がありますね。このAlfred Workflowがその複雑さを少しでも軽減できれば願ったり叶ったり。

ruedap/alfred2-font-awesome-workflow · GitHub

  1. youtube-squareは一番最後に表示されるべきで、この場合はadjustが一番最初でなければならない