使用 iTerm 以编程方式分割窗口?

使用 iTerm 以编程方式分割窗口?

在我的开发工作站上,我经常每天早上必须启动相同的命令。

zeus startzeus server(通过 zeus 启动 rails),,redis-server以及其他 3 个。

我知道很多人会说让它们一直运行,但是我自己做了很多工作,当我在处理单独的 Rails 项目时,让它们全部运行会让我感到很烦。

是否有某种高级别名可以让我从一个命令启动所有这些,最好是通过编程方式拆分窗口(如⌘-D)。

我正在将 iTerm2 与 oh-my-zsh 一起使用。

如果它们都在同一个窗口中(以某种方式作为后台进程运行),我不会介意,但是我有时确实需要查看输出,并处理每个命令的输出,所以我不确定它将如何工作。

谢谢!

答案1

您可以轻松地直接从 iTerm2 调用它来模拟按下D

osascript -e 'tell application "System Events" to key code 2 using command down'

为了使其工作,您需要在后台启动程序,否则您无法运行osascript

some-command &
osascript -e '…'

从那里开始,您将进入一个新的 iTerm2 窗口,因此您需要使用write textAppleScript 中的选项来运行进一步的 shell 命令。更多信息请参见此处:如何设置 AppleScript 以打开新的 iTerm2 选项卡并更改目录?

答案2

这里的答案有点过时了......这里有一个执行类似操作的示例脚本:

tell application "iTerm"
    tell current window
        -- create a tab for background db stuff
        create tab with default profile
        tell current session
            write text "mongod &"
            write text "redis-server &"
        end tell
        close current tab

        -- create tab to run aioc server
        create tab with default profile
        tell current session
            write text "title server"
            write text "aactivate"
            write text "arunserver"
            -- split tab vertically to run scheduler
            split vertically with default profile
        end tell

        -- run scheduler
        tell last session of last tab
            write text "title scheduler"
            write text "aactivate"
            write text "ascheduler"
            -- split tab vertically to run main controller
            split vertically with default profile
        end tell

        -- run main_controller
        tell last session of last tab
            write text "title main_controller"
            write text "aactivate"
            write text "amain_controller"
            -- split tab vertically to run aggregator
            split vertically with default profile
        end tell

        tell last session of last tab
            write text "title aggregator"
            write text "aactivate"
            write text "aggregator"
        end tell




    end tell
end tell

答案3

我最近创建了一个 CLI 工具来拆分窗格,它使用 Python API 而不是 AppleScript,因为 AppleScript API 已被弃用

回购

安装:

pip3 install iterm-pane-spliter
iterm-pane-spliter <json-structure>

例子

垂直分割成 2 个窗格

为了这:

-------------------
|        |        |
|        |        |
|   1    |    2   |
|        |        |
|        |        |
-------------------

您应该提供的 json 结构是:

提示:只需添加更多数字即可添加更多垂直窗格

[
  [1, 2]
]

因此您需要运行:

iterm-pane-spliter "[[1, 2]]"

一些疯狂的结构

-------------------
|     1     |     |
| --------- |  5  |
|     |     |     |
|     |  7  | --- |
|  2  |     |  3  |
|     | --- | --- |
|     |  8  |  6  |
| --- | --- | --- |
|        4        |
-------------------

您应该提供的 json 结构是:

[
    [1, 1, 5],
    [2, 7, 5],
    [2, 7, 3],
    [2, 8, 6],
    [4, 4, 4]
]

因此您需要运行:

iterm-pane-spliter "[[1, 1, 5], [2, 7, 5], [2, 7, 3], [2, 8, 6], [4, 4, 4]]"

repo README 中有更多示例

相关内容