りんごが好きなのでぃす

Macを中心に、たま〜にiPhoneやiPadなどの話題も届けていたら今年で26年目を迎えてました

SafariでもChromeのような終了確認を表示させるアイディア

 

command + Q の誤入力で )*Д*( ぎゃぁぁあああぁっ!! せずに済むようにw

Google Chrome で可能な『終了の確認(下図)』と似たような機能を Safari にも設けてみよう……ということでチャレンジしてみました。

f:id:kjx130:20161216225205p:plain

Google Chrome で左図の項目を有効にすると ⌘ + Q が入力された時に右図のような確認表示が出る

といってもプログラミングの知識は皆無に等しいので Automator.app で作成しました。以下その手順を記しますが、文字にするとどうしても記事が長くなってしまいます……ご容赦ください (´・ω・`。)ゞ

まず全体の青図面(概略)の説明

どういうことをするのか……これを結論から逆順で箇条書きします。とりあえず OS X の標準機能だけですべてをまかなう、というのが大前提。

  • command + Q で『終了の確認』を求めるようにしたい
  • Automator で作ろう └(゚∀゚└)
  • command + Q でこのプログラムが実行されるようにしたい
  • Automator のアクションは "サービス" で作ろう └(゚∀゚└)
    ※ サービスで作成しておけばシステム環境設定>キーボード>ショートカット でキーボードショートカットを指定出来る
  • しかし command + Q には既に "Safari を終了" が割り当てられている Σ(゚Д゚ ;)!
  • だったら "Safari を終了" のキーボードショートカットを他のに変えちゃえ o(・д´・。)○

要するに command + Q で発動する処理を、標準の "Safari を終了" から、新たに作成した「終了の確認を求めるプログラムを実行する」に差し替えよう、というわけ。

よく解らない?

うーん……解ってちょ〜だい♪ (●‘∀‘)σ)゚ω゚)、ツンツン

Stage 1: Automator でプログラムの土台を作成

以下の手順で、Automator アクションを組み上げます。形式は先ほども書いた通り "サービス" です。

  1. Automator.app にて "サービス" の新規アクションを作成
  2. 「Apple Script を実行」というアクションを Automator ウインドウ右側の空白領域にドロップ
  3. 「アプリケーションを終了」というアクションをその下にドロップ

必要な処理となるベースはこれだけ。

Stage 2:各アクションに必要な設定(記述)を施す

下図に基づき動作に必要な設定(記述)を加えて行きます。

f:id:kjx130:20161216225200p:plain

本来なら AppleScript のみで完結するのが望ましいのですが……勘弁してください(察し

▼ 赤枠:ここで作成するサービスメニューが Safari に対してのみ機能するように設定します

受け取りに関する条件は無いので[入力なし]、Safari 専用のサービス項目を作るので検索対象は[Safari]を指定します。

▼ 緑枠:『時間制限付きの確認ダイアログ』を出すために AppleScript を記述します

"AppleScript を実行" の入力欄に予め記述されていたものを削除し、代わりに以下を記述します。便宜上改行して記していますが、実際には改行不要です。

display dialog "Safariを終了します:取り消す場合は10秒以内にキャンセルボタンを押してください"
giving up after 10 with icon 2

giving up after 10:"10" は秒数。この例ではダイアログが表示されてから10秒以内に入力(キャンセル or OK ボタンをクリック)が無い場合、ダイアログが閉じられ Automator 次段にある "アプリケーションを終了" に処理が移ります。

with icon 2:メッセージだけでは味気ないダイアログになるので、ダイアログウインドウ左側にアイコンを置きました(種類は 1 か 2 の二択)

引用府内の文言は好きに書いて構いません。ただし、キャンセルボタンを押さない限り(つまり OK を押すか 10 秒放置で)Safari が終了するプログラムを書いているので、その旨が伝わる文言にしておいた方が妥当でしょう。

この AppleScript を実行すると下図の確認ダイアログが出ます。

f:id:kjx130:20161216225155p:plain

▼ 青枠:終了するアプリケーションを設定します。

対象とするアプリケーションに Safari を指定します。

これにより、先のダイアログが表示された後に OK ボタンが押されるか 10 秒が経過するとこの青枠のプログラムが実行されて Safari が終了します。ちなみに[キャンセル]が選ばれていた場合はその場でプログラムが中断されるので、この青枠の処理は行われません(つまり Safari は終了しない)

Stage 3:作成したサービスアクションを保存

保存する時に付けた名称は、そのまま Safari のサービスメニューに現れます。

あまりにもいい加減な名前をつけてしまうと、このあとの手順でセッティングをする時に ?(゜_。)?(。_゜)? となる可能性があるので分かり易い名前をつけて保存することをオススメします。

ここでは『確認して終了』という名前で保存した、とします。

保存し終えたら Safari メニューから "サービス" の項目を開いてみてください。先ほど保存した『確認して終了』が表示されていると思います。現れないようなら Safari の再起動、アカウントへの再ログイン、Mac の再起動などを試してください。

Stage 4:Safari 標準の終了用ショートカットを変更

"Safari を終了" に標準で割り当てられているキーボードショートカット(command + Q)を変更するため、システム環境設定>キーボード>ショートカット を開きます。

ウインドウ左側のリスト欄から "アプリケーション" を選び、右下にある[+]ボタンをクリックすると入力用のシートが表示されるので下図のように設定してください。

f:id:kjx130:20161216225212p:plain

メニュータイトルでは "Safari" の直後に半角スペースが入るので忘れないように

キーボードショートカットは入力欄を選択後、使用するキーを実際に叩くことで入力されます
上図では option, command, Q の 3 つを押しました

Stage 5:作成したサービス項目にショートカットを指定

先ほどと全く同じ要領で以下のように設定します。

f:id:kjx130:20161216225217p:plain

<

ここで、作成したサービスに対して command + Q を割り当てる

このメニュータイトル欄には Stage 3 の保存時に使った名称をそのまま入力します。

この例では「確認して保存」という名前で保存していますので上図のように記載していますが、もし違う名前をつけて保存した場合はそちらの名前を記載してください。

Finish:おつかれさま

これで万事完了です。

これまでは command + Q で Safari はストンと落ちてしまいましたが、これからは Stage 2 で例示したダイアログが出るようになります。

command + Q を誤入力してしまった場合は[キャンセル]をクリックすれば OK です。

Safari を終了してよければ OK を押すか、設定した時間が経過するまで放置してください。

_(:3」∠)_

いやぁ、それにしてもある程度慣れていれば 5 分も掛からないくらい手間のかからないプログラミングだと思いますが、細かく説明を書いて行くと本当に長くなっちゃいますね……これでもかなり省いたんですけど (^_^;A

ちなみにこのエントリー作成に要した時間は約 3 時間半! 書いたり消したりの繰り返しで疲れた(笑)