Skip to main content

A simple but extensible window manager for macOS

Project description

NAME

macpywm - A simple but extensible window manager for macOS.

video

SYNOPSIS

macpywm command [args...]

DESCRIPTION

This manual page documents macpywm, a simple but extensible macOS window manager written in Python. macpywm is a Python version of xpywm (https://github.com/h-ohsaki/xpywm), an X11 window manager written in Python.

macpywm is built on top of the Yabai (https://github.com/koekeishiya/yabai), tiling window management for the Mac. Specifially, all window management on macOSes are handled with Yabai. macpywm only provides xpywm-compatible functions such as the programmed window layout, the tiled window layout, and several xpywm-compatible functions.

macpywm supports two types of window placement algorithms: programmed mode and tiled mode.

In the programmed mode, you can specify rules for inferring appropriate window geometries. By default, Emacs is placed at the top-left corner of the screen with 50% window width and 100% window height. Web browsers (e.g., Safari) and office applications are placed next to the Emacs with 50% window width and 100% window height. The terminal window is placed at the bottom-right corner with 50% window width and 70% window height. If there exist more than two terminal windows, the size of each terminal window is shrunk to 1/4 of the screen, and placed in a non-overlapping way.

In the titled mode, all windows are placed in a titled fashion so that any window will have the same window width and height, and that any window will not overlap with others, as like tile-based window managers. Moreover, macpywm tries to allocate larger area for Emacs; i.e., if there are three windows, say, Emacs and two terminals, Emacs will occupy the half of the screen, and each terminal will have the quarter of the screen.

OPTIONS

None

SCREENSHOTS

screenshot

screenshot

INSTALLATION

  1. Save two configuration files (.yabairc and .skhdrc) in your home directory.
  1. Install yabai (https://github.com/koekeishiya/yabai) and skhd (https://github.com/koekeishiya/skhd).
$ brew install koekeishiya/formulae/yabai
$ brew services start yabai
$ brew install koekeishiya/formulae/skhd
$ brew services start skhd

See yabai wiki (https://github.com/koekeishiya/yabai/wiki) for the installation details.

Note that yabai and skhd configuration files (.yabairc and .skhdrc) must not be overwritten.

  1. Install macpywm from PyPI (https://pypi.org/project/macpywm/)
$ pip3 install macpywm

CUSTOMIZATION

Since Python is one of interpreters, you can easily customize the behavior of macpywm by directly modifying its variables, functions, and methods. For instance, if you want to customize the rules for the programmed window placement, simply edit the definition of the variable LAYOUT_RULES.

BINDINGS

  • Ctrl + Mod1 + i

    Focus the next window. Available windows are circulated in the order of top-left, bottom-left, top-right, and bottom-right.

  • Ctrl + Mod1 + '

    Toggle the maximization of the current active window.

  • Ctrl + Mod1 + ;

    Toggle the vertical maximization of the current active window.

  • Ctrl + Mod1 + ,

    Layout all available windows in the programmed mode.

  • Ctrl + Mod1 + .

    Layout all available windows in the tiled mode.

  • Ctrl + Mod1 + z

    Destroy the current active window.

  • Ctrl + Mod1 + y

    Hide the current active window.

  • Ctrl + Mod1 + 1

    Run a command "open -n -a /System/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal".

  • Ctrl + Mod1 + 2

    Run a command "open -a emacs --args -rv"

  • Ctrl + Mod1 + 3

    Run a command "open -a /Applications/Safari.app/Contents/MacOS/Safari"

AVAILABILITY

The latest version of macpywm is available at PyPI (https://pypi.org/project/macpywm/) .

AUTHOR

Hiroyuki Ohsaki <code[atmark]lsnl.jp>

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

macpywm-1.4.tar.gz (19.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

macpywm-1.4-py3-none-any.whl (19.9 kB view details)

Uploaded Python 3

File details

Details for the file macpywm-1.4.tar.gz.

File metadata

  • Download URL: macpywm-1.4.tar.gz
  • Upload date:
  • Size: 19.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for macpywm-1.4.tar.gz
Algorithm Hash digest
SHA256 9ce27d5deb2a69d6e99fcf9aa1e98c91a1228caf4aa6834061bd7776932b65d8
MD5 680eec7c3c09a287b90e6704f4077ab3
BLAKE2b-256 6019a59b69b310130efab36f1a94e0d2baa957970f7ed19337abcb5d4ca072de

See more details on using hashes here.

File details

Details for the file macpywm-1.4-py3-none-any.whl.

File metadata

  • Download URL: macpywm-1.4-py3-none-any.whl
  • Upload date:
  • Size: 19.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for macpywm-1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 2ddc49f4a94d35355d170d9406eb4416f3ad3985b114b927a24c7bf66776453a
MD5 9a32a2e0b3c0ee316133f7bdab0fd5a4
BLAKE2b-256 74ec1c3f281ee4b6251cf120706a04790aa1e326e874ec389b9a22975acbbcff

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page