Skip to content

Repository files navigation

This doc is for WinPin version 0.0.5 (stable version)

About

WinPin is a native macOS AppKit menu bar app for best-effort per-window pinning.

Useful when;

  • You join a video meeting while keeping the window on top of other screens. (e.g. Zoom.app supports this feature, but only when minimized).
  • You are annoyed by the default MacOS switcher, which brings all windows in front. This behavior hides the previous window you were working but you have been interested in yet.
    • You want to focus solely on the active windows you're using across multiple apps.

Caution

This app esteems your last window activation such as cmd+tab and click as of version 0.0.5, (It looks those actions are the trigger to try to bring Pinned windows to foremost) so you might feel it's useless if you use only one built-in small screen.

Note

This app is built using Codex without no prior knowledge of Xcode and Swift. The current behavior is not what I have originally intended (What intended is AGGRESSIVE PINNING, a.k.a. pinning is more prioritized than cmd+tab or click), but the current behavior was unexpectedly useful, so I kept as is. Codex said that 'AGGRESSIVE PINNING' is hard, but 'AGGRESSIVE PINNING' mode is also welcome if you can create a PR for it.

Installation

Homebrew (Recommended)

brew tap aki-s/tap
brew trust aki-s/tap
brew install --cask win-pin

Features

Shortcut

ctrl+alt+Command+t to Pin the currently focused window.

Menu bar

menu

You can define which window should be stacked on the other Pinned windows manually.

win-stacks

Development

Daily Development & Debugging

# Build debug binary and reset accessibility permission
./scripts/build-debug-reset-accessibility.sh

# Restart app
make restart
# or ./scripts/restart.sh

Test & Lint

# Run unit tests
make test

# Run static analysis and lint
make lint

# Automatically format and fix lint issues
make fix

Release Workflow (way1 / from GitHubAction)

  1. Issue tag
  2. Run action release.yml

Release Workflow (way2 / from localhost)

1. Install CLIs

brew install goreleaser act gh

1. Register PAT for ${owner}/homebrew-tap

Register PAT secret named HOMEBREW_TAP_GITHUB_TOKEN to access ${owner}/homebrew-tap at the artifact repository

https://github.com/${owner}/WinPin/settings/secrets/actions

2. Tag version, then release

APP_VERSION=1.0.0 # assume version is 1.0.0
export HOMEBREW_TAP_GITHUB_TOKEN="github_pat_...."
git tag ${APP_VERSION}; git push -u origin ${APP_VERSION};  TAG=${APP_VERSION}  ./scripts/localhost-act-release.sh

3. Check PR created to ${owner}/homebrew-tap

https://github.com/${owner}/homebrew-tap/pull/

About

Pin any window on top of the other apps as far as possible

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages