Alfred

Alfred2の謎キーリマップ現象について色々調べてみた

Alfred2の謎キーリマップ現象

以前記事にしましたが、Alfred2(Powerpack入り)起動中に、「⌥⌘]」が「⌘C」にリマップされるという不具合がありました。

この問題がYosemiteでも引き続き発生したので、少し本気出して調べてみました。

すでに判明している条件は以下の通りです。

  • Alfred2でのみ発生(Alfred1では発生しない)
  • Powerpack有効時のみ発生
  • アクティブなアプリを問わず発生

試したこと一覧

  • 他の常駐アプリとの干渉ではないか?
    • その他の常駐アプリを全て終了させた状態でも、同様に発生しました。
  • IMEとの関係はないか?
    • ことえり、Google日本語入力、かわせみ2の、英語および日本語入力モードの全てで発生。
  • 自分でリマップしたらどうか?
    • Karabinerで「⌥⌘]」を「⌥⌘]」にリマップしたが、「⌘C」になる。

なおKarabinerのprivate.xmlはこんなん。(MacBook Air JISキーボード)

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0"?>
<root>
<list>
<item>
<name>Alfred2 Bug measure</name>
<identifier>alfred2.bug.measure</identifier>
<autogen>--KeyToKey-- KeyCode::JIS_BRACKET_RIGHT, VK_COMMAND, VK_OPTION, KeyCode::JIS_BRACKET_RIGHT, VK_COMMAND, VK_OPTION</autogen>
</item>
</list>
</root>

どうしようもありません。リマップ先が頻出もいいところの「⌘C」だというのがまたどうしようもなく、「⌘C」を「⌥⌘]」にリマップするわけにもいきません。

というか、改めてぐぐってみても私以外の発生例が見当たらないんですが。どう考えても環境依存だろ、なんなんだこれ……。

(2014-12-27追記)ついに原因判明

きっかけはある古いツイートでした。

どう考えてもコレだーーーーー!

というわけで、言語環境を英語のみにして再起動してみました。すると、見事に⌘⌥]が利くではありませんか!

よーし、じゃあ改めて言語環境に日本語を追加して→再発

はい、100%再現でした。言語環境のリストに日本語があることが条件なので、入力ソースに日本語系を登録する場合回避不可です。一番上を英語にして、メニューバーとかが英語表記の状態でもアウト。

レポート送っておきます。

(2015-01-03追記)フォーラムで返信あった

When setting a hotkey, Alfred saves the keycode position provided by OS X (e.g. Cmd + Opt + the 6th key position in the top row of the keyboard) rather than Cmd + Opt + Y. As a result, if you change keyboard layout, the same position will work, rather than the same letter Y if it has moved on the different keyboard layout.

If the keys move around between your English and Japanese keyboards, set the key combination in the keyboard layout you use most frequently and remember the key position of your hotkeys :)

……えっ? えっ?

全く意味が分からないのでいろいろ検証中。

(2015-08-20追記)なんか解決した

しらんうちに解決していました。全く理由がわかりません。

2.7のこの部分でしょうかね?

Workflow Improvements

  • Track keyboard layout changes for Alfred dispatched keycodes, making commands more reliable

AlfredからCloud.appで開くとアップロードできる


ver. 3.0.1 - 無料( 仕事効率化 )
Linebreak

Cloud.appでファイルを開くとアップロードされる

単なる常駐アプリだと思っていたので、今まで試しもしなかったのですが、Mac版のCloud.appでなんでもいいからファイルを開くと、アップロードされます。

必ずしもMac OS Xサービスとか、ドラッグアンドドロップじゃなくていいわけです。

ということは、色々と使い道が増えてきます。

Alfredから


ver. 1.2 - 無料( 仕事効率化 )
Running with Crayons Ltd

ヒットしたファイルをCloud.appで開く、でアップロードできます。というかこれができることに気付いてアッてなった。

特にAlfred2 Powerpack導入済みの場合、ファイルナビゲーションからのアップロードが強力です。

ターミナルから

1
open -a cloud.app example.zip

こんなコマンドで、簡単にアップロードできます。何かを圧縮ついでにアップロードとか便利そうではある。

AppleScriptから

なんかできるらしいことが書いてありますが。

公式ドキュメントが見当たらないんだよなあ。

まあ、個人的にはAppleScript対応アプリでいじってるものをアップロードすることはあんまりなさそうなのですぱっと諦め。

Hexoが新規記事ファイルを開いてくれないのでAlfredに頼んだ

Hexoでの新規記事作成

Hexoで記事を書き始める場合、以下のターミナルコマンドが利用できます。

1
hexo new 記事タイトル

すると、source/_postsに指定した命名ルールに基づいたファイルを作って、さらにフロントマターまで自動入力してくれるのですが、エディタで開いてくれません。

なまじ深い階層に作ってくれるので、普通に開こうとすると大変です。それだったら、コマンドに頼らず自分でやったほうが楽なくらいですが、それももったいない。

というわけで、困ったときのAlfred Workflow。

作ってみた

起動はキーワードで、以下のターミナルコマンドを実行します。最初シェルスクリプトでやろうとしたのですが、なんでかうまくいかないので諦めました。

(追記:Alfred Workflowのシェルスクリプトだとhexoコマンドにパスが通ってないのが原因でした。スクリプト内でパス通せばOK。)

1
2
3
4
5
6
PATH=/usr/local/bin:$PATH #hexoコマンドにパスを通す
cd ~/heroku/wbtmiu.herokuapp.com/ #hexoプロジェクトフォルダに移動
title=`echo "{query}" | sed -e 's/ /-/g' -e 's/[\.\/]//g'` #クエリ文字列を置換して変数に格納
hexo new "{query}" #新規記事を作成
open -a FoldingText source/_posts/`date '+%Y-%m-%d-'`$title.md #記事ファイルをFoldingTextで開く。Hexoの設定によりファイル名に日時が挿入されているためdateコマンドを使用
exit #ターミナルセッションを終了。iterm2だと同時にウインドウを閉じる

クエリに置換を入れているのは、hexo newコマンドでファイルが作成される際、ファイル名として不適切な文字がエスケープされるためです。確認した限りでは、以下の処理が行われます。

  • 半角スペースを-に置換
  • .を削除
  • /を削除

このような場合、クエリ文字列をそのままopenコマンドに渡すとエラーになるため、予めhexoが行うのと同様のルールで処理した文字列を渡します。hexo newの引数はファイル名だけでなく、記事タイトルとしても使われるため、生のクエリを渡します。

hexo newで表示されるメッセージを捕捉してFoldingTextに渡したほうが確実ではある。

ついでに、同様の方法でデプロイもAlfredからできるようにしておきました。

1
2
3
4
5
PATH=/usr/local/bin:$PATH #hexoコマンドにパスを通す
cd ~/heroku/wbtmiu.herokuapp.com/
hexo d -g #コンテンツを生成してデプロイ
heroku open #確認のためサイトをブラウザで開く
exit

FoldingTextだとフロントマターをうまく解釈できないので、変な装飾が入るのですが、まあしゃーなし。

黒魔法も慣れてくると便利

数ヶ月前まで、ターミナルとか極力触れたくなかったのですが、嫌々使ってるうちにだんだんなんでも黒魔法でやるようになってきました。

  • 記事の修正とかめどいのでレンタルブログとかWebベースCMS使いたくない
  • 記事はローカルに置いておくのだ!
  • Postach.ioのDropbox同期最高!
  • Postach.ioで日本語通らなくなった死ねよ
  • scriptogr.amなあ…開発止まってるしなあ…
  • もう静的サイトジェネレータ使うしかないじゃない!
  • 呪文多い…つらひ…
  • でも呪文使うと色々自動化できて案外楽…

という感じで。

半分くらい意味分かんないで唱えてるのでヒヤヒヤ感も楽しめて残暑の季節に最適。

しかし、Windowsからの更新どうしよう。

追記

その後、色々要素が追加されました。

nvALTのURLスキームを利用してAlfredから簡単検索

nvALTにはURLスキームがあった!

早く言えシリーズ。

とにかくどこにもドキュメントがなくて、AlfredのWorkflow漁っててたまたま知ったんですが、あるんです。動くんです。

以下のようなURLを叩くと、nvALTで検索されるんです!

nvalt://find/検索ワード

頭抱えましたよ。それがやりたいがために、これまたクソほどもドキュメンテーションされてないLincastorをいじり回したり、Mac OS XのカスタムURLスキームの作り方を調べたりしてたというのに!

これをブラウザのURL欄なり、Alfredなりに入力してやればnvALTを検索できますし、リンクになっていればクリックするだけでnvALTが立ち上がって検索結果が表示されます。つまり、もちろんMac限定ですが、nvALTにリンクを張ることができるのです!

例えば、WorkFlowyにこの形式のリンクを入力していれば、タスクに関係するnvALTノートを簡単に検索できるわけです。ほんとにもう、早く言えよ!

もっと簡単に検索しよう

このままでも十分便利なのですが、ちと文字数が多いので、AlfredでカスタムWeb検索を作成しました。

URLをnvalt://find/{query}、Keywordをnvとかにすれば、Alfredからnv 検索ワードで検索することができます。

nvALTでは検索フィールドから新規ノートを作成するので、そのままエンターキーを押せばノート作成になります。

はーすっきりした。

Toodledoにメールでタスク登録するAlfred Workflow作ってみた(α)→もうあった

実際やってみたらあまりの簡単さに震えている。

AlfredからToodledoにタスク登録したかった

Alfred2 Powerpackを導入すると、一通りのことはAlfredからしたい、できろという病気に高確率でかかります。Toodledoを使っているので、当然タスク登録くらいはできるようにしておきたいものです。

しかし現在、そのものズバリのToodledo Workflowは公開されていないようです。リマインダー経由で登録できるようにしたり、WorkflowがあるWunderlistへの乗り換えを検討したりもしたのですが、前者はいちいちリマインダーが起動するのがウザい、後者は肝心のWorkflowの挙動が猛烈に怪しいと、早晩諦めました。

そこで、Alfred病の第二段階、Workflowの自作に取り掛かることにしました。Toodledoはメールからのタスク登録が可能なので、変にややこしいことをしなくても、メールさえ送れればいいのです。

1.Postfixでコマンドラインからメールが送れるようにする

上記記事を参考に、以下の内容を実行してメール送信ができるようにしました。なお、環境はMavericks(10.9.3)です。

  1. Gmailアカウント情報のデータベースを作成。
  2. main.cfを更新

これで、ターミナルからメールが送れることを確認しました。

2.Bashスクリプトでメール送信するWorkflowを作成する→もうあったよ!

というわけで、本文も入力できる素晴らしいWorkflowがあったので全て解決しました。

念のため補足。

  • Workflowをインストール後、スクリプトを書き換えて宛先アドレスを指定する必要がある
    • Alfred Workflowでは各アイテムをコピペできるので、キーワードを書き換えればいくらでも宛先の違うのを作れる
  • クエリを/で区切ると、後半が本文になる。

iOSリマインダーとToodledoの同期について簡単にまとめ

例によってAlfred2から

Alfred2にPowerpackを導入したことで、いろいろとワークフロー(Alfred用語でなく一般的な意味で)を見直しています。

AlfredからToodledoにタスクを登録したくてWorkflowを検索したのですが、現在はそのものズバリのワークフローは存在しないようです。他のタスク管理サービスのは色々あるんですけどね。

実はAlfred1向けのはあるんですが、そのままではAlfred2で利用できません。というか、Alfred1で利用するにも色々ハードル高いやつです。

そこで、暫定措置として、リマインダーとToodledoの同期を利用して、リマインダー経由でToodledoに登録することにしました。

Alfred2からリマインダーへの登録

前提として、以下のWorkflowを導入します。

これで、Macのリマインダーには簡単にタスクを登録することができます。

また、iCloudを利用して、MacのリマインダーをiOSに同期するようにしておきます。

iOSリマインダーとToodledoの同期

これはiOS版Toodledoアプリの機能です。

これをインストール、アカウント設定まで済ませます。

その後、アプリ内から、「設定 > Reminder Syncing」をOnにします。

Toodledo(iOS)とリマインダーを同期

これにより、リマインダー(Mac)→リマインダー(iOS)→Toodledo(iOS)→Toodledo(サーバー)への同期が成立し、全てのデバイスからアクセスできます。

注意点

ここで注意しなければいけないのは、あくまでリマインダー(iOS)→Toodledo(iOS)の同期であって、Macだけでは成立しないことです。

従って、まああまりいらっしゃらないでしょうが、iOSデバイスをお持ちでないマカーには利用できませんし、Toodledo(iOS)が同期しないと反映されません。

また、iOSの設定で、「設定 > 一般 > Appのバックグラウンド同期 > Toodledo」を有効にしていたとしても、アプリをアクティベートしないと同期しない場合があります。

Alfred2からリマインダーへの登録時にリマインダー.appが起動するのもうっとうしいですし、最近再構築したばかりですが、タスク管理サービスの乗り換えも検討したほうがいいかもしれませんねえ。

AlfredからもMarkdownをクイックルックできるMarkdown Quick Look Plugin

Alfred2のFile Navigation

以前もご紹介しました通り、Alfred2のPowerpackに含まれるFile Navigation機能では、Windowsでいうfenrirのように、フォルダ階層を自在に移動することができます。

普通にフォルダを探してFinderで開くといった使い方でも十分に便利なのですが、フォルダを掘って中のファイルを見るという使い方が最高に便利です。

というのも、もともとAlfredではテキストファイルなどを検索することができるわけですが、デフォルトの検索対象にそういったファイルを含めると、検索結果が多すぎてアプリなどの使用頻度が高い項目が埋もれる上に、動作が非常に遅くなるからです。フォルダを検索してそこから掘り進めていけば、そういった問題は起こりません。

探し出したファイルは、関連付けされたアプリで開いたり、その他のアプリに渡したりすることができますし、ファイルを選択してシフトキーを押せば、Mac標準のクイックルックでプレビューすることもできます。

しかし、昔からある問題なのですが、拡張子.mdなどのMarkdownファイルは、クイックルックで開くことができません。しょせん拡張子が違うだけのテキストファイルなのですが、とにかくダメなのです。

クイックルックでMarkdownを開けるようにするプラグイン

そこで、プラグインを導入すると、Markdownファイルをスタイルを適用した状態で閲覧することができるようになります。

この手のプラグインも昔からあって、オープンソースのQLMarkdownがつとに有名なようです。しかし、導入がやや煩雑で、更新も長く行われていないようなので、今回はパッケージで提供されているプラグインを導入してみました。

こちらはMavericks対応で、パッケージ形式のため、ウィザードで簡単にインストールすることができます。

これはAlfred2からのクイックルックにも適用され、以下の画像のように、Markdownを見やすくプレビューすることができます。

クイックルックでMarkdownをプレビュー

ただし、ご覧の通り、前後にスペースのないボールド指定が解釈されないようです。これはバグというより、使用されているMarkdownパーサーの仕様でしょう。

一応、本来の定義では、Emphasisはin the middle of a wordで使えるはずなんですがねえ……。

Alfred2が謎のキーリマップを見せて泣いた

Alfred2を導入した

昨日書きましたが、Alfred2のPowerpackがずっと求めていたものであることが分かり、色々追記したいことがあったのでFoldingTextでブログ記事を書き直していました。

ところが、FoldingTextの一部キーバインドが機能しません。なにをしても治らず、なにが原因なのかと頭を抱えていたところ、Alfred2を終了したらあっさりと解決したのです。

症状

FoldingTextのデフォルトキーバインドでは、⌥⌘]でカーソル行(または選択行)を下に移動する機能(メニューバーでいう「Organize>Move Down」)が割り当てられています。このキーバインドが機能しなくなりました。⌥⌘[(Organize>Move Up)は正常です。

当然、Alfred2の各種呼び出しキー、登録したワークフローのホットキーでも⌥⌘]は利用していません。というか、別にAlfred2が立ち上がったりするわけでもなく、テキスト選択状態ではなぜかメニューバーのEditが反応しているのだからワケが分かりません。言うまでもなく、Editメニューにこのキーバインドが割り当てられた項目はありません。

その様子をGifアニメにしてみました。

Alfred1の場合(正常)

Alfred1の場合(正常)

Alfred2の場合(症状発生)

Alfred1の場合(正常)

再現条件

一度Alfred2をAppCleanerでアンインストールしたところ、症状は解消しました。

しかし、Powerpackを有効化した時点で、再現することが分かりました。

Powerpackインストール後も、メニューバーからトラックパッドで実行する限りはMove Downできます。

キーがリマップされている!

メニューバーをクリックしたらいいのだから、BetterTouchToolで⌥⌘]にメニューアイテムの実行を割り当ててやろうと設定に取り掛かったところ、原因らしきものに気付きました。

というのも、BetterTouchToolで⌥⌘]を押したところ、キーコンビネーションが⌘Cと表示されたのです!

違うキーが表示される!

⌥⌘]⌘Cにリマップされているわけです。つまりFoldingTextなら「Edit>Copy>Copy」が実行されるわけで、なるほどEditが反応するわけです。

なお、この現象はFoldingText以外でも発生します。FoldingTextは特に関係ないようです。

対策

このキーコンビネーションさえ使わなければよいので、「環境設定>キーボード>ショートカット」で、このメニューに別のキーバインドを割り当てることで解決しました。

原因は謎に包まれている

上記ページより、Powerpackの機能は以下の通りです。

  • Create and Import Workflows
  • Clipboard & Snippets
  • Theming
  • File Navigation
  • iTunes
  • Recent Documents
  • Email
  • 1Password
  • Syncing
  • Fallback Searches

この中で影響していそうなのはWorkflowによるホットキーと、せいぜいクリップボード管理くらいですが、なにがどう影響してこんなことになっているのか、さっぱり理解できません。

この件については、Alfredのフォーラムに投げるなりして根本的な解決を図っていこうと思います。

おまけ:FoldingTextテメーもだ

というわけで、この件についてはFoldingTextに一切の責はなかったと言えるのですが、検証中に恐ろしいことに気付きました。

Mac App Storeからインストールしたバージョン2.0.2で、⌘Cによるコピーができないのです。これは、Alfred2の状態に全く関係なく発生します。

現在、FoldingTextの導入(購入)方法は2通り用意されています。

  • Mac App Storeで購入
  • 公式サイトから無料でダウンロードし、Paddle Checkoutでライセンスを購入する。(7日間の試用期間あり)

両者の違いについては、以下のように説明されています。

  1. The Mac App Store version is Sandboxed, the Paddle version is not.

  2. The Mac App Store version (should) support iCloud, the Paddle version will not… only apps sold through Mac App Store can support iCloud. Also there is a bug in the App Store 2.0 release where iCloud is not enabled. Submitting a fix for that soon.

要するに、Mac App Store版でのみiCloud同期が可能。後は、Mac App Store版はサンドボックス化(Mac App Storeでのサンドボックス必須化から2カ月、開発者の反応は | マイナビニュース)が必要だから機能削れたりするかもね、というところでしょうか。

そこで、公式サイトからダウンロードした2.0.2でも試してみましたが、こちらではこの症状は発生しませんでした。値動きに躍らされてMac App Storeライセンスを購入したことを、これほど後悔したことはない。

Paddleライセンスに切り替えられないか、聞いてみようかな……

(2014-12-16追記)その後

Yosemiteでクリーンインストールしたあと、Mac App Store版で普通にコピーできるようになりました。なんだったんだろう。

Windowsにはforiaがおり、そしてMacには『Alfred』がいる

(2014-08-18: 大幅改定しました。)

fenrirとeClip

私が数年来愛用しているWindowsフリーソフトであり、そしてMacで代用品が見付からないアプリの筆頭格といえば、テキストエディタのoeditと、fenrirおよびeClipの3つでした。

fenrirとeClipは、いずれもforia氏の手になるもので、氏に足を向けて寝られないフリーソフトファンは多いことでしょう。

fenrir

fenrirは一般にキーワード入力型ランチャーと称されますが、これは実際の使用イメージとはかなり異なります。

どちらかといえば検索型ファイラと表現すべきで、ストレージからインデックスした全てのファイル・フォルダをインクリメンタルサーチできるだけでなく、フォルダの階層を自由に移動することができます。さらに、移動しながらさらに検索することも可能です。

そのため、「あのフォルダにあるのは分かってるけど、名前まではよく覚えていない」といったファイルを探す場合にも、まずフォルダを引き当て、さらにその中から検索……といったふうに、柔軟な検索・実行が可能です。

さらに、ファイル拡張子ごとに関連付けを行ったり、キーバインドによって開くアプリを選ぶこともでき、使いこなせれば劇的にファイル・フォルダの取り扱いが楽になります。

eClip

fenrirに比べると、eClipは非常に単純なアプリで、クリップボードの履歴を保存し、ホットキーで呼び出してインクリメンタルサーチするものです。

機能も用途もそれ以上のものでは全くないのですが、履歴数・履歴サイズの制限がないということもあり、あると大変便利です。頻繁にコピペする文字列はほぼ履歴に居座るため、ちょっとしたスニペットアプリのような感覚で利用することさえできます。

BluewindとAlfred

これまでWindowで常用しているフリーソフトで、「キーワード入力型ランチャー」という表現はこちらにふさわしいでしょう。これは登録したアプリをキーワードで検索して実行するアプリなのですが、登録したアプリにパラメータを渡すこともできます。

そのため、(SearchWebを利用すれば)g うんちゃらかんちゃらでGoogle検索したり、e うんちゃらかんちゃらでEvernote検索したりできて便利です。

Alfredは、Macで利用できる同様のアプリです。Alfredは単独でURLに引数を付けて開くことができ、これを応用すると、AlfredからTwitterに投稿することもできます。

……というのが、無料版の話です。

Alfred powerpackとは

AlfredにはPowerpackという有料(17ポンド)拡張機能があり、これを導入することで、さらに高度な機能を利用できます。そして、そこにはほぼfenrir&eClipを実現する機能が含まれていたのです!

以下の機能の利用には、Alfred2へのアップデートと、Powerpackの導入が必要になりますのでご注意ください。

File Navigation

今まで試した中では、LaunchBarがフォルダを掘り進めることができ、かなりfenrirに近いものでした。しかし、けっこう高い上に挙動が複雑すぎて使用期間内に使いこなせず、早晩使用を諦めたのですが、まさかAlfredでよかったとは……

使い方はなんら難しいことはなく、/を入力してルートフォルダを開くか、普通にフォルダを検索してやれば、fenrirのようにフォルダ階層を自由に移動して絞り込み検索ができます。検索したファイルを任意のアプリに渡したりすることもでき、これはほぼMac版fenrirと表現してよろしいでしょう。

前述の通り、LaunchBarでも似たようなことはできるのですが、Alfredのほうが安いし、なにより挙動が圧倒的に分かりやすいので、断然Alfredをお勧めします。

Clipboard History

こちらも使い方は単純で、ホットキーで履歴を呼び出すと、保存されたクリップボード履歴をインクリメンタルサーチすることができます。履歴数は最大xx件とかしみったれたアプリが多い中、こちらは過去24時間から最大3ヶ月で、当然履歴サイズの上限はありません。

Macのクリップボード管理アプリも数多いですが、履歴サイズ無制限&インクリメンタルサーチが意外とないんですよね。本当に便利です。

さらに、スニペット(定型文)を登録することもできます。単語などの頻繁に利用するスニペットはTextExpanderなりDashなりの方が入力しやすいですが、使用頻度の低い大型のテンプレートなどはこちらでわけて管理したほうがやりやすいかもしれません。

Alfredさんが全部なんとかしてくれました

ずっと無料で使っていたのが痛恨でなりません。みんなWorkflowの話ばっかりしてるから今日の今日まで気付かなかった!

いやまあ、Workflowも本当に便利なんですけどね。ずっと探してたメニュバーアイテムをインクリメンタルサーチする機能が、Workflowで実現していたりもするし。

なお、こちらのWorkflowは「設定>セキュリティとプライバシー>アクセシビリティ」でAlfredにコンピュータの制御を許可する必要があるため注意。

これで、あとMacに足りないのはoeditだけになりました。これはそのうち記事にするつもりですが、Macに足りない「oeditオルタナティブ」とは、要するにパネル内オプションも含めてフルキーボードアクセス可能なテキストエディタのことです。まあ、jEditっちゃjEditなんですけどね……