如何区分 iTerm2 windows 以仅使用 Hammerspoon 移动/调整其中一个?

How to distinguish between iTerm2 windows to move / resize only one of them with Hammerspoon?

我打开了两个 iTerm2 windows,我想通过 Hammerspoon 放置一个并调整其大小,同时保持另一个不变。

hs.hotkey.bind({"cmd", "alt", "ctrl"}, "Right", function()
    local layout = {
        {"iTerm2", "/in/my/work/dir", nil, hs.geometry.rect(0.0, 0.40, 0.6, 0.6), nil, nil},
    }
    hs.layout.apply(layout)
end)

当我运行上面的代码时,没有任何反应; Hammerspoon 找不到我的 iTerm2 windows,即使我的 window 的标题中有“/in/my/work/dir”。

当我用 nil 替换 "/in/my/work/dir" 时,Hammerspoon 移动并调整了我所有的 iTerm2 windows 的大小。这是有道理的,因为我只是要求所有 iTerm2 windows 而没有指定标题。

当我添加调试代码将我的 iTerm2 windows 列表打印到控制台时,我只看到一个 iTerm2 window:

hs.fnutils.each(hs.application.runningApplications(), function(app)
    if string.find(app:name(), "iTerm2") then
         print("Found " .. app:name() .. " -- " .. app:title())
    end
end)

这会打印:

Found iTerm2 -- iTerm2

如何使用 Hammerspoon 区分我的 iTerm2 windows 并仅移动/调整其中一个的大小?

当您传递完整的标题时,这实际上有效,而不仅仅是标题的一部分。我想当 documentation 说“包含 window 标题的字符串”时我被误导了。必须完全匹配。