plwm - An X11 window manager written in Prolog
- About: Highly customizable X11 dynamic tiling WM in Prolog. Goals include high code/doc quality, easy customization, covering tiling WM needs, and being small and hackable. Powered by SWI-Prolog.
- Feature highlights: Easy to hack and configure. Dynamic tiling with various layouts. Floating windows supported. External bars supported. EWMH compliance (partially work-in-progress). Fast and light. Dynamic workspace operations. Multi-monitor support. Other features like inner/outer gaps, menus, hooks, animations, and scriptability.
Installation:
- From release: Download latest version from releases, extract and run
./install.sh
. - From source: Run
make && sudo make install
. Dependencies includexorg
with related dev packages and SWI-Prolog.
- From release: Download latest version from releases, extract and run
- Minimal environment: Add
exec plwm
to~/.xinitrc
and usestartx
in tty. Or put relevant lines in~/.bash_profile
for automatic start after logging in. - Using a display manager: Refer to display manager documentation. Create
/usr/share/xsessions/plwm.desktop
file with appropriate content. Usage:
- Basics: Command-line options in
plwm -h
and manual. Windows are managed by default. Different layouts have specific behaviors. - Default keybindings: Various keybindings for window management operations like focus, move, resize, layout changes, workspace switching, etc. Tips provided for using them effectively.
- Configuration:
sudo make install
installs default config to/etc/plwm/config.pl
. Custom config can be in user directories. Settings include various aspects like nmaster, mfact, layout, bars, etc. Tips for configuration and changing settings during runtime. - External bars: Specify
bar_classes
based on WM_CLASS. Bars can be started/managed manually or automatically withhooks
. Different bar placement options. Toggle bars with hacks. - Multi-monitor: Workspaces are cloned for each monitor.
switch_monitor
and related predicates handle monitor switching. Windows can be dragged between monitors. - Layout overrides: Override default nmaster, mfact, and layout settings for specific monitors and workspaces.
- Rules: Apply custom rules to newly spawned windows based on name, class, title. Match monitor and workspace.
- Menus: Default keybindings for various menu operations like window placement, workspace operations, etc. Need
menucmd
set to a menu program. - Hooks: Run custom logic on events like start, quit, workspace/monitor switch, etc.
- Scriptability: Create a named pipe with
fifo_enabled
andfifo_path
. Execute terms through the pipe.
- Basics: Command-line options in
- Screenshots: Show different appearances and layouts of plwm.
- Project status: Still in experimental state. Expect breaking changes before v1.0.0. Known issues in [Issues with bug labels].
- Contribution: Report bugs by creating GitHub issues. Open discussions for feature requests or questions. Welcome code contributions. Read the Development Guide.
FAQ:
- Workspaces vs tags: Went with simpler workspace approach.
- Performance: Feels as snappy as dwm on old laptop.
- SWI-Prolog: Popular free Prolog implementation with good features.
- Wayland: A possibility for a future port.
- Java application issue: Add
export _JAVA_AWT_WM_NONREPARENTING=1
to.xinitrc
. - Configuration issues: Use
plwm --check
and consult the configuration table. - Missing features: plwm is a WM, not a full DE. Other tools available for various needs.
- Similar projects: tinywm (first version), dwm (inspiration), other tiling WMs like xmonad, i3, bspwm, awesomewm.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。