社長:スクリーンショットを撮ったり、PDFに保存した後に、それで出来たファイルにアクセスしたい事が多いのですが、保存する場所は一定では無いので面倒です。
基盤:Finderで「Recents」を開くと、最近アクセスしたものは見れるんですけどね。
社長:そもそも、それも結構面倒です。ワンクリックで開けると良いのですが。具体的には、スクリーンショットを撮ってウェブページに貼り付けるとか、ウェブページを印刷したものをAcrobatで開いて署名してまたそれをウェブページに貼り付けるとかなんですが。
社長:スクリーンショットについては、撮った後に数秒間画面右下にサムネール状にポップアップしていて、ドラッグできるんですが、タイムアウトが短くて辛いのです。タイムアウトの設定方法がわからない。
開発:メニューバーか、右クリックしてコンテクストメニューに「最後のそれ」というのができると良いですね。あるいは、最後にできたファイルの幾つかをそれがなにかによらずスクリーンショットのようにポップアップして置いてくれるとか。
社長:ファイルが作られる場所は数カ所程度なので、それをマージして時間順に表示してくれるというのでも良いです。
基盤:このFinderの「Smart Folder」って何ですかね。Mailのと同じようなものなら、まさにそういうものかなと思いますが。「This Mac」で検索文字列に「.」とか指定すると、それに近い振る舞いのような。
社長:なるほど。原理的にはこれですかね。でも、ファルダは普通名前に「.」を含まないし、検索の対象にしたいフォルダはそう多数では無いんですけどね。Mac全域のファイルの生成消滅を見せられてもなーって感じがします。それはそれで面白いけど。
開発:思うにコレ、特定のディレクトリのセットをfindしては最新のいくつかにシンボリックリンクを貼るようなディレクトリでも良さそうですが。
社長:それだと、画像とかドラッグできますかね。
開発:やってみましょう… ああ、だめですね。readlink してくれないみたいです。
開発:このSmart Folderの実体は、~/Library/Saved Searches の下に保存される xml のようですが… まあ条件式が書いてあるだけですね。たかが条件式を表現するのにこれほど見にくい記法というのもある意味すごいというか…
基盤:Finder で指定できるんじゃないですかね。検索モードに入って… +で条件を追加… あれ?ORってどうするんですかね? …(しばし検索)… なんだ、Altを押すと、+の表示が…に変わって、それをクリックするとAND / OR / NOT の条件ノードみたいのが挿入されるようです。
開発:どうしてはじめから「…」を表示してないのか、全く理解できないんですが…「?」とか「i」というお助けボタンも無い。
社長:シンプルにしようとしているのか、削る必要のないとこまで削っちゃう風潮って、最近のGoogleのUIでも感じますね。
開発:まあ、ということで、Finderでやりましょう。まず Finder で New Smart Folderを開く。
開発:やりたいことはただこれだけですね。探索するディレクトリを限定するところはとりあえず放置します。条件はPNGかPDFで1日以内に更新されたもの。
開発:でこれを「最近のそれ★」という名前でFinderのサイドバーに固定します。
基盤:しかしこれ、リストモード以外の表示では指定したようにファイルがソートされてないって、どういう思想なのでしょうね?
開発:それとか、これはバグと言うかSmart Folder未対応なのかなというのがコレ。メニューから直接、スマートフォルダーに飛べないんです。
基盤:日本語がきらいとか?
開発:いや、そういうことでは無く、ローマ字でも。すでに消したスマートフォルダ名がメニューに残ったりもします。
社長:まあ、この辺りも過渡期を目撃している面白さなのかも知れませんね。
基盤:おや?Add to Dock というのがありますね。
開発:ほんとだ。どれどれ。…
開発:うーむ。
基盤:なんというか気まずいものを見たような空気感ですね。
開発:Sort by Modified にしてるんですが、そのとおりになってないし…
社長:なんにしても大混雑のDockに行くのも嫌ですね。せめてメニューバー。できればデスクトップで右クリックが良いです。この New Folder の下あたりにぜひ。
開発:ああ、さっきの「最近のそれ」がまだメニューにあるのは、Smart Folder置き場にあるからですね。Finder のサイドバーの右クリックの Show in Enclosing Folderで出てきました。
開発:ではこれを削除して…
基盤:あれ?
開発:なんというか、メニューとの連携というか同期が不完全ですね。
* * *
開発:それにしても、今日から世間が4連休だというのは知りませんでしたね。
基盤:体育の日が7月だなんてびっくりです。
社長:そうとはしらず、昨日クロネコでモノを送ってしましました。まあナマ物ではないですし、来週月曜には再配達してくれると思いますが。
* * *
開発:さてそれでこの件で調べていてとても面白いと思ったのは、上で見た Smart Folder の実体です。これは .savedSearch という長たらしい拡張子のついたXMLファイルなんですが、これを MacOSX がウィンドウアプリで開こうとすると、Finder が選ばれて起動されて、その XML に記述された条件で検索・フィルタする、っていう仕組みになっているように見えます。
開発:でその、「ウィンドウアプリで開く」のが /usr/bin/open という小さなコマンドらしいんです。とても印象的なのが、man open の最後に「HISTORY: First appeared in NextStep」とあることです。
社長:歴史というか出自を感じますね。
開発:そういうわけで、上のような条件で検索した結果を表示するFinderを開くには、単に /usr/bin/open "最近のあれ★.savedSearch" とすれば良いことがわかりました。
基盤:あとはこれをどうメニューに表示するかですね。
* * *
開発:というわけで紆余曲折しましたが、思ったようにメニューに表示することは今の所できてません。キーボードのショートカットなら簡単。ですが、実は人間がクリックやらキーインせずとも、自動的に状況をみてポップアップするというのが一番良いかもという事になりました。
開発:仕組みとしては MacOSX のAutomatorアプリのワークフローを活用します。「Folder Action: A workflow attached to a folder in the Finder. When items are added to the folder, the workflow runs and the files are used as input to the workflow.」
社長:昨日 Apple のガイドをけなしたばかりですが、これは簡潔でわかりやすい文章ですね。Go のガイドみたいです。
開発:ただ複数のフォルダーのアクションを見張っていることは普通に必要なので、それが一つの条件式書けばOK的にサポートされてないのはちょっと残念かなとは思います。
社長:一方でフォルダアクションのアタッチという形で、変化のあったフォルダをポップしてくれるという機能を使えば、私の希望はほぼ叶えられていたとも言えます。
開発:「Smart Folderの内容に変化があったら発火する」という条件が書けると良いのだと思いますね。Smart Folderにしても、ソートして最初の20件だけ採るとか、時間の範囲も分秒単位で指定できるとかしたい。
社長:そのへんはOSで仕組みを作ってくれないと、性能的に無理ですからね。
開発:FinderのPreferenceにしても、起動時に自動的に開くフォルダとして、Smart Folder が指定できないようなんです。
開発:変化があってからアクションが起こるまでに5秒程度の遅延があるのも気になります。Finderで起こした変化なら1秒以内に反応するんですが。
社長:でも最近の Catalina のアップデートぶりを見ていると、どんどん良くなってくんじゃないかと期待してしまいますね。なんしても、今日は我社にとって、MacOSXで workflow というものと、なんちゃって app を最初に作った記念日になりました。one giant leap だったと思います。
開発:それにしても、コンテクストメニューに対応させる service が、システム環境設定のキーボードのショートカットにあるというのは、たまげましたねw
社長:右クリックとか、コンテクストメニューって昔のMacには無かったのかもね。
-- 2020-0723 SatoxITS