3

我已经从https://github.com/asmagill/hs._asm.undocumented.spaces安装了“无证空间”模块。特别是,它提供了一种方法moveWindowToSpace,我尝试使用cmd+1以下方法将当前窗口移动到空间 1:

local spaces = require("hs._asm.undocumented.spaces")
function MoveWindowToSpace(sp)
    local spaceID = spaces.query()[sp]
    spaces.moveWindowToSpace(hs.window.focusedWindow():id(), spaceID)
    spaces.changeToSpace(spaceID)
end
hs.hotkey.bind({"cmd"}, "1",function() MoveWindowToSpace(1) end)

这在将窗口移动到新空间的意义上起作用,但是,空间似乎是伪随机顺序。

有谁知道如何正确地将spaceIDs 返回的 s 映射spaces.query()到实际空间?

4

2 回答 2

4

在空间模块作者的一些提示之后,我想出了以下内容,这似乎可以解决问题。

local spaces = require("hs._asm.undocumented.spaces")
-- move current window to the space sp
function MoveWindowToSpace(sp)
    local win = hs.window.focusedWindow()      -- current window
    local uuid = win:screen():spacesUUID()     -- uuid for current screen
    local spaceID = spaces.layout()[uuid][sp]  -- internal index for sp
    spaces.moveWindowToSpace(win:id(), spaceID) -- move window to new space
    spaces.changeToSpace(spaceID)              -- follow window to new space
end
hs.hotkey.bind(hyper, '1', function() MoveWindowToSpace(1) end)

以前我在https://github.com/Hammerspoon/hammerspoon/issues/235上使用了代码的变体,它与 osx 定义的用于切换空间的热键挂钩,但上面的代码要快得多!

于 2017-10-19T16:21:25.583 回答
0

对于那些在 2020 年寻找更简单的工作解决方案的人,您可以使用苹果脚本:

function moveWindowOneSpace(direction)
    local keyCode = direction == "left" and 123 or 124

    return hs.osascript.applescript([[
        tell application "System Events" 
            keystroke (key code ]] .. keyCode .. [[ using control down)
        end tell
    ]])
end

我尝试使用此问题的解决方案,但没有奏效。另一方面,苹果脚本就像魅力一样工作。

于 2020-11-05T12:14:18.053 回答