Quicksilver で Mac に叱咤激励してもらう

Quicksilver では任意の文字列を画面上に大きく表示する Large Type という機能があります。これを利用して自分に対するメッセージを定期的に表示する仕組みを作ってみました。

アクションを組み立てる

  1. Quicksilver を起動してコンマ . を押してテキスト入力モードにします。
  2. 表示させたいメッセージを入力して tab を押して 2nd pane に移り、Large Type を選択します。(まだ Enter は押さない)
  3. ここで Enter を押すと即座に Large Type が実行されますが、 Ctrl + Enter を押すと様々なアクションを選択できます。
    • というか、「入力した文字列を Large Type する」という動作がひとまとまりのオブジェクトとなって 1st pane に入るのです。
  4. 2nd pane で Save Command to File というアクションを選びましょう。3rd pane にて保存場所を指定します。
  5. Show "文字列" in large type.qscommand という長いファイル名で保存されているので扱いやすいように適宜リネームします。
    • ここでは show_message1.qscommand としました。

アクションを定期的に実行する

これを定期的に実行するにはどうしたらよいでしょうか。Calendar.app で予定を作成してその通知アクションとして実行することを考えましたが、試してみるとメッセージを表示した後すぐに Calendar.app の通知が Notification Center で表示され、メッセージは一瞬で消えてしまうようだったので別のアプローチを取ります。

まず shell から実行できることを確認します。

$ open /Users/ryosuke/show_message1.qscommand

次に crontab に登録します。Windows でいうところのタスクスケジューラですね。

00,30 13-23 * * 6,7 open /Users/ryosuke/show_message1.qscommand

上記の内容で cron.txt を作成してそれを読み込ませて設定を登録します。 crontab -e でエディタを起動して編集するやり方もありますが、 -e と間違えて隣の -r を指定して設定をすべてふっ飛ばしてしまうリスクがあるのでよくないようです。

$ crontab cron.txt

オプションなしで引数にファイルを指定すれば OK です。 -l オプションで登録されている内容を確認してみましょう。

$ crontab -l
00,30 13-23 * * 6,7 open /Users/ryosuke/show_message1.qscommand

しっかり設定されていました。

qscommand ファイルの中身

ちなみに qscommand ファイルの中身は XML でした。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>command</key>
    <dict>
      <key>class</key>
      <string>QSCommand</string>
      <key>data</key>
      <dict>
        <key>qs.command</key>
        <dict>
          <key>actionID</key>
          <string>QSLargeTypeAction</string>
          <key>directArchive</key>
          <dict>
            <key>class</key>
            <string>QSObject</string>
            <key>data</key>
            <dict>
              <key>NSStringPboardType</key>
              <string>shut the fuck up and write some code.</string>
            </dict>
            <key>properties</key>
            <dict>
              <key>QSObjectName</key>
              <string>shut the fuck up and write some code.</string>
              <key>QSObjectType</key>
              <string>NSStringPboardType</string>
            </dict>
          </dict>
        </dict>
      </dict>
      <key>properties</key>
      <dict>
        <key>QSObjectType</key>
        <string>qs.command</string>
      </dict>
    </dict>
  </dict>
</plist>