Apple Script (JavaScript for Automation)でiTermを複数タブで開くのを自動化
Ruby on Railsで開発しているのだが、
docker
:docker-compose up
server
:rails s
console
:rails c
- 外部のやつ
タスク
orgit
:rake hogehoge:fugafuga
orgit
みたいに最低でも5タブ(ウィンドウだとちらかったのでタブにしている)開く。
これを毎回手動で開くのがめんどくさかったので、 Apple Script
くんに頑張ってもらうことにした。
しかし、記法が好きなれなかったので JXA
で実装した。
gif貼りたいけど、諸事情で貼れない。
以下コード
var titles = ["docker", "server", "console", "git or rake", "others"]; function run(input, parameters) { var Terminal = Application('iTerm'); Terminal.createWindowWithDefaultProfile(); var terW1 = Terminal.windows[0]; delay(1) try{ for(var i = 0; i < titles.length; i++){ session = terW1.tabs[i].sessions[0]; session.write({ text: 'cd path/to/somewhere', newline: true }); session.name = titles[i]; sys = Application("System Events"); if( i !== titles.length - 1){ sys.keystroke("t", { using: "command down"}); }else{ sys.keystroke("1", { using: "command down"}); } delay(1); } }catch(e){ // なにか書こうと思ったが今はいいや } delay(1) return input; }
参考にしたコードの変数が js
だけど大文字で始まったり、スネークケースかキャメルケースか変なところだが…。
session.write({ text: 'cd path/to/somewhere', newline: true });
<=
この部分は session.cmd
みたいなのがあるかなと思ったけど、いい感じなのが動かず、こういう形にした。
sys.keystroke("t", { using: "command down"});
<=
新規にタブを作成してする
delay(1);
<=
これをいれないと、同じタブ内でやりきってしまう。
sys.keystroke("1", { using: "command down"});
<=
ループの最後で最初のタブに戻る
return input;
<=
いらない気がするけど残している。