Vim-like marks for AeroSpace WM
Beta: I use this daily, but it's still a work in progress. Please report any issues or ideas in the issues section.
demo.mp4
Allows you to add custom marks to windows and use them to set focus or summon to the current workspace.
It’s heavily inspired by sway marks, but follows the aerospace
style of commands
mark --add|--replace [--toggle] <identifier>
Marks are arbitrary labels that can be used to identify certain
windows and then jump to them at a later time. Each identifier
can only be set on a single window at a time since they act as
a unique identifier. By default, mark sets identifier as the only
mark on a window. --add will instead add identifier to the list
of current marks for that window. If --toggle is specified mark will
remove identifier if it is already marked.
TL;DR: Dynamic mappings to specific windows, not workspaces.
I wanted something more granular than workspaces — I want to jump to a specific window, given a context. Sometimes my "video" context means YouTube, sometimes it’s a video player, sometimes a browser. I want to be able to jump to the right window, regardless of which workspace it's on.
Also, by pairing with aerospace-scratchpad allows me to send away windows, mark then with a key for later bring then back!
Allow one to mark the current focused window with the given identifier.
aerospace-marks mark [--add|--replace] [--toggle] <identifier>
And then focus to a window with the given mark.
aerospace-marks focus <identifier>
Or summon a marked window to the current workspace.
aerospace-marks summon <identifier>
See more in documentation
Check vim-like marks for a more advanced usage.
# ~/.config/aerospace/config.toml
[mode.main.binding]
# Vim's like marks, similar to i3-input
# cmd + ctrl + m and <letter> -- mark a window with a given <letter>
cmd-ctrl-m = """
exec-and-forget aerospace-marks mark \
$(osascript -e 'text returned of (display dialog "mark" default answer "")')
"""
# cmd + ctrl + ' and <letter> -- set focus on the window marked with <letter>
cmd-ctrl-quote = """
exec-and-forget aerospace-marks focus \
$(osascript -e 'text returned of (display dialog "focus" default answer "")')
"""
# Mark current window with a given identifier
cmd-shift-h = ["exec-and-forget aerospace-marks mark h"]
cmd-shift-j = ["exec-and-forget aerospace-marks mark j"]
cmd-shift-k = ["exec-and-forget aerospace-marks mark k"]
cmd-shift-l = ["exec-and-forget aerospace-marks mark l"]
cmd-shift-b = ["exec-and-forget aerospace-marks mark browser", "mode main"]
# Focus to a window with the given identifier
cmd-ctrl-h = ["exec-and-forget aerospace-marks focus h"]
cmd-ctrl-j = ["exec-and-forget aerospace-marks focus j"]
cmd-ctrl-k = ["exec-and-forget aerospace-marks focus k"]
cmd-ctrl-l = ["exec-and-forget aerospace-marks focus l"]
cmd-ctrl-b = ["exec-and-forget aerospace-marks focus browser", "mode main"]
If you have Homebrew installed, you can install aerospace-marks
using the following command:
brew install cristianoliveira/tap/aerospace-marks
If you have Nix installed, you can build and install aerospace-marks
using the following command:
nix profile install github:cristianoliveira/aerospace-marks
You can also run without installing it by using:
nix run github:cristianoliveira/aerospace-marks
This will build the default package defined in flake.nix
.
If you have Go installed, you can install aerospace-marks
directly using:
go install github.com/cristianoliveira/aerospace-marks@latest
This will download and install the latest version of aerospace-marks
to your $GOPATH/bin
.
After installing, you may need to include aerospace-marks in aerospace context.
Check where the binary is installed, run:
echo $(which aerospace-marks) | sed 's/\/aerospace-marks//g'
And in your config add:
[exec]
inherit-env-vars = true
# OR
[exec.env-vars]
# Replace 'aerospace-marks/install/path' with the actual path from the above command
PATH = 'aerospace-marks/install/path/bin:${PATH}'
To build from source, ensure you have Go installed. Then, clone the repository and run:
git clone https://github.com/cristianoliveira/aerospace-marks.git
cd aerospace-marks
go build -o aerospace-marks
This will create an executable named aerospace-marks
in the current directory.
If you encounter issues while using aerospace-marks
, you can use the following environment variables to help diagnose the problem:
-
AEROSPACE_MARKS_DB_PATH
: This variable sets the path for the AeroSpace marks database. By default, it is set to$HOME/.local/state/aerospace-marks
. (You can connect with sqlite client) -
AEROSPACE_MARKS_LOGS_PATH
: This variable specifies the path for the AeroSpace marks logs. The default path is/tmp/aerospace-marks.log
. (usetail -f <path>
) -
AEROSPACE_MARKS_LOGS_LEVEL
: This variable determines the logging level for AeroSpace marks. The default level isDISABLED
.
These environment variables can be set directly in the AeroSpace configuration file to ensure they are available whenever AeroSpace is running. Add the following to your AeroSpace config
[exec.env-vars]
# Path for the AeroSpace marks database
AEROSPACE_MARKS_DB_PATH = "$HOME/.local/state/aerospace-marks"
# Path for the AeroSpace marks logs
AEROSPACE_MARKS_LOGS_PATH = "/tmp/aerospace-marks.log"
# Logging level for AeroSpace marks
AEROSPACE_MARKS_LOGS_LEVEL = "DEBUG"
Replace the paths and values with your desired settings.
- AeroSpace Socket IPC - aerospace-ipc
This project is licensed under the terms of the LICENSE file.