新迭代之前忙里偷閑摸魚了幾種腳本的寫法:bash, alfred,automator,applescript
這篇就說說這個applescript
以iterm為例
初看它的字典大概長這樣:

1、方法包
它有兩個suite也就是兩個方法包
第一個看名字就知道是一個標准包,這個系統自動加的,給每一個應用程序會自動生成一個這樣的方法包,里面的方法很多是一樣的,但是有的細節有區別:

第二個方法包就是軟件自己提供的方法包了

這里上面淺藍色的是方法,紫色的是類,類可以有自己的方法,下面分別講
2、方法

- 其實這里的方法有一點消息的意思,跟OC有點像
- 第一行
-
- 先是方法名split vertically(用豎直線切割)
- 然后v的意思就是動詞,類似方法的意思
- 然后接着是對這個方法的描述
- 第二行開始是這個消息的發送格式
-
- 先是主消息名
- 后邊接一個specifier類型的參數(有的時候不用傳參數)
-
- 這個specifier類型是什么在哪兒都找不到,自己領悟並且看其他各種的注釋(對,對同一個類型的描述注釋都不太一樣,像這里這個描述,根本就風馬牛不相及)並且搜索各種別人的插邊球回答並且翻看了一些別人寫的AS代碼,最后實踐試出來,這個類型的意思是:window tab session一類的東西
- 之后是描述
- 第三行以及之后就是次消息名
-
- 用中括號括起的表示可選參數,沒用的就是必選
- text類型就是String類型
- 最后一行一個箭頭加后邊,是返回值類型的意思
3、類

- n表示是名詞,是類
- 然后第一部分是包含和被包含關系 elements,類似類圖,告訴你持有和被持有的關系
- 第二部分是方法properties,這塊非常重要,是你要使用的
-
- 這個方法比上面的方法形式要簡單,不需要傳參數,括號里就是返回值類型,后邊接着描述
- 方法調用的方式是:[返回值] = [方法] of [類]
4、一個重要的公用類:application
說這個類重要是因為在我實際操作中發現它非常重要
它是程序開啟(也就是被tell之后就自動生成的類),然后很多方法都需要傳入這個參數,可以說他是一切操作的開始
通過這個類的方法能獲取到一些重要的系統常量:當前應用的窗口、可見性、大小等等數據
在使用Iterm的時候我最覺得重要的是就是返回當前的窗口了,從窗口中才能拿session,拿到session才能干后邊所有的活
5、舉例
以一段對iterm操作的代碼為例具體解釋一下使用時的技巧
這段代碼實現的效果是:按照我的需求打開我的iterm,切分窗口,使用不同的配置文件,分別進入某個路徑

tell application "iTerm" set session1 to (current session of current window) write session1 text "cd ~/AndroidStudioProjects/HqyxEduStudentAndroid" set session2 to (split vertically session1 with profile "Teacher") write session2 text "cd ~/AndroidStudioProjects/Tea" set session3 to (split horizontally session1 with profile "Common") write session3 text "cd ~/AndroidStudioProjects/SharedLibrary" split horizontally session2 with profile "MyProfile" end tell |
split vertically session1 with profile "Teacher" command "cd ~/AndroidStudioProjects/Tea" |
- 在講之前先科普一下自己在探索過程中發現的這個iterm里的幾個概念
-
- window,這個是所有app共通的,就是整個程序窗口
- tab,這里沒有出現使用,指的是一個個tab頁面
- session,是會話的意思,這里值的是一個個小窗口,或者感覺是一個個小進程
- 然后下一段是兩句話
-
- 第一句:先是括號內通過application類的類方法獲取當前的窗口(因為是元類,所以可以直接調方法),然后通過這個窗口的方法獲取當前的session,並且把這個session進行賦值
- 第二個句是給這個session的窗口中運行命令
- 注意,這個session是默認創建的,我們都控制不了
- 下一段還是兩句話
-
- 先是括號內,這句號本身就是一個方法調用,在session1上切分一個新的窗口,並且使用teacher的配置文件來配置,這句話會返回新創建的session,然后把這個session記錄下來並且賦值
- 第二句就是跟上面一樣了
- 非常值得一提的是,第一句括號里的方法本來是還有一個command參數的,使用這個參數的話兩句話可以合並為一句話(表格中第二行),但是非常遺憾的是,它會莫名奇妙報錯,所以只能放棄這種寫法
- 后邊幾段就都是一樣了
總結一些常用知識(非常主觀):
- 資料非常少,可以看到用的人非常少,需要自己探索
- 居然有兩本書的資料可以方便下到,但是這兩本書里能給的幫助真是不多
- 用過的人都說不好,確實是正在沒落的語言
- 會莫名奇妙崩潰,探索能曲線救國的方法
- 線程迷之不安全,最好寫得線程健壯
總結一些習慣用法:
- 獲取當前窗口
- 調用對象的屬性方法
- 賦值方法
- 可以使用小括號進行優先執行
- 判斷某個應用是否開啟
- if else
- 延時:delay 1(延時1S后繼續執行)
- 打印結果:say “string” (直接發聲進行打印)