ツタンラーメンの忘備録

プログラミングや精神疾患、ラーメンについて書いていきます。たぶん。

Apple Script (JavaScript for Automation)でiTermを複数タブで開くのを自動化

Ruby on Railsで開発しているのだが、

  • docker : docker-compose up
  • server : rails s
  • console : rails c
  • 外部のやつ
  • タスク or git : rake hogehoge:fugafuga or git

みたいに最低でも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; <= いらない気がするけど残している。