Dockを追加日順で表示する時の試行錯誤

そもそも追加日はFinderには無い項目だ(知らないだけで本当はあるのかな?)。けれども、「ダウンロード」フォルダなんかは、追加日順のファン方式で表示されることで素晴らしく便利になったと思う。クリックすると、一番最近ダウンロードしたファイルが一番下に(マウスの一番近く)、上方向に積み上がるに従って過去にダウンロードしたファイルが表示される。MacBookの狭いスクリーンでは8ファイル分しか表示されないが、大抵の場合はダウンロードしたらすぐに試してみるので、目的のファイルを見失うことはない。逆に本当に必要なファイルが厳選されているので、シンプルに操作し易い。それ以上のファイル数を表示したい時は、「グリット」表示や「リスト」表示も選択できる。「リスト」表示ならフォルダ階層も辿ることができる。
このようにMac OSX 10.5.2になってから、Dockの使い勝手はかなり良くなってきたのだが、それでも自分のMacBook環境においては、追加日順の表示で悩まされることが多い。以下のような悩みを抱えていた。

  • Dockのアイコン表示を「フォルダ」にしてしまうと、webブラウザでダウンロードしたファイルが追加日順に更新されない。(なぜだろう?自分の環境だけだろうか...。)
    • Dockの設定を変更したり、Finder操作でファイルを出し入れすれば、最新の追加日順に更新される。
  • 上記の問題は、Dockのアイコン表示を「スタック」にしておくことで解決する。(正常に動作する)
  • しかし、「スタック」表示ではアイコンを見ただけではそのフォルダが何か?確認することが出来ない。
    • 「スタック」表示 = フォルダの中身のアイコンをDockの表示順序で重ねて表示する方式。*1
    • だから、表示順序を追加日順にしておくと、アイコン表示がダウンロードする度に次々と変化してしまう...。

Dock表示用のファイルを入れておく

「スタック」表示の時、Dockアイコンを見て何のフォルダか確認できない問題を、素晴らしいデザインと創意工夫で解決してくれたのがDRAWERS icon 。(感謝!使わせて頂きます。)

  • クリッピングファイルに好みのアイコンを設定して保存しておく。
  • それを「スタック」表示のフォルダの中に入れる。
  • ファイル名の先頭を半角スペースにしたり、作成日・更新日を未来の日付にして、常に先頭に来るように工夫しておく。
  • すると、素晴らしいデザインの半透明アイコンに飾られて、その「スタック」フォルダ自体が何であるか一目で分かるようになった!


追加日順で常に先頭をキープするために

ところが、追加日順の時だけはこの作戦が通用しない...。「追加日」を未来の日付にしたいのだが、Finderに「追加日」という項目は見当たらないし、「追加日」を好みの日付に設定することは可能なのだろうか?自分には分からなかった...。ここで諦めるのは悔しすぎるほど魅力的な半透明アイコンフォルダ。最後の手段、アップルスクリプトで以下のようにやってみた。

アイコン用のファイルを準備
  • DRAWERS iconをダウンロードする。
  • 好みのアイコンをダウンロードフォルダにドラッグ&ドロップ。
  • ファイル名 「Download .app」を「__icon__」に変更しておいた。
アップルスクリプトの作成
on adding folder items to this_folder after receiving added_items
    do shell script "mv ~/Downloads/__icon__ ~/__icon__"
    do shell script "mv ~/__icon__ ~/Downloads/__icon__"
end adding folder items to
  • 上記ファイルを「/ライブラリ/Scripts/Folder Action Scripts/」フォルダに移動する。
  • ちなみに、do shell scriptの2行は、Finderのスクリプトで以下のように操作しても、結果はほとんど同じだと思う。
tell application "Finder"
    move (file "__icon__" of folder "Downloads" of home) to home without replacing
    move (file "__icon__" of home) to folder "Downloads" of home without replacing
end tell
フォルダアクションを設定
  • 「/ライブラリ/Scripts/Folder Actions/Configure Folder Actions」を起動する。(ダウンロードフォルダにフォルダアクションを設定するために)
    • 「フォルダアクションを利用」をチェックありの状態に。
    • ウィンドウ左の「+」ボタンを押して「アクション付きフォルダ」にダウンロードフォルダを追加する。
    • 「関連付けるアクションを選択: 」で先程保存した「refresh_Downloads_icon.scpt」を選択。
今イチな状態

以上で準備完了。試しにダウンロードしてみると...

  • なぜか、アイコン用のファイルが先頭に更新される場合とそうでない場合がある。
  • どうもSafariでダウンロードした時は更新されないようだ。

動きをじっくり観察してみると、以下のような凝った動きをする。

  • Safariのダウンロード中は、ファイル名に「.download」拡張子が追加され、ダウンロードが完了するまではSafariアイコンの書類にプログレスバーが表示される。(ダウンロード中であることが明示されるのだ。どのくらいダウンロードされたかまで直感的に分かる。)
  • ダウンロードが完了すると、「.download」拡張子は削除され、ファイル本来の「.dmg」や「.zip」等のファイル名に変更される。アイコンもそのファイル形式に変化する。

そのため、ダウンロードが完了した時に「フォルダアクションは反応しないが、追加日は更新される」という現象が起こっているようだ。だから、アイコン用のファイルよりも、ダウンロードしたファイルの方が先頭の状態になってしまっていたのだ。

対策バージョンのアップルスクリプト
  • そこで、以下のように追記してみた。「on removing folder items from...」ハンドラによって、ファイル名が変更された時も、逃さずイベントをキャッチしてくれるようだ。
on adding folder items to this_folder after receiving added_items
    do shell script "mv ~/Downloads/__icon__ ~/__icon__"
    do shell script "mv ~/__icon__ ~/Downloads/__icon__"
end adding folder items to

on removing folder items from this_folder after losing removed_items
    do shell script "mv ~/Downloads/__icon__ ~/__icon__"
    do shell script "mv ~/__icon__ ~/Downloads/__icon__"
end removing folder items from

これでSafariの時もうまく動くようになった!

アップルスクリプトの一般化
  • 現状、Downloadsフォルダ限定のスクリプトになってしまっているので、どのフォルダに設定しても動くように変更してしてみた。
  • ついでに、Safariのダウンロード中は更新しない設定にしておいた。(その方がダウンロード中アイコンのプログレスバーがよく見えるので。)
on adding folder items to this_folder after receiving added_items
    refresh(this_folder, added_items)
end adding folder items to

on removing folder items from this_folder after losing removed_items
    refresh(this_folder, removed_items)
end removing folder items from

on refresh(this_folder, item_list)
    try
        set dir to POSIX path of (this_folder as text) --UNIX式のパスに変換
	set path1 to dir & "/__icon__"
	set path2 to "~/__icon__"

	set item_info to info for (item 1 of item_list)
	set item_extension to name extension of item_info
	if item_extension is not "download" then --ダウンロード中は何もしない
	    do shell script "mv" & space & path1 & space & path2
	    do shell script "mv" & space & path2 & space & path1
	end if
    end try
end refresh


以上で、目指す動きが実現できた!

要望

そもそも、Dockの仕様がもっと洗練されていたらこんなに苦労することは無いはず。求めたいのは以下の仕様だ。

  • 「スタック」表示でカバーアイコンを指定できるようにしたい。
  • 下から上に伸びるリスト表示が欲しい。(ファン表示と同じ順番のリスト表示が欲しい。)
    • 表示順序の昇順、降順は自由に変更できるべき。
  • Finderで表示する時も「追加日順」の並べ替えをしたい。

10.5.3以降のバージョンアップに期待!(素晴らしいソフトウェア作者さんにも期待!)

*1:シフトキーを押しながらスタック表示の項目をクリックしてみて、Appleが表現したかったことが分かった気がする。Leopardの3Dのドックにはちゃんと奥行きがあることにこだわった結果かもしれない。