{"id":13792159,"url":"https://github.com/Metaxal/rwind","last_synced_at":"2025-05-12T14:31:41.885Z","repository":{"id":5411123,"uuid":"6601750","full_name":"Metaxal/rwind","owner":"Metaxal","description":"Window manager in the Racket programming language","archived":false,"fork":false,"pushed_at":"2024-09-14T08:42:22.000Z","size":381,"stargazers_count":87,"open_issues_count":5,"forks_count":5,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-05-06T19:16:09.633Z","etag":null,"topics":["racket","racket-ffi","racket-gui"],"latest_commit_sha":null,"homepage":null,"language":"Racket","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Metaxal.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2012-11-08T19:21:10.000Z","updated_at":"2024-11-09T07:54:07.000Z","dependencies_parsed_at":"2024-11-18T09:30:51.428Z","dependency_job_id":null,"html_url":"https://github.com/Metaxal/rwind","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Metaxal%2Frwind","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Metaxal%2Frwind/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Metaxal%2Frwind/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Metaxal%2Frwind/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Metaxal","download_url":"https://codeload.github.com/Metaxal/rwind/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253754967,"owners_count":21958934,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["racket","racket-ffi","racket-gui"],"created_at":"2024-08-03T22:01:08.852Z","updated_at":"2025-05-12T14:31:41.603Z","avatar_url":"https://github.com/Metaxal.png","language":"Racket","readme":"# RWind - The Racket Window Manager\n\nAn extensible window manager written in the [Racket programming language](http://www.racket-lang.org), meant to be highly customizable.\n\nThere is an [RWind mailing list](https://groups.google.com/forum/?fromgroups#!forum/rwind).\n\n\nFirst some **warnings**:\n\n* Backward compatibility will not be ensured in the 0.x branch.\n* Due to a security issue in the server, the current version should not be used on multiple\n  user computers, unless the server is disabled. Use at your own risk.\n\n\n## Current features\n\n* Stacking _and_ [tiling](http://en.wikipedia.org/wiki/Tiling_window_manager) support\n* Client command line (repl)\n* Customization of key bindings and mouse bindings\n* Workspaces with two modes:\n    - single mode: one workspace over all monitors\n    - multi mode: one workspace per monitor\n* Xinerama and RandR support\n* Fullscreen\n* Currently little ICCCM/EWMH compliance\n\nAll these features are in development stage.\n\n## Installation \u0026 quick start\n\n### 1) Install Racket\n\nDownload and install Racket at https://download.racket-lang.org\n\n**Note**: Racket BC is currently recommended, as some FFI segfaults may occur with Racket CS.\n\nYou may need to \n[set your PATH environment variable](https://github.com/racket/racket/wiki/Set-your-PATH-environment-variable).\n\n### 2) Install RWind\nType:\n```shell\nraco pkg install --auto --update-deps rwind\n```\n(`raco` is provided with Racket, so it should be in your path)\n\nThis will also install missing Racket dependencies such as the `x11` Racket package.\n\nYou may also need to install `libedit` (installed by default on Ubuntu at least, but not on \nGentoo). See [here](https://github.com/Metaxal/rwind/issues/16#issue-273254092) if installation \nfails due to this missing dependency.\n\n### 3) Configure RWind\n**As a normal user** (not a super-user), type:\n```shell\nracket -l rwind/configure\n```\nAnd follow the instructions.\nThis creates a default RWind configuration file, then it asks you to choose\nbetween a session manager or a `xinit/startx` configuration.\nIf you choose a session manager configuration, it will abort and you will need to re-type the \nabove command preceded by `sudo`.\nThese two steps are required because the first configuration files must be owned by the user.\n\nYou can reconfigure RWind at any time.\n\n### 4) Start RWind\n\na) If you chose a session configuration, go back to the login screen.\nYou should now see RWind in the login options.\n\nb) If you chose a xinit/startx configuration, in a virtual terminal \n(`Ctrl-Alt-F1` or `Ctrl-Alt-F2`, etc.), type the following:\n```shell\nxinit .xinitrc-rwind -- :1 \u0026\n```\n\nYou may need to modify the display `:1` to `:2` for example if `:1` is not available. The default \n`.xinitrc-rwind` is a simple example file that you may want to edit to fit your needs. By \ndefault, you need to close the xterms to exit the session.\n\n\u003c!--\n### c) Replace your current window manager\n\nIt is also possible to load a normal session with your usual window manager,\nthen kill it and replace it with RWind.\nFor example, supposing you are using Metacity:\n```shell\nkillall metacity \u0026\u0026 racket -l rwind\n```\n\nStrange results are likely to show up though.\n--\u003e\n\n## Default configuration and customization\n\nUpon configuration, the file `config.rkt` was created.\nThis is where all the RWind customization is done.\nBy default, you can open this file within RWind by pressing `Alt-F11`\n(this can also be changed in the configuration file).\nTake a look at this file to know what keybindings are defined.\nYou can also of course add your own keybindings.\n\n\u003c!--\nThis file defines a number of keyboard and mouse bindings that you can easily redefine:\n - Alt-left-button to move a window around\n - Alt-right-button to resize the window\n - Alt-(Shift-)Tab to navigate between windows\n - Ctrl-Alt-t to open xterm\n - Alt-F4 to close a window\n - Alt-F12 opens the client (see below)\n - Super-F{1-4} switches between workspaces\n - Shift-Super-F{1-4} moves the current window to another workspace\n - Alt-Super-F5 switches to `single` workspace mode\n - Alt-Super-F6 switches to `multi` workspace mode\n - Super-Page{Up,Down} moves the window up/down in tiling mode\n - ...\n--\u003e\n\nThe default window policy is stacking (as for most traditional window managers), but you can \neasily change it to [tiling](http://en.wikipedia.org/wiki/Tiling_window_manager) in the \nconfiguration file. With the tiling policy, several layouts are possible (mainly `uniform` and \n`dwindle`). To choose a layout, specify so in the file: \n\n```racket\n(current-policy (new policy-tiling% [layout 'dwindle]))\n```\n\nIf you edit the configuration file, you will need to restart RWind to take the changes into account,\nprobably by pressing the keybinding as defined in this very file.\nYou don't need to recompile RWind, just restart it.\n\n## The client\n\nThe client is a console where you can evaluate Racket expressions and communicate with the window \nmanager. It can be opened in a terminal with:\n\n```shell\nracket -l rwind/client\n```\n\nFor example, place the mouse pointer on a window and type in the console:\n```racket\n\u003e (window-name (pointer-window))\n```\nOr:\n```racket\n\u003e (move-window (pointer-window) 10 40)\n```\n\nThe list of available symbols provided by RWind is given by:\n```racket\n\u003e (known-identifiers)\n```\n\nAll bindings of `#lang racket` are available too.\n\nYou can get help on a known identifier with:\n```racket\n\u003e (describe 'focus-window)\n```\n\nYou can search among the list of identifiers with:\n```racket\n\u003e (search-identifiers \"window\")\n```\n\nYou can get the list of existing layouts for the tiling policy:\n```racket\n\u003e (policy. get-layouts)\n```\nThe layout can be changed immediately:\n```racket\n\u003e (policy. set-layout 'dwindle)\n```\n\nEach workspace can have its own layout:\n```racket\n\u003e (policy. set-workspace-layout 'uniform)\n```\nTo reset the layout of a workspace to the default one:\n```racket\n\u003e (policy. reset-workspace-layout)\n```\n\n## Updating RWind\n\nRWind has some dependencies, in particular the [X11 FFI bindings](https://github.com/kazzmir/x11-racket),\nthat will probably need to be updated with RWind.\nTo do this automatically, specify the `--auto` option to `raco update`:\n```shell\nraco update --auto rwind\n```\n\n**Your RWind configurations file will not be modified by the update.**\nThis also means that any new feature that may appear in the new versions of these files\nwill not be added to your files.\nYou can reconfigure RWind, and you will be asked if you want to replace the existing `config.rkt` file.\n\n## Debugging\n\nBecause RWind heavily relies on the X11 collection, a large part of the debugging happens an the \ninterface between the two.\n\nCreate symbolic links to the scripts `user-files/.xinitrc-rwind-debug` and \n`user-files/rwind-debug` in your home directory, or copy these files.\n\nCompile rwind and x11 in debug mode with `$ user-files/compile-rwind debug`. Basically, it \nremoves all previous compilations of the two collections and compiles it with some flags.\n\nFinally, start RWind from a non-X terminal (say, Ctrl-Alt-F2):\n```\nxinit .xinitrc-rwind-debug -- :2 \u0026\n```\n\nThen all error messages are redirected to `~/rwind.log`.\nYou should see lines starting with \"RW:\", and lines starting with \"  X:\" (for the X11 lib).\nYou can also track the error messages from within RWind with `tail -f ~/rwind.log`.\n\n","funding_links":[],"categories":["Racket"],"sub_categories":["game"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMetaxal%2Frwind","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FMetaxal%2Frwind","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMetaxal%2Frwind/lists"}