nikitabobko / AeroSpace

AeroSpace is an i3-like tiling window manager for macOS
https://nikitabobko.github.io/AeroSpace/guide
MIT License
7.52k stars 119 forks source link

Workspace position reset for apps fully killed via "aerospace close" #512

Open Chasewhip8 opened 2 months ago

Chasewhip8 commented 2 months ago

Executing aerospace close either via a bind or directly against any app where the process will be killed via --quit-if-last-window causes the current space to be reset. If it is executed via a bind the workspace will jump to the next space with a window, if it is executed via the cli the current space is not visually updated but I believe under the hood selects the nearest space with a window as well.

Consider including in bug reports:

!!! DISCLAIMER !!! !!! 'debug-windows' command is not stable API. Please don't rely on the command existence and output format !!! !!! The only intended use case is to report bugs about incorrect windows handling !!!

Debug session finished


- Your config

Start AeroSpace at login

start-at-login = true

You can use it to add commands that run after login to macOS user session.

'start-at-login' needs to be 'true' for 'after-login-command' to work

Available commands: https://nikitabobko.github.io/AeroSpace/commands

after-login-command = []

You can use it to add commands that run after AeroSpace startup.

'after-startup-command' is run after 'after-login-command'

Available commands : https://nikitabobko.github.io/AeroSpace/commands

after-startup-command = [ "exec-and-forget /Applications/AutoRaise.app/Contents/MacOS/AutoRaise -delay 0 -focusDelay 1 -disableKey disabled", ]

Normalizations. See: https://nikitabobko.github.io/AeroSpace/guide#normalization

enable-normalization-flatten-containers = true enable-normalization-opposite-orientation-for-nested-containers = true

See: https://nikitabobko.github.io/AeroSpace/guide#layouts

The 'accordion-padding' specifies the size of accordion padding

You can set 0 to disable the padding feature

accordion-padding = 30

Possible values: tiles|accordion

default-root-container-layout = 'tiles'

Possible values: horizontal|vertical|auto

'auto' means: wide monitor (anything wider than high) gets horizontal orientation,

tall monitor (anything higher than wide) gets vertical orientation

default-root-container-orientation = 'auto'

Possible values: (qwerty|dvorak)

See https://nikitabobko.github.io/AeroSpace/guide#key-mapping

key-mapping.preset = 'qwerty'

Gaps between windows (inner-) and between monitor edges (outer-).

Possible values:

- Constant: gaps.outer.top = 8

- Per monitor: gaps.outer.top = [{ monitor.main = 16 }, { monitor."some-pattern" = 32 }, 24]

In this example, 24 is a default value when there is no match.

Monitor pattern is the same as for 'workspace-to-monitor-force-assignment'.

See: https://nikitabobko.github.io/AeroSpace/guide#assign-workspaces-to-monitors

[gaps] inner.horizontal = 2 inner.vertical = 2 outer.left = 0 outer.bottom = 0 outer.top = 0 outer.right = 0

See https://nikitabobko.github.io/AeroSpace/guide#exec-env-vars

[exec] # Again, you don't need to copy all config sections to your config. inherit-env-vars = true # If you don't touch "exec" section, [exec.env-vars] # it will fallback to "default-config.toml" PATH = '/opt/homebrew/bin:/opt/homebrew/sbin:${PATH}'

'main' binding mode declaration

See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes

'main' binding mode must be always presented

[mode.main.binding]

All possible keys:

- Letters. a, b, c, ..., z

- Numbers. 0, 1, 2, ..., 9

- Keypad numbers. keypad0, keypad1, keypad2, ..., keypad9

- F-keys. f1, f2, ..., f20

- Special keys. minus, equal, period, comma, slash, backslash, quote, semicolon, backtick,

leftSquareBracket, rightSquareBracket, space, enter, esc, backspace, tab

- Keypad special. keypadClear, keypadDecimalMark, keypadDivide, keypadEnter, keypadEqual,

keypadMinus, keypadMultiply, keypadPlus

- Arrows. left, down, up, right

All possible modifiers: cmd, alt, ctrl, shift

All possible commands: https://nikitabobko.github.io/AeroSpace/commands

System Binds

alt-q = 'close --quit-if-last-window'

Application Binds

alt-t = 'exec-and-forget kitty' # Terminal alt-f = 'exec-and-forget open -n "/Applications/Google Chrome.app"' # Browser alt-r = 'exec-and-forget open .' # Finder alt-c = "exec-and-forget zed"

Layout Binds

See: https://nikitabobko.github.io/AeroSpace/commands#layout

alt-slash = 'layout tiles horizontal vertical'

alt-comma = 'layout accordion horizontal vertical'

alt-o = "layout floating tiling" alt-u = 'layout tiles horizontal vertical' alt-left = "move left" alt-right = "move right" alt-up = "move up" alt-down = "move left"

See: https://nikitabobko.github.io/AeroSpace/commands#focus

alt-j = "move left" alt-l = "move right" alt-i = "move up" alt-k = "move down"

See: https://nikitabobko.github.io/AeroSpace/commands#move

alt-shift-h = 'move left'

alt-shift-j = 'move down'

alt-shift-k = 'move up'

alt-shift-l = 'move right'

See: https://nikitabobko.github.io/AeroSpace/commands#resize

alt-shift-minus = 'resize smart -50'

alt-shift-equal = 'resize smart +50'

See: https://nikitabobko.github.io/AeroSpace/commands#workspace

alt-1 = 'workspace 1' alt-2 = 'workspace 2' alt-3 = 'workspace 3' alt-4 = 'workspace 4' alt-5 = 'workspace 5' alt-6 = 'workspace 6' alt-s = 'workspace s'

alt-a = 'workspace prev' alt-d = 'workspace next'

See: https://nikitabobko.github.io/AeroSpace/commands#move-node-to-workspace

cmd-alt-1 = 'move-node-to-workspace 1' cmd-alt-2 = 'move-node-to-workspace 2' cmd-alt-3 = 'move-node-to-workspace 3' cmd-alt-4 = 'move-node-to-workspace 4' cmd-alt-5 = 'move-node-to-workspace 5' cmd-alt-6 = 'move-node-to-workspace 6'

Move relative and follow window.

cmd-alt-a = ["move-node-to-workspace prev", 'workspace prev'] cmd-alt-d = ["move-node-to-workspace next", 'workspace next']

See: https:nikitabobko.github.o/AeroSpace/commands#mode

alt-shift-semicolon = 'mode service'

'service' binding mode declaration.

See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes

[mode.service.binding] esc = ['reload-config', 'mode main'] r = ['flatten-workspace-tree', 'mode main'] # reset layout

s = ['layout sticky tiling', 'mode main'] # sticky is not yet supported https://github.com/nikitabobko/AeroSpace/issues/2

f = [ 'layout floating tiling', 'mode main', ] # Toggle between floating and tiling layout backspace = ['close-all-windows-but-current', 'mode main']

alt-shift-h = ['join-with left', 'mode main'] alt-shift-j = ['join-with down', 'mode main'] alt-shift-k = ['join-with up', 'mode main'] alt-shift-l = ['join-with right', 'mode main']


## Checklist

<!-- Please fill in the checklist. You must have strong reasons not to do so -->

- [x] I've searched for duplicates. My search queries were (please don't forget to search in closed issues too):
  - close
  - kitty
  - decorators
  - decorations
- [x] I've read the documentation https://nikitabobko.github.io/AeroSpace/guide & https://nikitabobko.github.io/AeroSpace/commands
- [x] I've searched in the documentation. My search queries were:
  - close
  - decorators

aerospace CLI client version: 0.14.2-Beta 0cb8dbdfc5ee73b8cbc200f175f467ebead55201 AeroSpace.app server version: 0.14.2-Beta 0cb8dbdfc5ee73b8cbc200f175f467ebead55201

Chasewhip8 commented 2 months ago

The cause here seems to be the process in the space being terminated, so

alt-q = 'exec-and-forget aerospace close --quit-if-last-window'

or

alt-q = 'close --quit-if-last-window'

causes this to happen on most apps.

The difference in those two binds is, the first one does not update the current space on the screen until you try and move spaces again, the 2nd one automatically moves you to the next space with a window.

I think the intended behavior here should be close the app and keep the user on the blank space.