GitHub - Seeker04/plwm:一个用 Prolog 编写的 X11 窗口管理器

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 include xorg with related dev packages and SWI-Prolog.
  • Minimal environment: Add exec plwm to ~/.xinitrc and use startx 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 with hooks. 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 and fifo_path. Execute terms through the pipe.
  • 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.
阅读 12
0 条评论