GoBACKSPACE————致敬Go2Shell的macOS Finder插件

僅以此項目向Go2Shell致敬、同時慶祝Github10週年生日快樂,整個項目開源於Github,直接想用的朋友能夠去百度網盤下載。git

背景

在macOS系統中,Finder(中文被官方譯爲訪達)扮演着文件管理器的角色。在大多數場景下,Finder仍是挺好用的,可是有一點讓我很抓狂,那就是我在Finder視圖中發現了一個文件或文件夾,想去它的父級目錄時比較麻煩,由於Finder工具欄左邊的< >按鈕常常是灰色的,並且也只是能記錄着你以前訪問過的文件路徑歷史,有點相似於safari裏訪問過網頁的歷史。github

Finder(訪達)的工具欄截圖 (< >爲灰色),藍色指南針爲GoBACKSPACEswift

macOS的Finder只幫你記錄了按時間前後訪問過的文件地址,這意味着按<鍵並不必定意味着去父級文件夾,它只表示是你以前訪問過的文件夾。 更多狀況下,<和>按鍵是灰色的,不讓按的狀態。segmentfault

而GoBACKSPACE的出現將完全改變這一現狀,GoBACKSPACE能夠作到的就是讓你在文件的絕對路徑關係之間瀏覽文件。主要須要解決的絕對路徑去父文件夾的功能,由於去子文件夾只須要靠雙擊操做便可。我以爲絕對路徑關係是更符合我思考的一種方式。去父文件夾這件事仍是常常發生的,好比你在一個項目視圖下,想去父目錄將整個項目刪除或AirDrop分享給其餘人;搜索到了一張照片,想將該目錄下全部照片打包等…數組

因爲GoBACKSPACE和Finder之間的關係緊密,把它作成一個相似Go2Shell那樣的插件是更好的選擇;考慮到GoBACKSPACE的開發初衷是幫助用戶更好的在不一樣文件夾間切換,所以這裏選用了一個指南針做爲logo,乍一看跟safari的圖標好像,估計上架時會被蘋果噴。看着旁邊的Go2Shell,竟毫無違和感。app

但願至此,讀者已經明白了我爲何要開發GoBACKSPACE。工具

使用方法

首先要下載這個軟件,我將安裝文件打包上傳到了百度網盤,無需密碼便可下載。動畫

爲了幫助讀者將GoBACKSPACE添加到Finder工具欄,我作了一個Gif以下。ui

將GoBACKSPACE添加到Finder工具欄的方法spa

一次添加便可,無需重複添加,使用它的時候,須要兩個步驟:

  • 步驟1:點擊icon
  • 步驟2:沒有步驟2!!

App icon

插件的最終效果demo

核心功能的實現

本項目的需求是我我的的真實需求,實現的時候參考了PathToGo這個項目,該項目返回上層使用了AppleScript,蘋果本身的腳本語言,並使用Swift與之進行交互,返回腳本執行成功與否;並根據腳本的執行狀況給用戶彈toast,以避免在最頂層目錄時,不能繼續往父級目錄前進給用戶帶來困擾。

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視圖的路徑返回,而後將這個路徑以」/」進行分割,並根據返回數組的長度,去掉最後兩個元素,造成新的路徑,讓AppleScript控制Finder將當前頁面替換爲新的文件夾路徑,因爲AppleScript的原生性,體驗仍是很是順滑的。

Toast的出現和消除添加了動畫,且動畫的時間都是能夠設置的,實現於ToastWindowController.swift文件中,感興趣的讀者能夠去將項目clone下來看看,我以爲這個部分能夠單獨抽出去成爲一個小輪子,也來源於PathToGO。

參考

相關文章
相關標籤/搜索