僅以此項目向Go2Shell致敬喳逛、也祝Github10周年生日快樂最铁,整個項目開源于Github,直接想用的朋友可以去百度網(wǎng)盤下載费就。
背景
在macOS系統(tǒng)中诉瓦,Finder(中文被官方譯為訪達)扮演著文件管理器的角色。在大多數(shù)場景下力细,F(xiàn)inder還是挺好用的睬澡,但是有一點讓我很抓狂,那就是我在Finder視圖中發(fā)現(xiàn)了一個文件或文件夾艳汽,想去它的父級目錄時比較麻煩猴贰,因為Finder工具欄左邊的< >按鈕經(jīng)常是灰色的对雪,而且也只是能記錄著你之前訪問過的文件路徑歷史河狐,有點類似于safari里訪問過網(wǎng)頁的歷史。
Finder(訪達)的工具欄截圖 (< >為灰色)瑟捣,藍色指南針為GoBACKSPACE
macOS的Finder只幫你記錄了按時間先后訪問過的文件地址馋艺,這意味著按<鍵并不一定意味著去父級文件夾,它只表示是你之前訪問過的文件夾迈套。 更多情況下捐祠,<和>按鍵是灰色的,不讓按的狀態(tài)桑李。
而GoBACKSPACE的出現(xiàn)將徹底改變這一現(xiàn)狀踱蛀,GoBACKSPACE可以做到的就是讓你在文件的絕對路徑關系之間瀏覽文件。主要需要解決的絕對路徑去父文件夾的功能贵白,因為去子文件夾只需要靠雙擊操作即可率拒。我覺得絕對路徑關系是更符合我思考的一種方式。去父文件夾這件事還是經(jīng)常發(fā)生的禁荒,比如你在一個項目視圖下猬膨,想去父目錄將整個項目刪除或AirDrop分享給其他人;搜索到了一張照片呛伴,想將該目錄下所有照片打包等…
由于GoBACKSPACE和Finder之間的關系緊密勃痴,把它做成一個類似Go2Shell那樣的插件是更好的選擇;考慮到GoBACKSPACE的開發(fā)初衷是幫助用戶更好的在不同文件夾間切換热康,因此這里選用了一個指南針作為logo沛申,乍一看跟safari的圖標好像,估計上架時會被蘋果噴姐军∥鬯看著旁邊的Go2Shell,竟毫無違和感。
希望至此衫贬,讀者已經(jīng)明白了我為什么要開發(fā)GoBACKSPACE德澈。
使用方法
首先要下載這個軟件,我將安裝文件打包上傳到了百度網(wǎng)盤固惯,無需密碼即可下載梆造。
為了幫助讀者將GoBACKSPACE添加到Finder工具欄,我做了一個Gif如下葬毫。
將GoBACKSPACE添加到Finder工具欄的方法
一次添加即可镇辉,無需重復添加,使用它的時候贴捡,需要兩個步驟:
- 步驟1:點擊icon
- 步驟2:沒有步驟2!!
插件的最終效果demo
核心功能的實現(xiàn)
本項目的需求是我個人的真實需求忽肛,實現(xiàn)的時候參考了PathToGo這個項目,該項目返回上層使用了AppleScript烂斋,蘋果自己的腳本語言屹逛,并使用Swift與之進行交互,返回腳本執(zhí)行成功與否汛骂;并根據(jù)腳本的執(zhí)行情況給用戶彈toast罕模,以免在最頂層目錄時,不能繼續(xù)往父級目錄前進給用戶帶來困擾帘瞭。
tell application "Finder"
set currentPath to POSIX path of (target of window 1 as alias)
set myArray to my theSplit(currentPath, "/")
set lengthOfArray to the length of myArray
set the_path to "" as string
if lengthOfArray ≤ 3 then
return "fail"
else
set lengthOfNewArray to (lengthOfArray - 2)
set parentPath to items 2 through lengthOfNewArray of myArray
repeat with anItem in parentPath
set the_path to the_path & "/" & anItem
end repeat
set the_path to the_path & "/"
-- go2Parent(the_path)
set the_folder to (POSIX file the_path) as alias
tell application "Finder"
activate
if window 1 exists then
set target of window 1 to the_folder
else
reveal the_folder
end if
end tell
return "OK"
end if
return myArray
end tell
on theSplit(theString, theDelimiter)
-- save delimiters to restore old settings
set oldDelimiters to AppleScript's text item delimiters
-- set delimiters to delimiter to be used
set AppleScript's text item delimiters to theDelimiter
-- create the array
set theArray to every text item of theString
-- restore the old setting
set AppleScript's text item delimiters to oldDelimiters
-- return the result
return theArray
end theSplit
AppleScript的邏輯是將當前Finder視圖的路徑返回淑掌,然后將這個路徑以”/”進行分割,并根據(jù)返回數(shù)組的長度蝶念,去掉最后兩個元素抛腕,形成新的路徑,讓AppleScript控制Finder將當前頁面替換為新的文件夾路徑媒殉,由于AppleScript的原生性担敌,體驗還是非常順滑的。
Toast的出現(xiàn)和消除添加了動畫适袜,且動畫的時間都是可以設置的柄错,實現(xiàn)于ToastWindowController.swift文件中,感興趣的讀者可以去將項目clone下來看看苦酱,我覺得這個部分可以單獨抽出去成為一個小輪子售貌,也來源于PathToGO。