日常的に生じている不満を解消するための、ちょっとしたかき捨てScript……になるはずだったものです。
Classic Mac OSからMac OS Xへの移行後、Finderの仕様で大きく変わった点が1つあります。「同じフォルダのウィンドウを複数枚オープンできるようになった」点です。
その結果、
といったように、同じフォルダを指し示すウィンドウが何枚もたまる現象が起きています。これは別にバグでも不具合でもありません。仕様です。
この重複Windowを掃除するためのScriptを書いてみました。
AppleScript名:ターゲットが同じWindowを取得(未遂).scpt |
tell application "Finder" tell window 1 set aTarg to target end tell set wList to every window whose target is equal to aTarg end tell |
何も考えずに書き始めると、こんな(↑)感じでしょう。ただ、このScriptは動きません。フィルター参照は、たとえばファイル名や拡張子、ファイル種別(kind)あたりには使えるものの、この「target」属性に対しては効きません。
そこで、仕方なくちょっと腰をすえて書いてみました。これ(↓)を動かすと、
のように重複ウィンドウが一掃されます。これでいいはずです。
AppleScript名:targetが重複しているFinder Windowをクローズする.scpt |
— – Created by: Takaaki Naganoya – Created on: 2021/07/22 — – Copyright © 2021 Piyomaru Software, All Rights Reserved — set clList to {} tell application "Finder" set wList to every window –> {Finder window id 1775 of application "Finder", Finder window id 1612 of application "Finder", Finder window id 1740 of application "Finder", Finder window id 1641 of application "Finder", Finder window id 1630 of application "Finder", Finder window id 1618 of application "Finder", Finder window id 1599 of application "Finder", Finder window id 1592 of application "Finder", Finder window id 1586 of application "Finder", Finder window id 1580 of application "Finder", Finder window id 1575 of application "Finder", Finder window id 1569 of application "Finder", Finder window id 1563 of application "Finder"} set tList to (target of every window) as alias list –> {alias "Macintosh HD:Users:me:Public:ドロップボックス:", alias "Macintosh HD:Users:me:Documents:AppleScript 12.0:", alias "Macintosh HD:Users:me:Public:ドロップボックス:", alias "Macintosh HD:Users:me:Public:ドロップボックス:", alias "Macintosh HD:Users:me:Public:ドロップボックス:", alias "Macintosh HD:Users:me:Public:ドロップボックス:", alias "Macintosh HD:Users:me:Public:ドロップボックス:", alias "Macintosh HD:Users:me:Public:ドロップボックス:", alias "Macintosh HD:Users:me:Public:ドロップボックス:", alias "Macintosh HD:Users:me:Public:ドロップボックス:", alias "Macintosh HD:Users:me:Public:ドロップボックス:", alias "Macintosh HD:Users:me:Public:ドロップボックス:", alias "Macintosh HD:Users:me:Public:ドロップボックス:"} –ターゲットフォルダをユニーク化 set bList to removeDuplicates(tList) of me –> {alias "Macintosh HD:Users:me:Documents:AppleScript 12.0:", alias "Macintosh HD:Users:me:Public:ドロップボックス:"} –ユニーク化したターゲットでループ repeat with i in bList set j to (contents of i) as alias set firstF to true –ウィンドウでループ repeat with ii in wList set jj to contents of ii set tmpTarg to (target of jj) as alias if tmpTarg is equal to j then –最初の1つ目のWindowだけ残す if firstF = true then set firstF to false else –2個目以降のWindowはクローズ対象リストに入れる set the end of clList to jj end if end if end repeat end repeat –クローズ対象とされるFinder Windowを順次クローズ repeat with i in clList set j to contents of i try ignoring application responses close j end ignoring end try end repeat end tell on removeDuplicates(aList) set newList to {} repeat with i from 1 to (length of aList) set anItem to item 1 of aList set aList to rest of aList if {anItem} is not in aList then set end of newList to anItem end repeat return newList end removeDuplicates |
edama2さんがコメント欄に投稿してくださったプログラムを掲載しておきます。自分が「安全のためにこのぐらいの処理は必要(かも?)」と付けまくった処理を「それ別に実際のところ必要ないんじゃない?」と省略された感じです。
あとは、edama2さんのScriptだと「最前面のWindowのtargetと同じtargetを持つWindowをクローズする」という動作ですが、自分のScriptは「targetが重複しているWindowは1つを残してあとすべてをクローズする」という動作を行うので、厳密にいえば違うものです。
AppleScript名:targetが重複しているFinder Windowをクローズする v2.scpt |
– Created by: edama2 – Created on: 2021/07/22 tell application "Finder" tell front window set aTarg to target end tell set aList to (every Finder window) as list repeat with num from 2 to count aList set anItem to (aList)’s item num if (anItem’s target is aTarg) then close anItem end repeat end tell |