{"id":13439805,"url":"https://github.com/HarveyHunt/howm","last_synced_at":"2025-03-20T09:30:43.614Z","repository":{"id":15497242,"uuid":"18231135","full_name":"HarveyHunt/howm","owner":"HarveyHunt","description":"A lightweight, X11 tiling window manager that behaves like vim","archived":false,"fork":false,"pushed_at":"2022-07-19T05:45:25.000Z","size":2439,"stargazers_count":651,"open_issues_count":17,"forks_count":24,"subscribers_count":31,"default_branch":"master","last_synced_at":"2024-08-01T03:29:58.797Z","etag":null,"topics":["c","linux","management","tiling","vim","window","x11","xcb"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"spookylukey/django-paypal","license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HarveyHunt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-03-29T00:59:50.000Z","updated_at":"2024-07-25T13:40:31.000Z","dependencies_parsed_at":"2022-08-07T08:01:08.709Z","dependency_job_id":null,"html_url":"https://github.com/HarveyHunt/howm","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HarveyHunt%2Fhowm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HarveyHunt%2Fhowm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HarveyHunt%2Fhowm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HarveyHunt%2Fhowm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HarveyHunt","download_url":"https://codeload.github.com/HarveyHunt/howm/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221745184,"owners_count":16873733,"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":["c","linux","management","tiling","vim","window","x11","xcb"],"created_at":"2024-07-31T03:01:17.234Z","updated_at":"2024-10-27T23:30:14.909Z","avatar_url":"https://github.com/HarveyHunt.png","language":"C","readme":"# howm (Beta)\n\n[![Build Status](https://travis-ci.org/HarveyHunt/howm.svg?branch=develop)](https://travis-ci.org/HarveyHunt/howm)\n[![Flattr this git repo](http://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=harveyhunt\u0026url=https://github.com/HarveyHunt/howm\u0026title=howm\u0026language=\u0026tags=github\u0026category=software)\n\n### A lightweight, tiling X11 window manager that mimics vi by offering operators, motions and modes.\n\n![](http://i.imgur.com/4sW6RlT.gif)\n![](http://i.imgur.com/tyiZcLx.gif)\n\nHowm is on the [AUR](https://aur.archlinux.org/), there are two packages for it:\n* [howm-x11-git](https://aur.archlinux.org/packages/howm-x11-git/) is the bleeding edge package.\n* [howm-x11](https://aur.archlinux.org/packages/howm-x11/) is the package based off of stable releases.\n\nCome and join us on Freenode in the channel #howm\n\nContents\n=====\n* [Contributing](CONTRIBUTING.md)\n* [Requirements](#requirements)\n* [Installation](#installation)\n* [Commandline Arguments](#commandline-arguments)\n* [Configuration](#configuration)\n* [Changing Socket Path](#changing-socket-path)\n* [Keybinds](#keybinds)\n* [Scratchpad](#scratchpad)\n* [Motions](#motions)\n* [Counts](#counts)\n* [Operators](#operators)\n* [Modes](#modes)\n* [Code Documentation](#code-documentation)\n* [Parsing Output](#parsing-output)\n\n## Requirements\n\n* [Cottage](https://www.github.com/HarveyHunt/cottage) is required for configuration and interacting with howm.\n* [sxhkd](https://www.github.com/baskerville/sxhkd) is required for binding cottage commands to keypress.\n\n## Installation\nHowm is on the [AUR](https://aur.archlinux.org/), there are two packages for it:\n* [howm-git](https://aur.archlinux.org/packages/howm-x11-git/) is the bleeding edge package.\n* [howm-x11](https://aur.archlinux.org/packages/howm-x11/) is the package based off of stable releases.\n\nIf you can't use the AUR, then there may be a package available for your distro.\n\nAs a last resort install xcb's libraries and then, do the following:\n\n```bash\ngit clone https://github.com/HarveyHunt/howm\ncd howm\nmake\nsudo make install\n```\n\nAfter howm is installed, you'll want to copy over some configuration files.\n\n```bash\ncp examples/sxhkdrc_* ~/.config/sxhkd\ncp examples/howmrc ~/.config/howmrc\n```\n\nThen take a look at the example [xinitrc](examples/xinitrc) for ideas on how to start howm.\n\nBe sure to install [cottage](https://github.com/HarveyHunt/cottage) and [sxhkd](https://github.com/baskerville/sxhkd).\n\n## Commandline Arguments\n\n* **-c**: The path that points to an executable howmrc file.\n```\nhowm -c ~/.config/howm/howmrc\n```\n\n## Configuration\n\nConfiguration is done through the use of cottage. Any element [in this structure](http://harveyhunt.github.io/howm/structconfig.html) can be changed using cottage. The syntax is as follows:\n\n```\ncottage -c config_var value\n```\n\nFor example:\n\n```\ncottage -c bar_height 20\n```\n\nTo override howm's default values at startup, cottage commands can be placed in a shell script and then executed by howm. Take a look at the [example howmrc](examples/howmrc) for ideas.\n\nNote: When configuring colours in ```howmrc```, enclose the colour in quotes, such as:\n\n```\ncottage -c border_focus \"#343434\"\n```\n\n## Changing Socket Path\nBy default, howm will attempt to create a socket at ```/tmp/howm```, this can be overwritten by setting the environment variable ```HOWM_SOCK```. For example:\n\n```bash\nexport HOWM_SOCK=/tmp/howm_test\n```\n\n## Keybinds\n\nKeybinds are now placed in multiple [sxhkd](https://github.com/baskerville/sxhkd) files.\n\nA keypress is bound to a call to cottage in the following form:\n\n```\ncottage -f func_name \u003cargs\u003e\n```\n\nAll of the available functions can be found [here](http://harveyhunt.github.io/howm/group__commands.html).\nTake a look at the [example sxhkdrcs](examples).\n\n## Scratchpad\n\nThe scratchpad is a location to store a single client out of view. When requesting a client back from the scratchpad, it will float in the center of the screen. This is useful for keeping a terminal handy or hiding your music player- only displaying it when it is really needed.\n\nThe size of the scratchpad's client is defined by SCRATCHPAD_WIDTH and SCRATCHPAD_HEIGHT.\n\n## Motions\n\nFor a good primer on motions, vim's [documentation](http://vimdoc.sourceforge.net/htmldoc/motion.html) explains them well.\n\n**Please note: The modifier key that is OTHER_MOD needs to be held down whilst entering a motion.**\n\nOperators and motions are combined so that an operation can be performed on multiple things, such as clients or workspaces. The current supported motions are as follows:\n\n* **Workspace**: Perform an operation on one or more workspaces.\n\n* **Client**: Perform an operation on one or more clients.\n\n## Counts\n\nCounts be applied to a motion, to make an operator affect multiple things. For example, you can add a 3 before a motion, meaning that the operator will affect 3 of the motions. The modifier that is used is defined by COUNT_MOD.\n\nFor example:\n\n```\nq2w\n```\n\nWill kill 2 workspaces (assuming the correct modifier keys are pressed and default keybindings are being used).\n\n## Operators\n\nOperators perform an action upon one or more targets (identified by motions).\n\nImplementation details for all operators can be found [here](http://harveyhunt.github.io/howm/group__operators.html).\n\nBelow are descriptions of each operator, the motions that they can perform an action upon and the mode that they work in (Note, all examples assume that the correct modifier keys have been pressed and use the default keymappings.):\n\n* **op_kill**: An operator that kills an arbitrary number of targets.\nCan be used on:\n  * Clients\n  * Workspaces\n\n  Used in mode:\n    * Normal\n\n```\nq4c\n```\nThe above command will kill 4 clients, closing the applications and removing them from the workspace.\n\n```\nqw\n```\nThe above command will kill one workspace. This means that all clients on the current workspace will be killed.\n\n* **op_move_down**: An operator that moves a group of targets down one.\nCan be used on:\n  * Clients\n\n  Used in mode:\n    * Normal\n\n```\nj2c\n```\nThe above command moves 2 clients down one place in the workspace's client list. If a client is moved past the last place, then it is wrapped around and placed at the start of the workspace's client list.\n\n* **op_move_up**: This is the opposite of op_move_down, and instead is bound to k.\n\n* **op_shrink_gaps**: An operator to shrink the size of the gaps around windows. The size is changed by the amount defined for OP\\_GAP\\_SIZE.\nCan be used on:\n  * Clients\n  * Workspaces\n\n  Used in mode:\n    * Normal\n\n```\ng1w\n```\n\nThe above command will shrink the gaps of all windows on the current workspace by OP\\_GAP\\_SIZE.\n\n```\ng4c\n```\n\nThe above command will shrink the gaps of 4 clients on the current workspace by OP\\_GAP\\_SIZE.\n\n* **op_grow_gaps**: This is the opposite of op\\_shrink\\_gaps and is bound to Shift + g.\n\n* **op_focus_up**: Move the current focus up.\nCan be used on:\n  * Clients\n  * Workspaces\n\n  Used in mode:\n    * Focus\n\n```\nj3c\n```\n\nThe above command will move the current focus down 3 clients.\n\n* **op_focus_down**: Performs the opposite of op\\_focus\\_up and is instead bound to j.\n\n* **op_cut**: Cut a group of clients or workspaces and store them on the delete register stack.\nCan be used on:\n  * Clients\n  * Workspaces\n  \n  Used in mode:\n    * Normal\n\n```\nd2c\n```\n\nThe above command will cut 2 clients and place them onto the delete register stack. One use of the cut operation takes up one place on the stack.\n\n\n## Modes\n\nA good primer on modes is available [here](http://vimdoc.sourceforge.net/htmldoc/intro.html#vim-modes-intro).\n\n**Note**: Modes used to be implemented in howm itself, but are now in the sxhkd\nconfiguration file.\n\nIn howm, modes are used to allow the same keys to be bound to multiple functions. Modes also help to logically separate what needs to be done to a window. The available modes are as follows:\n\n* **Normal**: This mode is the one that you will spend most of your time in. It is used for executing commands and most of the operators are designed to work in this mode. This mode behaves similarly to how other WMs behave, but without focusing or dealing with floating windows.\n\n* **Focus**: This mode is designed to be used to change the focus and locations of windows or workspaces.\n\n* **Floating**: This mode is designed to deal with all things floating. Moving, resizing and teleporting floating windows are all available in this mode.\n\n## Code Documentation\n\nhowm uses [doxygen](http://www.stack.nl/~dimitri/doxygen/) throughout the entire codebase. The generated documentation is [available here](https://harveyhunt.github.io/howm/).\n\n## Parsing Output\n\nWhen debug mode is disabled, howm outputs information about its current state and the current workspace whenever something changes (such as adding a new window). When debug mode is enabled, information is outputted for each workspace (placed on a new line).\n\nThe format for the output is as follows:\n\n```\nLayout:Workspace:State:NumberofClients:MonitorIndex\n```\n\nAn example output can be seen below:\n\n```\n2:1:0:1:0\n```\n\nThe information outputted at the same time as the example above, but with debugging mode turned on is shown below:\n\n```\n2:1:0:1:0\n2:2:0:0:0\n2:3:0:0:0\n2:4:0:0:0\n2:5:0:0:0\n```\n","funding_links":[],"categories":["C","Window Managers","Packages"],"sub_categories":["window-managers"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FHarveyHunt%2Fhowm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FHarveyHunt%2Fhowm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FHarveyHunt%2Fhowm/lists"}