nikitabobko / AeroSpace

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

How can keybindings be unset? #292

Closed theherk closed 3 months ago

theherk commented 3 months ago

There are many keybindings in the default configuration that conflict with other keybindings on my system. I'd like to unset them. I attempted alt-shift-z = '' for example, but that does not work. Is this possible?

theherk commented 3 months ago

I see now that [] is sufficient. The other workaround I found was just to use an entirely alternate mode and just stay in that mode.

theherk commented 3 months ago

Actually, this is insufficient. I really would like to be able to unset keys, or at least have them pass through to the system. I use colemak and type in norwegian. So to type "å" I use ⌥a, to type "ø" I use ⌥o, and to type "æ" I use ⌥'. That last one works, but the former two do not.

The work around is simple enough. I created an "empty" mode, such that when I'm typing prose I can switch to that, but this isn't very ergonomic to require that switch.

alt-x = 'mode empty'

[mode.empty.binding]
esc = 'mode main'

So I guess this is a feature request to unset keys entirely.

nikitabobko commented 3 months ago

Just drop the binding from config to unset it

theherk commented 3 months ago

Oh, this exposes my misunderstanding then. I thought the configuration was merged with the default configuration. And I thought my testing revealed that to be true, but apparently I wasn't thorough enough. Nice; thanks.

But before I close, just so it doesn't fall off your radar, can you confirm how the merge works, if dropping it from my configuration doesn't pick up the default configuration?

Also, this is a superb application. So, thank you.

nikitabobko commented 3 months ago

Only scalar values are merged (because you need to have a default value). "Bindings" is a table/dictionary/hashtable => it's not merged

There is one practical exception though. [exec.env-vars] is not scalar and if you don't touch it, it's merged into your config. But [exec.env-vars] is a convenience feature to automatically bring homebrew to exec-and-forget PATH. Unfortunately, I didn't come up with a consistent mental model on how to describe it, that's why it's not yet covered in the docs

theherk commented 3 months ago

Okay. This help a lot. Thank you so much.

nikitabobko commented 3 months ago

default-config.toml describes the configuration that is loaded unless you have your own config file. If you have your own config file, default-config.toml is ignored

The real fallback defaults are described in the code https://github.com/nikitabobko/AeroSpace/blob/main/Sources/AppBundle/config/Config.swift#L27

If you or somebody else comes up with a consistent and easy-to-explain way to describe the logic, contribution to the docs is welcome