デスクトップ上のファイルを掃除するFlow Launcherプラグインを作った
Flow Launcher用のプラグインを初めて作ってみました。
umi-uyura/Flow.Launcher.Plugin.DesktopCleanup
プラグインページにも掲載してもらえました。
Flow Launcherとは
Flow LauncherはWindows用のアプリケーションランチャーです。
以前は Hain を使っていたのですが、いつの間にかリポジトリがアーカイブ状態になっていて、開発が止まってしまっているようでした。
そこで乗り換え先を探していくつかのランチャーアプリを試してみて、個人的に気に入ったので使ってみているのがFlow Launcherです。
wingetでインストールできます。
> winget install "Flow Launcher"
自分でプラグインを作ることができるものを探していて、Flow Launcherは.NET(C#) / Pythonで書くことができます。
※私が2,3ヶ月前に着手したときには上記2つがメインでしたが、最近になってJavaScript/TypeScriptでの開発方法もドキュメントに追加されました。
About Flow's TypeScript/JavaScript plugins
Desktop Cleanupプラグイン
今回作ったのは、デスクトップにあるファイルやフォルダを削除する、もしくはゴミ箱に移動するプラグインです。
私はデスクトップにはゴミ箱以外のファイル等を置かない派なのですが、wingetやChocolateyを使ってアプリケーションをインストールしたりアップデートをするたびにショートカットが作られてしまったりするので、それをサクッと削除したいときに使います。
Flow Launcherを使っている方であれば、ランチャーに pm install desktop cleanup
と入れて実行するか、もしくは設定画面のPlugin StoreからDesktop CleanupのInstallボタンを押すことでもインストールできます。
dc clean
で削除、 dc trash
だとゴミ箱に移します。
ちなみにゴミ箱に入れた場合でも、Flow Launcherで Empty Recycle Bin
を実行するとゴミ箱を空にできるので、いきなり削除するのが怖い人でも安心です。
今回のハマりどころ
Publicユーザーのデスクトップ
単純にデスクトップ上にあるファイル(ショートカット)を削除するだけなので大したことないと思っていたのですが、いざやってみたら削除されない、というかそもそもプログラムからも見えないファイルがあって、その解明に時間を使ってしまいました。
見えないと思っていたのは、実際には全てのユーザー向けにインストールされたアプリのショートカットでした。
これは実体としてはPublicというユーザーのデスクトップ上に存在しており、それが個々のユーザーのデスクトップ上にも表示されるというWindowsの仕組みでした。(たしかXPあたりのころはAll Usersという名前だった気がする)
インストーラですべてのユーザー向けにインストールした場合など、実際にはこのような仕組みになっていたんですね。
このため、自分のデスクトップ上では見えているのに、コマンドプロンプトなどでデスクトップフォルダの中を見た場合には(当然)存在していないということになります。
当初、プログラム上から自分のデスクトップのパス( %USERPROFILE\Desktop
)にあるファイルを削除するようにしていましたが、そうするとPublicユーザーのデスクトップ( %PUBLIC%\Desktop
)にあるものは当然パスに含まれないために消えせん。
最初はなぜ見えないのかわからず、権限の問題?シンボリックリンクの種類?など見当違いの方向を調べていましたが、消せないショートカットのプロパティの場所に表示されているパスを見てようやく気づいた次第です。
基本的にPCは一人でしか使わないですし、デスクトップに何か置かれたらすぐに削除するかどこかに移してしまうこともあって今まで気にしたことがありませんでしたが、今更ながらWindowsのマルチユーザーの仕組みの一端を知りました。