前言
前陣子說過,發現了 Mac 排程中心的正確用法,在三屏顯示器下很酷,後來又實現了讓 mac 和外聯的顯示器一起隨機成同一個桌布,真是賞心悅目。
想要更高效
然而,如何在桌面空間裡為一堆專案視窗進行自動化佈局這件事一直讓我念念不忘,好在現在有了收穫。
一大波 Applescript 指令碼
此處只分享指令碼和用法,具體組裝需要各人自行領會,菜端上來了,怎麼吃,請自行動筷。
我的工作環境裡,主要涉及 Chrome
Sublime
iTerm
等軟體,以下程式碼供參考。
開一個新視窗(不是新標籤)
方法:
on newWindow(name, openStr, newWindowStr) tell application "Dock" activate end tell tell application "System Events" tell process "Dock" set frontmost to true activate tell list 1 tell UI element name perform action "AXShowMenu" delay 1 key code 126 -- up arrow tell menu name try tell menu item openStr perform action "AXPress" -- 第一次開啟程式 需要多等幾秒 delay 5 end tell on error errMsg tell menu item newWindowStr perform action "AXPress" end tell end try end tell end tell end tell end tell end tellend newWindow複製程式碼
用法示例:
newWindow("Google Chrome", "開啟", "開啟新的視窗")複製程式碼
說明:
- 將常用的軟體放置到 Dock 中,右擊的話可以看到該軟體的選單,選單中的文字,即可作為引數傳入上面給到的方法。
- 如開啟一個新的
google 瀏覽器
視窗,這裡有兩個引數,第一個引數是當前沒有 google 瀏覽器程式存在的命令,第二個引數是如果有 google 瀏覽器程式存在的命令。 - 其他軟體類似,具體命令你右鍵點一下看文字。
移動視窗到指定位置
方法:
on moveBounds(name, topLeftX, topLeftY, bottomRightX, bottomRightY) tell application name set bounds of front window to {topLeftX, topLeftY, bottomRightX, bottomRightY
} end tellend moveBoundson sizePosition(name, topLeftX, topLeftY, width, height) tell application "System Events" to tell application process name tell window 1 set {position, size
} to {{topLeftX, topLeftY
}, {width, height
}
} end tell end tellend sizePosition複製程式碼
用法示例:
sizePosition("Google Chrome", 40, 15, 1828, 1057)moveBounds("Google Chrome", 1519, 116, 1919, 874)複製程式碼
說明:
- 這裡提供了兩個方法,注意引數的區別。
- 之所以有兩種方法,是因為這兩種方法並非總是生效的,具體軟體具體情況不同,請使用時自行選用。
- 至於如何取得準確的座標位置,有個簡單方法就是使用各類截圖工具,如snipaste等。
開啟 Chrome 的 DevTool 並切換成獨立視窗然後移動到指定位置
方法:
on getFrontWindow() tell application "System Events" repeat with theapp in (every application process whose visible is true and frontmost is true) repeat with ew in (every window of theapp) return ew end repeat end repeat end tellend getFrontWindowon openChromeDevTool() tell application "Google Chrome" activate end tell tell application "System Events" key code 53 --esc -- 開啟開發者工具 delay 1 key code 34 using {option down, command down
} end tell -- 切換工具視窗 delay 3 set frontWindowName to name of getFrontWindow() as string if {frontWindowName does not start with "DevTools"
} then --display dialog frontWindowName tell application "System Events" key code 2 using {shift down, command down
} delay 2 end tell end if -- 移動開發者工具 moveBounds("Google Chrome", 1920, -36, 3410, 1043)end openChromeDevTool複製程式碼
用法示例:
openChromeDevTool()複製程式碼
說明:
- 這是我個人的一個特殊需求
- 在開發移動端網頁時,我常常會獨立 DevTool 的視窗,
- 所以我用上述程式碼實現了視窗獨立並移動到副屏顯示器的需求。
用 Sublime 載入一個專案
方法:
on sublOpenWorkspace(name) do shell script "\"/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl\" -n --project \"/Users/AsinW/Library/Application Support/Sublime Text 3/Packages/User/Projects/" &
name &
".sublime-workspace\""end sublOpenWorkspace複製程式碼
用法示例:
delay 1 newWindow("Sublime Text", "開啟", "New Window") delay 1 sizePosition("Sublime Text", 0, 15, 1514, 1080) delay 1 sublOpenWorkspace("jiyingshou_api3") delay 3 sublOpenWorkspace("jiyingshou_admin")複製程式碼
說明:
- 該示例展示了開啟一個新的 Sublime 視窗,移動到指定位置,然後載入多個專案的流程。
- 注意:在上文的方法裡,使用了
Sublime Text.app
的絕對路徑,請大家自行更改為自己電腦中的對應路徑。 - 至於如何管理 Sublime 的專案檔案,如何生成 sublime-workspace 這樣的檔案,請大家自行探索(這是另一件事了,按理說大家應該已經很早就接觸到了,所以此處不作長篇大論)。
開啟 iTerm2 並執行命令
方法:
-- 在當前皮膚執行命令on iTermCmdCurrentTab(cmdStrs) tell application "iTerm" activate tell current window tell current session repeat with cmdStr in cmdStrs write text cmdStr end repeat end tell end tell end tellend iTermCmdCurrentTab-- 開啟一個新標籤,並執行命令on iTermCmdNewTab(cmdStrs) tell application "iTerm" activate tell current window create tab with default profile tell current session repeat with cmdStr in cmdStrs write text cmdStr end repeat end tell end tell end tellend iTermCmdNewTab-- 在當前介面橫向再切一個皮膚出來並執行命令on iTermCmdInPane(cmdStrs) tell application "iTerm" activate tell current window tell current tab tell current session split horizontally with same profile end tell repeat with ss in sessions select ss end repeat tell current session repeat with cmdStr in cmdStrs write text cmdStr end repeat end tell end tell end tell end tellend iTermCmdInPane-- 指定皮膚高度on iTermSetRows(num) tell application "iTerm" tell current session of current window set rows to num end tell end tellend iTermSetRows-- 啟用指定皮膚on iTermActiveSession(num) tell application "iTerm" tell current tab of current window select item num in sessions end tell end tellend iTermActiveSession複製程式碼
用法示例:
delay 1 newWindow("iTerm", "開啟", "New Window (Default Profile)") delay 1 iTermCmdCurrentTab({"cd /Users/AsinW/svnBox/jiyingshou/web/pc"
}) iTermCmdInPane({"cd /Users/AsinW/svnBox/jiyingshou/web/pc", "npm run dev"
}) iTermSetRows(3) iTermActiveSession(0) delay 1 iTermCmdNewTab({"cd /Users/AsinW/svnBox/jiyingshou/web/mobile4"
}) iTermCmdInPane({"cd /Users/AsinW/svnBox/jiyingshou/web/mobile4", "npm run dev"
}) iTermSetRows(3) iTermActiveSession(0) delay 1 moveBounds("iTerm", -1187, 136, -1, 935)複製程式碼
說明:
- 上述示例描述了開啟 ITerm ,並在兩個標籤四個皮膚中執行對應命令的流程。
- 在命令執行完最後,該視窗被移到了左側顯示器裡了哦。
後語
工具是死的,人是活的。
有很多大家耳熟能詳的工具或方法,只是聽過,沒有用過,因為你沒有想象到自己使用的場景,等到頓悟的那一天,會發現,哦,可以這樣那樣的用。
以此記錄,供大家參考或收藏或路過。
原文來自阿星的部落格:wanyaxing.com/blog/201808…