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

僅以此項(xiàng)目向Go2Shell致敬、也祝Github10周年生日快樂,整個(gè)項(xiàng)目開源于Github,直接想用的朋友可以去百度網(wǎng)盤下載。

背景

在macOS系統(tǒng)中,Finder(中文被官方譯為訪達(dá))扮演著文件管理器的角色。在大多數(shù)場(chǎng)景下,F(xiàn)inder還是挺好用的,但是有一點(diǎn)讓我很抓狂,那就是我在Finder視圖中發(fā)現(xiàn)了一個(gè)文件或文件夾,想去它的父級(jí)目錄時(shí)比較麻煩,因?yàn)镕inder工具欄左邊的< >按鈕經(jīng)常是灰色的,而且也只是能記錄著你之前訪問過的文件路徑歷史,有點(diǎn)類似于safari里訪問過網(wǎng)頁(yè)的歷史。

image

Finder(訪達(dá))的工具欄截圖 (< >為灰色),藍(lán)色指南針為GoBACKSPACE

macOS的Finder只幫你記錄了按時(shí)間先后訪問過的文件地址,這意味著按<鍵并不一定意味著去父級(jí)文件夾,它只表示是你之前訪問過的文件夾。 更多情況下,<和>按鍵是灰色的,不讓按的狀態(tài)。

而GoBACKSPACE的出現(xiàn)將徹底改變這一現(xiàn)狀,GoBACKSPACE可以做到的就是讓你在文件的絕對(duì)路徑關(guān)系之間瀏覽文件。主要需要解決的絕對(duì)路徑去父文件夾的功能,因?yàn)槿プ游募A只需要靠雙擊操作即可。我覺得絕對(duì)路徑關(guān)系是更符合我思考的一種方式。去父文件夾這件事還是經(jīng)常發(fā)生的,比如你在一個(gè)項(xiàng)目視圖下,想去父目錄將整個(gè)項(xiàng)目刪除或AirDrop分享給其他人;搜索到了一張照片,想將該目錄下所有照片打包等…

由于GoBACKSPACE和Finder之間的關(guān)系緊密,把它做成一個(gè)類似Go2Shell那樣的插件是更好的選擇;考慮到GoBACKSPACE的開發(fā)初衷是幫助用戶更好的在不同文件夾間切換,因此這里選用了一個(gè)指南針作為logo,乍一看跟safari的圖標(biāo)好像,估計(jì)上架時(shí)會(huì)被蘋果噴。看著旁邊的Go2Shell,竟毫無違和感。

希望至此,讀者已經(jīng)明白了我為什么要開發(fā)GoBACKSPACE。

使用方法

首先要下載這個(gè)軟件,我將安裝文件打包上傳到了百度網(wǎng)盤,無需密碼即可下載。

為了幫助讀者將GoBACKSPACE添加到Finder工具欄,我做了一個(gè)Gif如下。

image

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

一次添加即可,無需重復(fù)添加,使用它的時(shí)候,需要兩個(gè)步驟:

  • 步驟1:點(diǎn)擊icon
  • 步驟2:沒有步驟2!!
App icon

插件的最終效果demo

核心功能的實(shí)現(xiàn)

本項(xiàng)目的需求是我個(gè)人的真實(shí)需求,實(shí)現(xiàn)的時(shí)候參考了PathToGo這個(gè)項(xiàng)目,該項(xiàng)目返回上層使用了AppleScript,蘋果自己的腳本語(yǔ)言,并使用Swift與之進(jìn)行交互,返回腳本執(zhí)行成功與否;并根據(jù)腳本的執(zhí)行情況給用戶彈toast,以免在最頂層目錄時(shí),不能繼續(xù)往父級(jí)目錄前進(jìn)給用戶帶來困擾。


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的邏輯是將當(dāng)前Finder視圖的路徑返回,然后將這個(gè)路徑以”/”進(jìn)行分割,并根據(jù)返回?cái)?shù)組的長(zhǎng)度,去掉最后兩個(gè)元素,形成新的路徑,讓AppleScript控制Finder將當(dāng)前頁(yè)面替換為新的文件夾路徑,由于AppleScript的原生性,體驗(yàn)還是非常順滑的。

Toast的出現(xiàn)和消除添加了動(dòng)畫,且動(dòng)畫的時(shí)間都是可以設(shè)置的,實(shí)現(xiàn)于ToastWindowController.swift文件中,感興趣的讀者可以去將項(xiàng)目clone下來看看,我覺得這個(gè)部分可以單獨(dú)抽出去成為一個(gè)小輪子,也來源于PathToGO。

參考

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,546評(píng)論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,570評(píng)論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,505評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,017評(píng)論 1 313
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,786評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,219評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,287評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,438評(píng)論 0 288
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,971評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,796評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,995評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,540評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,230評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,918評(píng)論 1 286
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,697評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,991評(píng)論 2 374

推薦閱讀更多精彩內(nèi)容