Giter Club home page Giter Club logo

ibswm's Introduction

Improved Binary Space Window Manager

main workflow

WARNING: This application is under development and not stable yet.

ibswm is a tiling window manager that represents windows as the leaves of full binary tree. It only manages events sent from X server and messages it received from the socket communication. ibsc is a program that writes messages into the ibswm's socket. This window manager doesn't handle any keyboard or mouse events. You need a third party program (like sxhkd) to communicate informations between your action and the window manager, through ibsc commands.

This project is strongly inspired by bspwm and tries to improve it. It is also entirely written in Rust to enable memory-safety and be able to work with higher performance.

Installation

TODO

Configuration

You can easily configure ibswm behavior using bash file stored into $HOME/.config/ibswm/ibswmrc file. This file is executed directly right after the window manager is booted. It can handle any bash command to start when the window manager is executed. Also, this file is a perfect place to configure the window manager through ibsc command like :

ibsc config window_gap 18
ibsc config focus_follows_pointer true

ibsc monitor

Configure a monitor. To configure a monitor, you must known the monitor ID, given by xrandr --query. You can have an unlimited number of desktops by monitor. By default, if you did not configure a monitor, the window manager will try to detect informations for you. Also, you can give a name to a monitor in order to apply some configuration just for this monitor.

ibsc monitor MONITOR_ID --name NAME --desktops DESKTOP_0 DESKTOP_1 DESKTOP_N

ibsc config

Configure a monitor. Every command listed here can use the --monitor argument to only configure a monitor and not every of them.

Key Value Description
window_gap int Gap between window on the same desktop.
focus_follows_pointer bool Focus when hovering window.

ibsc rule

Configure a rule for a particular application. This command is useful when you want an application to always map a specific monitor, or to be started as float by default.

bspc rule --application git-cola --state STATE --desktop DESKTOP_0

To know which name an application have, you can start your application and execute this command :

xwininfo -root -children

How it works

ibswm works using a binary tree.

TODO: Implement this part of documentation.

Supported protocols and standards

ibswm tries to follow as much as possible the following protocols :

Development

To improve this application, you need to install some dependencies into order to test your modification. You'll need the following packages installed into your distribution :

  • xserver-xephyr
sudo apt install xserver-xephyr

Now, you can clone the repository and start working on it.

# Start a background process to see your modification.
Xephyr -screen 640x480 +extension RANDR -ac +xinerama :1 &

# Start the window manager and map the display to Xephyr server.
DISPLAY=:1 cargo run -- -vv

# Start an application and map it to Xephyr display.
DISPLAY=:1 alacritty

ibswm's People

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.