-
-
Save programus/d3bf9c6b8f9b7648891d1f59b665b35e to your computer and use it in GitHub Desktop.
| window: | |
| # Window dimensions (changes require restart) | |
| # | |
| # Number of lines/columns (not pixels) in the terminal. The number of columns | |
| # must be at least `2`, while using a value of `0` for columns and lines will | |
| # fall back to the window manager's recommended size. | |
| dimensions: | |
| columns: 500 | |
| lines: 30 | |
| # Window position (changes require restart) | |
| # | |
| # Specified in number of pixels. | |
| # If the position is not set, the window manager will handle the placement. | |
| position: | |
| x: 0 | |
| y: 0 | |
| # Window padding (changes require restart) | |
| # | |
| # Blank space added around the window in pixels. This padding is scaled | |
| # by DPI and the specified value is always added at both opposing sides. | |
| #padding: | |
| # x: 0 | |
| # y: 0 | |
| # Spread additional padding evenly around the terminal content. | |
| #dynamic_padding: false | |
| # Window decorations | |
| # | |
| # Values for `decorations`: | |
| # - full: Borders and title bar | |
| # - none: Neither borders nor title bar | |
| # | |
| # Values for `decorations` (macOS only): | |
| # - transparent: Title bar, transparent background and title bar buttons | |
| # - buttonless: Title bar, transparent background and no title bar buttons | |
| decorations: none | |
| key_bindings: | |
| - { key: Return, mods: Command, action: ToggleSimpleFullscreen } |
| local spaces = require('hs._asm.undocumented.spaces') -- https://github.com/asmagill/hs._asm.undocumented.spaces | |
| -- Switch alacritty | |
| hs.hotkey.bind({'alt'}, 'space', function () | |
| local APP_NAME = 'Alacritty' | |
| function moveWindow(alacritty, space, mainScreen) | |
| -- move to main space | |
| local win = nil | |
| while win == nil do | |
| win = alacritty:mainWindow() | |
| end | |
| print(win) | |
| print(space) | |
| print(win:screen()) | |
| print(mainScreen) | |
| local fullScreen = not win:isStandard() | |
| if fullScreen then | |
| hs.eventtap.keyStroke('cmd', 'return', 0, alacritty) | |
| end | |
| winFrame = win:frame() | |
| scrFrame = mainScreen:fullFrame() | |
| print(winFrame) | |
| print(scrFrame) | |
| winFrame.w = scrFrame.w | |
| winFrame.y = scrFrame.y | |
| winFrame.x = scrFrame.x | |
| print(winFrame) | |
| win:setFrame(winFrame, 0) | |
| print(win:frame()) | |
| win:spacesMoveTo(space) | |
| if fullScreen then | |
| hs.eventtap.keyStroke('cmd', 'return', 0, alacritty) | |
| end | |
| win:focus() | |
| end | |
| local alacritty = hs.application.get(APP_NAME) | |
| if alacritty ~= nil and alacritty:isFrontmost() then | |
| alacritty:hide() | |
| else | |
| local space = spaces.activeSpace() | |
| local mainScreen = hs.screen.find(spaces.mainScreenUUID()) | |
| if alacritty == nil and hs.application.launchOrFocus(APP_NAME) then | |
| local appWatcher = nil | |
| print('create app watcher') | |
| appWatcher = hs.application.watcher.new(function(name, event, app) | |
| print(name) | |
| print(event) | |
| if event == hs.application.watcher.launched and name == APP_NAME then | |
| app:hide() | |
| moveWindow(app, space, mainScreen) | |
| appWatcher:stop() | |
| end | |
| end) | |
| print('start watcher') | |
| appWatcher:start() | |
| end | |
| if alacritty ~= nil then | |
| moveWindow(alacritty, space, mainScreen) | |
| end | |
| end | |
| end) |
Cool, looks good 👍
Great configuration thanks!
I have one issue though, but i don't know how to fix it.
When have a full-screen app open and press the hotkey, it opens over the full-screen app as expected but immidiately takes me to the desktop (while alacritty is still over that full-screen app).
Any suggestions on fixing this?
Now hammerspoon replaces "https://github.com/asmagill/hs._asm.undocumented.spaces" to "https://github.com/asmagill/hs._asm.spaces", Could we add a new script?
Thanks
I have rewrite this script to use latest hs.spaces module, and replace get app_name to get bundle id to avoid mismatching with browser title and I works fine with hammerspoon Version 0.9.100(6815):
check my fork for details: https://gist.github.com/truebit/31396bb2f48c75285d724c9e9e037bcd
And here is the Kitty implementation: https://gist.github.com/truebit/d79b8018666d65e95970f208d8f5d149
Here's what I came up with (thanks for the help!):