mirror of
https://codeberg.org/dwl/dwl-patches.git
synced 2025-10-26 17:54:17 +00:00
Compare commits
5 Commits
6770813364
...
6bbc99d458
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6bbc99d458 | ||
|
|
e930381da3 | ||
|
|
5a4093475b | ||
|
|
2c4ea1e4aa | ||
|
|
da2f40c982 |
18
README.md
18
README.md
@ -48,6 +48,10 @@ If you target the unstable `main` branch, specify that in the `Download` link on
|
||||
8. Use the Codeberg web interface to send a pull request to [dwl-patches] (NOT to [dwl])
|
||||
9. WHEN YOUR PULL REQUEST IS APPROVED, your Codeberg account will also be granted commit access to [dwl-patches]. Once you have write access, you can make direct modifications/upates to your patches instead of pull requests.
|
||||
|
||||
Individuals who have made known that they no longer intend to maintain their patches will have commit access to the [dwl-pathces] repository removed.
|
||||
|
||||
A returning user who formerly had commit access is welcome to open an issue on [dwl-patches] requesting commit access be reinstated. When doing so, please link to the original issue opened that granted commit access.
|
||||
|
||||
## Updating/Modifying/Adopting Existing Patches
|
||||
- If the existing patch is already being maintained by another author, do not make modifications to it.
|
||||
- Create an issue at [issues] @mentioning the current maintainer.
|
||||
@ -61,21 +65,23 @@ If you target the unstable `main` branch, specify that in the `Download` link on
|
||||
- Please do not open issues or contact maintainers to request deprecation of a patch.
|
||||
- Deprecation of a patch will only occur if *all* authors or current maintainers of the patch agree to the decision to deprecate.
|
||||
- In such a circumstance the author(s)/maintainer(s):
|
||||
- Will create a commit moving the patch to the `_STALE_PATCHES` directory
|
||||
- Will create a commit moving the patch to the `stale-patches` directory
|
||||
- May explain in the associated `README.md` any relevant details of the decision to deprecate the patch.
|
||||
- This process allows current or future users of the patch the option to adopt, modify, or integrate stale/historical code or portions thereof.
|
||||
|
||||
## _STALE_PATCHES
|
||||
Deprecated or unmaintained patches are held in the _STALE_PATCHES directory.
|
||||
## stale-patches
|
||||
Deprecated or unmaintained patches are held in the [stale-patches] directory.
|
||||
Currently, this directory also contains `.md` description files from ancient patches predating the move to Codeberg.
|
||||
|
||||
If you have the inclination to revive one of these, please follow the same procedures outlined below for contributing new patches.
|
||||
|
||||
In your initial pull request (or in the commit that revives the stale patch if you already have write access), remove the corresponding `.md` file or the patch directory from [_STALE_PATCHES].
|
||||
In your initial pull request (or in the commit that revives the stale patch if you already have write access), remove the corresponding `.md` file or the patch directory from [stale-patches].
|
||||
|
||||
[_STALE_PATCHES]:https://codeberg.org/dwl/dwl-patches/src/branch/main/_STALE_PATCHES
|
||||
[stale-patches]: https://codeberg.org/dwl/dwl-patches/src/branch/main/stale-patches
|
||||
[dwl]: https://codeberg.org/dwl/dwl
|
||||
[dwl-patches]: https://codeberg.org/dwl/dwl-patches
|
||||
[issues]: https://codeberg.org/dwl/dwl-patches/issues
|
||||
[release]: https://codeberg.org/dwl/dwl/releases
|
||||
[Codeberg]: https://codeberg.org
|
||||
[Codeberg]: https://codeberg.org
|
||||
|
||||
##
|
||||
|
||||
@ -1,8 +0,0 @@
|
||||
### Description
|
||||
This implements the DRM lease protocol, which is needed to use devices such as VR headsets.
|
||||
|
||||
### Download
|
||||
- [2023-05-26](https://github.com/djpohly/dwl/compare/main...minego:drm_lease_patch.patch)
|
||||
|
||||
### Authors
|
||||
- [Micah N Gorrell](https://github.com/minego)
|
||||
@ -1,10 +0,0 @@
|
||||
### Description
|
||||
Utilizing the [/usr/include/X11/XF86keysym.h](https://cgit.freedesktop.org/xorg/proto/x11proto/tree/XF86keysym.h) header file to change the volume via the appropriate keys.
|
||||
|
||||
### Download
|
||||
- [2023-10-15](https://github.com/djpohly/dwl/compare/main...nakibrayan3:dwl:update-XF86keysym-patch.patch)
|
||||
- [2021-05-06](https://github.com/djpohly/dwl/compare/main...917Wolf:vol.patch)
|
||||
|
||||
### Authors
|
||||
- [917Wolf](https://github.com/917Wolf)
|
||||
- [Rayan Nakib](https://nakibrayan2.pages.dev)
|
||||
@ -1,8 +0,0 @@
|
||||
### Description
|
||||
Adds configurable transparency for focused and unfocused windows.
|
||||
|
||||
### Download
|
||||
- [2021-12-03](https://github.com/djpohly/dwl/compare/main...juliag2:alphafocus.patch)
|
||||
|
||||
### Authors
|
||||
- [Julia](https://github.com/juliag2)
|
||||
@ -1,8 +0,0 @@
|
||||
### Description
|
||||
Newly created windows are placed above the currently selected window in the stack.
|
||||
|
||||
### Download
|
||||
- [2021-01-16](https://github.com/djpohly/dwl/compare/main...ss7m:attachabove.patch)
|
||||
|
||||
### Authors
|
||||
- [sam-barr](https://github.com/ss7m)
|
||||
@ -1,13 +0,0 @@
|
||||
### Description
|
||||
|
||||
This is a port of attachtop patch for dwm: https://dwm.suckless.org/patches/attachtop
|
||||
|
||||
New client attaches below the last master/on top of the stack.
|
||||
|
||||
Behavior feels very intuitive as it doesn't disrupt existing masters no matter the amount of them, it only pushes the clients in stack down.
|
||||
|
||||
### Download
|
||||
- [2023-07-15](https://github.com/djpohly/dwl/compare/main...NikitaIvanovV:attachtop.patch)
|
||||
|
||||
### Authors
|
||||
- [Nikita Ivanov](https://github.com/NikitaIvanovV)
|
||||
@ -1,40 +0,0 @@
|
||||
### Description
|
||||
Adds keybindings for screen rotation and auto rotation from an accelerometer.
|
||||
|
||||
### Setup
|
||||
Find an accelerometer device in sysfs (`cat /sys/bus/iio/devices/iio*/name`,
|
||||
or using a script: [monitor-iio.sh](https://github.com/Unprex/dotfiles/blob/main/scripts/monitor-iio.sh)) \
|
||||
Find the raw output file of the accelerometer
|
||||
(e.g. `cat /sys/bus/iio/devices/iio:device0/in_accel_x_raw` should output an integer). \
|
||||
Add the raw output file names to the dwl configuration **accel_\***.
|
||||
|
||||
Add a udev rule to uniquely identify the device, for example:
|
||||
```
|
||||
sudo echo 'SUBSYSTEM=="iio", KERNEL=="iio*", ATTR{name}=="accel_3d", GROUP="input", SYMLINK+="input/accel"' >> /etc/udev/rules.d/99-accel.rules
|
||||
sudo udevadm control --reload-rules && sudo udevadm trigger
|
||||
```
|
||||
(the device is probably already in /dev/ e.g. `/dev/iio:device0` but on my computer the number changes after a reboot)
|
||||
|
||||
A symlink to the device should now be available in `/dev/input/` and accessible to input group members. \
|
||||
Add the device path to the dwl configuration **accel_path**.
|
||||
|
||||
### Config
|
||||
* `rotation_enabled`: If the auto rotation is enabled on startup.
|
||||
* `rotation_delay`: How often to check the accelerometer values in milliseconds.
|
||||
* `rotation_flat`: Threshold on the normalized Z axis to consider the device flat and stop the auto rotation.
|
||||
* `rotation_thresh`: Rotation threshold after which the screen flips (values less than 0.5 will cause a back and forth).
|
||||
|
||||
+ `accel_path`: The path to the accelerometer device file (e.g. "/dev/input/accel").
|
||||
+ `accel_x`: The name of the sysfs file for the accelerometer x axis.
|
||||
+ `accel_y`: The name of the sysfs file for the accelerometer y axis.
|
||||
+ `accel_z`: The name of the sysfs file for the accelerometer z axis.
|
||||
|
||||
Default keybindings:
|
||||
* `<Modkey>` + `<Shift>` + `<Arrows>`: Change the screen rotation manually (doesn't disable the auto rotation).
|
||||
* `<Modkey>` + `<Shift>` + `<R>`: Enable/disable the auto rotation.
|
||||
|
||||
### Download
|
||||
- [2022-10-25](https://github.com/djpohly/dwl/compare/main...Unprex:rotation.patch)
|
||||
|
||||
### Authors
|
||||
- [Unprex](https://github.com/Unprex)
|
||||
@ -1,10 +0,0 @@
|
||||
### Description
|
||||
Adds a rule to automatically center clients on the current monitor.
|
||||
|
||||
### Download
|
||||
- [v0.4](https://github.com/djpohly/dwl/compare/main...dm1tz:04-center.patch)
|
||||
- [v0.4-r1](https://github.com/djpohly/dwl/compare/main...dm1tz:04rc1-iscenter.patch)
|
||||
- [2022-08-27](https://github.com/djpohly/dwl/compare/main...dm1tz:iscenter.patch)
|
||||
|
||||
### Authors
|
||||
- [Dmitry Zakharchenko](https://github.com/dm1tz)
|
||||
@ -1,27 +0,0 @@
|
||||
### Description
|
||||
Store your clipboard history using `clipman` clipboard manager without your KeePassXC passwords leaking into clipman.
|
||||
|
||||
Ensure these dependencies are installed (instructions for debian, other distros are left as an exercise...):
|
||||
|
||||
apt install clipman libmodern-perl-perl moreutils wl-clipboard
|
||||
|
||||
Change your command to launch `dwl` to something like the following:
|
||||
|
||||
dwl -s 'pee somebar dwl-getwindowtitle'
|
||||
|
||||
Ensure the following command is running in the background of your `dwl` session. Put it whereever your auto-started stuff is.
|
||||
|
||||
exec wl-paste -t text --watch dwl-clipman
|
||||
|
||||
This solution is based on the following reddit post, modified to support `dwl`. https://www.reddit.com/r/swaywm/comments/ljl0dh/keeping_secrets_secret_with_keepassxc_clipman_and/
|
||||
|
||||
Feel free to use this code however you want, but I can't guarantee it will work for what you are trying to do. Licenced under the same license as `dwl`, "WITHOUT WARRANTY OF ANY KIND".
|
||||
|
||||
|
||||
|
||||
### Download
|
||||
- [2022-12-21](https://github.com/djpohly/dwl/compare/main...bencollerson:clipboard-manager.patch)
|
||||
- [2022-12-01](https://github.com/djpohly/dwl/compare/main...bencollerson:94d0a21.patch)
|
||||
|
||||
### Authors
|
||||
- [Ben Collerson](https://github.com/bencollerson)
|
||||
@ -1,8 +0,0 @@
|
||||
### Description
|
||||
Adds clipboard functionality. Requires the [ipc](https://github.com/djpohly/dwl/wiki/ipc) patch for dwl and `wl-clipboard` to be installed. By default, requires [clipman](https://github.com/yory8/clipman) for the clipboard and [dwl-state](https://github.com/MadcowOG/dwl-state) for getting the appid of the focused application, but you can change these in the script if you have alternatives. You may change which applications to not record by modifying the `excludes` array in `dwl-cliboard-watcher`. Make sure `wl-paste -t text -w dwl-clipboard-watcher` is running after dwl.
|
||||
|
||||
### Downloads
|
||||
- [2023-3-01](https://github.com/djpohly/dwl/compare/main...MadcowOG:ipc-clipboard.patch)
|
||||
|
||||
### Authors
|
||||
- [MadcowOG](https://github.com/MadcowOG)
|
||||
@ -1,9 +0,0 @@
|
||||
### Description
|
||||
Adds function to cycle through available layouts.
|
||||
|
||||
### Download
|
||||
- [v0.4](https://github.com/djpohly/dwl/compare/main...dm1tz:04-cyclelayouts.patch)
|
||||
- [2021-07-27](https://github.com/djpohly/dwl/compare/main...vnepogodin:cyclelayouts.patch)
|
||||
|
||||
### Authors
|
||||
- [Vladislav Nepogodin](https://github.com/vnepogodin)
|
||||
@ -1,27 +0,0 @@
|
||||
### Description
|
||||
Arranges windows in a Fibonacci spiral or dwindle.
|
||||
|
||||
### Scheme
|
||||
```
|
||||
+-----------+-----------+ +-----------+-----------+
|
||||
| | | | | |
|
||||
| | 2 | | | 2 |
|
||||
| | | | | |
|
||||
| 1 +--+--+-----+ | 1 +-----+-----+
|
||||
| | 5|-.| | | | | 4 |
|
||||
| +--+--+ 3 | | | 3 +--+--+
|
||||
| | 4 | | | | | 5|-.|
|
||||
+-----------+-----+-----+ +-----------+-----+-----+
|
||||
spiral dwindle
|
||||
```
|
||||
|
||||
### Download
|
||||
- [2023-06-21](https://github.com/djpohly/dwl/compare/main...Abanoub8:fibonacci.patch)
|
||||
- [2022-09-22](http://0x0.st/oVlu.patch)
|
||||
- [2021-05-06](https://github.com/djpohly/dwl/compare/main...917Wolf:fib.patch)
|
||||
|
||||
### Authors
|
||||
- [Abanoub8](https://github.com/Abanoub8)
|
||||
- [medanisjbara](https://github.com/medanisjbara)
|
||||
- [917Wolf](https://github.com/917Wolf)
|
||||
- Niki Yoshiuchi
|
||||
@ -1,7 +0,0 @@
|
||||
### Description
|
||||
Implements `focusmon()` function that moves the cursor to the focused monitor.
|
||||
### Download
|
||||
- [2020-10-15](https://github.com/djpohly/dwl/compare/main...Stivvo:focusMonPointer.patch)
|
||||
|
||||
### Authors
|
||||
- [Stivvo](https://github.com/Stivvo)
|
||||
@ -1,8 +0,0 @@
|
||||
### Description
|
||||
Focus the window left, right, above or below the current focused window
|
||||
|
||||
### Download
|
||||
- [2023-19-15](https://github.com/djpohly/dwl/compare/main...XGames123:focusdir.patch)
|
||||
|
||||
### Authors
|
||||
- [ldev](https://github.com/Xgames123)
|
||||
@ -1,9 +0,0 @@
|
||||
### Description
|
||||
Focus the master regardless of the current focus.
|
||||
|
||||
### Download
|
||||
- [2022-09-02](https://github.com/djpohly/dwl/compare/main...dm1tz:fmaster.patch)
|
||||
- [2022-08-18](https://github.com/djpohly/dwl/compare/main...PalanixYT:focusmaster.patch)
|
||||
|
||||
### Authors
|
||||
- [Palanix](https://github.com/PalanixYT)
|
||||
@ -1,25 +0,0 @@
|
||||
### Description
|
||||
This patch is a modified version of [vanitygaps][vanitygaps] that adds gaps around clients regardless of a layout.
|
||||
It means you can apply any layout patch and the gaps will be shown properly as long as the layout does not add any gaps on its own.
|
||||
|
||||
This works by allowing a layout to place clients normally without gaps,
|
||||
and then correcting positions and dimensions of clients afterwards to add gaps around them.
|
||||
To make it work, I had to modify `resize()` function,
|
||||
and, as a side effect, this change fixed some flickering I experienced when using [snail][snail] layout.
|
||||
|
||||
[snail]: https://github.com/djpohly/dwl/wiki/snail
|
||||
[vanitygaps]: https://github.com/djpohly/dwl/wiki/vanitygaps
|
||||
|
||||
### Changelog
|
||||
|
||||
2023-11-24:
|
||||
- Refactor, it does exactly the same, just using less code.
|
||||
- Replace `gappih`, `gappiv`, `gappoh` and `gappov` with only `gappx`. They don't do anything anyways.
|
||||
|
||||
### Download
|
||||
- [2023-11-24](https://github.com/djpohly/dwl/compare/main...wochap:genericgaps.patch)
|
||||
- [2023-05-20](https://github.com/djpohly/dwl/compare/main...NikitaIvanovV:genericgaps.patch) generic gaps
|
||||
- [2023-05-20](https://github.com/djpohly/dwl/compare/main...NikitaIvanovV:genericgaps-rule.patch) generic gaps + monitor rule to enable gaps on certain monitors by default
|
||||
|
||||
### Authors
|
||||
- [Nikita Ivanov](https://github.com/NikitaIvanovV)
|
||||
@ -1,10 +0,0 @@
|
||||
### Description
|
||||
Arranges windows in a grid of equal sizes.
|
||||
|
||||
### Download
|
||||
- [2023-06-21](https://github.com/djpohly/dwl/compare/main...Abanoub8:gridmode.patch)
|
||||
- [2021-07-24](https://github.com/djpohly/dwl/compare/main...vnepogodin:gridmode.patch)
|
||||
|
||||
### Authors
|
||||
- [Vladislav Nepogodin](https://github.com/vnepogodin)
|
||||
- [Abanoub8](https://github.com/Abanoub8)
|
||||
@ -1,9 +0,0 @@
|
||||
### Description
|
||||
Hide the cursor when typing
|
||||
|
||||
### Download
|
||||
- [2023-10-25](https://github.com/djpohly/dwl/compare/main...apprehensions:hidecursor.patch)
|
||||
- [2023-02-19](https://github.com/djpohly/dwl/compare/main...PalanixYT:type_hide.patch)
|
||||
|
||||
### Authors
|
||||
- [Palanix](https://github.com/PalanixYT)
|
||||
@ -1,15 +0,0 @@
|
||||
### Description
|
||||
Allow for keyboard rules to be used; This allows for keyboard-specific options or layouts.
|
||||
|
||||
The keyboard's names can be retrieved from `libinput list-devices | grep Device`, example:
|
||||
```c
|
||||
static const KeyboardRule kbrules[] = {
|
||||
{ "AT Translated Set 2 keyboard", { .options = "altwin:swap_alt_win,caps:swapescape" } },
|
||||
};
|
||||
```
|
||||
|
||||
### Download
|
||||
- [2023-09-20](https://github.com/djpohly/dwl/compare/main...apprehensions:dwl:kbrules.patch)
|
||||
|
||||
### Authors
|
||||
- [sewn](https://github.com/apprehensions)
|
||||
@ -1,44 +0,0 @@
|
||||
### Description
|
||||
|
||||
This patch implements sequences for chained keybindings (like the dwm [keychord](https://dwm.suckless.org/patches/keychord/) patch).
|
||||
|
||||
_Notes_:
|
||||
- The maximum number of sequences is set to `5` in the `Keychord` struct for a given keybinding
|
||||
- This original motivation was better support for [stumpwm](https://stumpwm.github.io/) style of keybindings, however this is not a limitation
|
||||
|
||||
### Example
|
||||
|
||||
The default values for `MODKEY` and `PREFIXKEY` can be changed in `config.def.h` and/or `config.h`.
|
||||
|
||||
#### emacs-like
|
||||
|
||||
In the example below, the `firefox` command is bound to the key sequence `alt-s alt-u f`.
|
||||
|
||||
```C
|
||||
static const Keychord keychords[] = {
|
||||
/* Note that Shift changes certain key codes: c -> C, 2 -> at, etc. */
|
||||
/* count key_sequences function argument */
|
||||
{ 3, {{MODKEY, XKB_KEY_s}, {MODKEY, XKB_KEY_u}, {MOD_NONE, XKB_KEY_f}}, spawn, SHCMD("firefox") },
|
||||
};
|
||||
```
|
||||
|
||||
#### vim-like
|
||||
|
||||
In the example below, the `firefox` command is bound to the key sequence `alt-s u f`.
|
||||
|
||||
```C
|
||||
static const Keychord keychords[] = {
|
||||
/* Note that Shift changes certain key codes: c -> C, 2 -> at, etc. */
|
||||
/* count key_sequences function argument */
|
||||
{ 3, {{MODKEY, XKB_KEY_s}, {MOD_NONE, XKB_KEY_u}, {MOD_NONE, XKB_KEY_f}}, spawn,SHCMD("firefox") },
|
||||
};
|
||||
```
|
||||
|
||||
### Download
|
||||
|
||||
- [2023-03-12](https://github.com/djpohly/dwl/compare/main...yveszoundi:dwl-customization:keychord-2023-03-12.patch)
|
||||
- [2023-02-15](https://github.com/djpohly/dwl/compare/main...yveszoundi:dwl-customization:v0.4-keychord-2023-02-15.patch)
|
||||
|
||||
### Authors
|
||||
|
||||
- [Yves Zoundi](https://github.com/yveszoundi)
|
||||
@ -1,8 +0,0 @@
|
||||
### Description
|
||||
Print current keyboard layout to stdout
|
||||
|
||||
### Download
|
||||
- [2022-09-10](https://github.com/djpohly/dwl/compare/main...GospodinHoroshiy:keymap.patch)
|
||||
|
||||
### Authors
|
||||
- [Gospodin](https://github.com/GospodinHoroshiy)
|
||||
@ -1,8 +0,0 @@
|
||||
### Description
|
||||
This patch adds the option to let the cursor jump to the center of new clients, as well as move the cursor to the center of clients that gains focus.
|
||||
|
||||
### Download
|
||||
- [2023-03-17](https://github.com/djpohly/dwl/compare/main...0undefined:mouse-follows-focus.patch)
|
||||
|
||||
### Authors
|
||||
- [0undefined](https://github.com/0undefined)
|
||||
@ -1,9 +0,0 @@
|
||||
### Description
|
||||
Extend the [movestack](https://github.com/djpohly/dwl/wiki/movestack) patch to let you also focus, or move, a client to the top or bottom of the stack.
|
||||
|
||||
### Download
|
||||
- [2023-03-12](https://github.com/djpohly/dwl/compare/main...0undefined:dwl:move-client-top.patch)
|
||||
|
||||
### Authors
|
||||
- [0undefined](https://github.com/0undefined)
|
||||
- Original movestack patch: [sam-barr](https://github.com/ss7m)
|
||||
@ -1,8 +0,0 @@
|
||||
### Description
|
||||
Prevent focus on mouseover.
|
||||
|
||||
### Download
|
||||
- [2023-02-05](https://github.com/djpohly/dwl/compare/main...jjjt-git:nomousefocus.patch)
|
||||
|
||||
### Authors
|
||||
- [JJJT](https://github.com/jjjt-git)
|
||||
@ -1,8 +0,0 @@
|
||||
### Description
|
||||
Only exit when no windows are open
|
||||
|
||||
### Download
|
||||
- [2022-09-11](https://github.com/djpohly/dwl/compare/main...GospodinHoroshiy:onlyquitonempty.patch)
|
||||
|
||||
### Authors
|
||||
- [Gospodin](https://github.com/GospodinHoroshiy)
|
||||
@ -1,8 +0,0 @@
|
||||
### Description
|
||||
Adds the -u option that allows users to pass a desired uid to drop to after becoming DRM master.
|
||||
|
||||
### Download
|
||||
- [2021-09-06](https://github.com/djpohly/dwl/compare/main...DanielMowitz:privilege-drop.patch)
|
||||
|
||||
### Authors
|
||||
- [Daniel Mowitz](https://github.com/DanielMowitz)
|
||||
@ -1,23 +0,0 @@
|
||||
### Description
|
||||
This patch allows you to restart dwl with a keybinding.
|
||||
**NOTE:** that all of your applications are gonna get killed on dwl restart.
|
||||
|
||||
The function creates a file at **/tmp/restart_dwl** and exits dwl.
|
||||
You have to modify your dwl launch script in order for this patch to work.
|
||||
Example dwl launch script:
|
||||
```sh
|
||||
do=true
|
||||
while $do || [ -f /tmp/restart_dwl ]; do
|
||||
do=false
|
||||
rm -rf /tmp/restart_dwl > /dev/null 2>&1
|
||||
dwl
|
||||
done
|
||||
```
|
||||
It's a do-while that checks if **/tmp/restart_dwl** exists after the first run of dwl.
|
||||
If this file exists delete it and start dwl again.
|
||||
|
||||
### Download
|
||||
- [2022-10-27](https://github.com/djpohly/dwl/compare/main...krypciak:patch-restartdwl.patch)
|
||||
|
||||
### Authors
|
||||
- [krypciak](https://github.com/krypciak)
|
||||
@ -1,8 +0,0 @@
|
||||
### Description
|
||||
All floating windows become tiling when switching to a different layout.
|
||||
|
||||
### Download
|
||||
- [2020-08-28](https://github.com/djpohly/dwl/compare/main...Stivvo:restoreTiling.patch)
|
||||
|
||||
### Authors
|
||||
- [Stivvo](https://github.com/Stivvo)
|
||||
@ -1,11 +0,0 @@
|
||||
### Description
|
||||
Add a rule to clients to spawn them [sticky](sticky) on start up.
|
||||
I personally use it to make [dragon](https://github.com/mwh/dragon) show up on all tags.
|
||||
|
||||
### Download
|
||||
Apply on top of [sticky patch](sticky).
|
||||
|
||||
- [2023-05-27](https://github.com/dm1tz/dwl/compare/04-sticky...NikitaIvanovV:stickyrule.patch)
|
||||
|
||||
### Authors
|
||||
- [Nikita Ivanov](https://github.com/NikitaIvanovV)
|
||||
@ -1,8 +0,0 @@
|
||||
### Description
|
||||
Implements just enough of the `sway-ipc` protocol to facilitate status bars. Tested with `waybar` and `rootbar`.
|
||||
|
||||
### Download
|
||||
- [2022-06-08](https://github.com/djpohly/dwl/compare/main...StratusFearMe21:main.patch)
|
||||
|
||||
### Authors
|
||||
- [Isaac Mills](https://github.com/StratusFearMe21)
|
||||
@ -1,11 +0,0 @@
|
||||
### Description
|
||||
Adds SIMPLE touchscreen functionality.<br>
|
||||
Currently emulates mouse movement and button presses.<br>
|
||||
|
||||
### Download
|
||||
- [2023-03-31](https://github.com/djpohly/dwl/compare/main...fauxmight:dwl:simple_touch_input.patch)
|
||||
- [2022-10-16](https://github.com/djpohly/dwl/compare/main...Unprex:touch-screen.patch)
|
||||
|
||||
### Authors
|
||||
- [fauxmight](https://github.com/fauxmight)
|
||||
- [Unprex](https://github.com/Unprex)
|
||||
@ -1,25 +0,0 @@
|
||||
### Description
|
||||
A tiled layout optimized for wide vertical monitors.
|
||||
### Scheme
|
||||
```
|
||||
|---------------------------|
|
||||
| |
|
||||
| |
|
||||
| M |
|
||||
| |
|
||||
| |
|
||||
|---------------------------|
|
||||
| t1 |
|
||||
|---------------------------|
|
||||
| t2 |
|
||||
|---------------------------|
|
||||
| t3 |
|
||||
|---------------------------|
|
||||
```
|
||||
### Download
|
||||
- [2023-06-21](https://github.com/djpohly/dwl/compare/main...Abanoub8:vertile.patch)
|
||||
- [2021-08-15](https://github.com/djpohly/dwl/compare/main...ChausseBenjamin:vertile.patch)
|
||||
|
||||
### Authors
|
||||
- [Benjamin Chausse](https://github.com/ChausseBenjamin)
|
||||
- [Abanoub8](https://github.com/Abanoub8)
|
||||
@ -1,9 +0,0 @@
|
||||
### Description
|
||||
|
||||
Set cursor theme and size via `XCURSOR_THEME` and `XCURSOR_SIZE` environmental variables.
|
||||
|
||||
### Download
|
||||
- [2023-07-18](https://github.com/djpohly/dwl/compare/main...NikitaIvanovV:xcursor.patch)
|
||||
|
||||
### Authors
|
||||
- [Nikita Ivanov](https://github.com/NikitaIvanovV)
|
||||
@ -1,21 +0,0 @@
|
||||
### Description
|
||||
Adds touchscreen functionality.
|
||||
|
||||
This patch was based on the [simple-touch-input](https://codeberg.org/dwl/dwl-patches/wiki/simple-touch-input) but instead of emulating mouse movement, this now forwards the appropriate event notifications to clients.
|
||||
|
||||
KNOWN BUGS:
|
||||
- Sometimes, the pointer moves to where the screen is pressed, but the button press doesn't occur until the screen is touched AGAIN. This means that if you touch to click button 'Q' on the screen (for instance), nothing happens; then you touch elsewhere on the screen and THEN button 'Q' registers a click. This is annoying, doesn't always happen, and I don't yet know how to fix it.
|
||||
|
||||
### Download
|
||||
- [git branch](https://codeberg.org/minego/dwl/src/branch/touch)
|
||||
- [2024-03-26](https://codeberg.org/dwl/dwl-patches/raw/branch/main/patches/less-simple-touch-input/less-simple-touch-input.patch)
|
||||
|
||||
### Authors
|
||||
- [minego](https://codeberg.org/minego)
|
||||
- [fauxmight](https://codeberg.org/fauxmight)
|
||||
- [Unprex](https://github.com/Unprex)
|
||||
|
||||
### Changelog
|
||||
- 2024-02-11 Corrected issue where motion events where not sending notifications for unfocused clients such as an on screen keyboard
|
||||
- 2024-03-26 Rebased, and removed #ifdef's for the pointer constraints patch which has been merged into upstream
|
||||
- 2024-03-28 Removed debug
|
||||
@ -1,304 +0,0 @@
|
||||
From adc8734017644f44443db30e976cf03147c7c3c4 Mon Sep 17 00:00:00 2001
|
||||
From: Micah N Gorrell <m@minego.net>
|
||||
Date: Fri, 9 Feb 2024 17:08:20 -0700
|
||||
Subject: [PATCH 1/3] Add support for touch screen input devices, and send the
|
||||
appropriate events to clients
|
||||
|
||||
Send notification of touch motition events even if there is no client to focus. This is important for swiping on an OSK.
|
||||
|
||||
Add support for touch screen input devices, and send the appropriate events to clients
|
||||
|
||||
Removed #ifdef around code that needs pointer constraints now that that is merged to upstream
|
||||
---
|
||||
dwl.c | 145 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 145 insertions(+)
|
||||
|
||||
diff --git a/dwl.c b/dwl.c
|
||||
index 5867b0c..fe447fb 100644
|
||||
--- a/dwl.c
|
||||
+++ b/dwl.c
|
||||
@@ -47,6 +47,7 @@
|
||||
#include <wlr/types/wlr_session_lock_v1.h>
|
||||
#include <wlr/types/wlr_single_pixel_buffer_v1.h>
|
||||
#include <wlr/types/wlr_subcompositor.h>
|
||||
+#include <wlr/types/wlr_touch.h>
|
||||
#include <wlr/types/wlr_viewporter.h>
|
||||
#include <wlr/types/wlr_virtual_keyboard_v1.h>
|
||||
#include <wlr/types/wlr_virtual_pointer_v1.h>
|
||||
@@ -161,6 +162,12 @@ typedef struct {
|
||||
struct wl_listener key;
|
||||
} KeyboardGroup;
|
||||
|
||||
+typedef struct TouchGroup {
|
||||
+ struct wl_list link;
|
||||
+ struct wlr_touch *touch;
|
||||
+ Monitor *m;
|
||||
+} TouchGroup;
|
||||
+
|
||||
typedef struct {
|
||||
/* Must keep these three elements in this order */
|
||||
unsigned int type; /* LayerShell */
|
||||
@@ -264,7 +271,9 @@ static void createmon(struct wl_listener *listener, void *data);
|
||||
static void createnotify(struct wl_listener *listener, void *data);
|
||||
static void createpointer(struct wlr_pointer *pointer);
|
||||
static void createpointerconstraint(struct wl_listener *listener, void *data);
|
||||
+static void createtouch(struct wlr_touch *touch);
|
||||
static void cursorconstrain(struct wlr_pointer_constraint_v1 *constraint);
|
||||
+static void createtouch(struct wlr_touch *touch);
|
||||
static void cursorframe(struct wl_listener *listener, void *data);
|
||||
static void cursorwarptohint(void);
|
||||
static void destroydecoration(struct wl_listener *listener, void *data);
|
||||
@@ -334,6 +343,10 @@ static void togglefloating(const Arg *arg);
|
||||
static void togglefullscreen(const Arg *arg);
|
||||
static void toggletag(const Arg *arg);
|
||||
static void toggleview(const Arg *arg);
|
||||
+static void touchdown(struct wl_listener *listener, void *data);
|
||||
+static void touchup(struct wl_listener *listener, void *data);
|
||||
+static void touchframe(struct wl_listener *listener, void *data);
|
||||
+static void touchmotion(struct wl_listener *listener, void *data);
|
||||
static void unlocksession(struct wl_listener *listener, void *data);
|
||||
static void unmaplayersurfacenotify(struct wl_listener *listener, void *data);
|
||||
static void unmapnotify(struct wl_listener *listener, void *data);
|
||||
@@ -404,6 +417,7 @@ static struct wlr_output_layout *output_layout;
|
||||
static struct wlr_box sgeom;
|
||||
static struct wl_list mons;
|
||||
static Monitor *selmon;
|
||||
+static struct wl_list touches;
|
||||
|
||||
#ifdef XWAYLAND
|
||||
static void activatex11(struct wl_listener *listener, void *data);
|
||||
@@ -1041,6 +1055,16 @@ createpointerconstraint(struct wl_listener *listener, void *data)
|
||||
&pointer_constraint->destroy, destroypointerconstraint);
|
||||
}
|
||||
|
||||
+void
|
||||
+createtouch(struct wlr_touch *wlr_touch)
|
||||
+{
|
||||
+ TouchGroup *touch = ecalloc(1, sizeof(TouchGroup));
|
||||
+
|
||||
+ touch->touch = wlr_touch;
|
||||
+ wl_list_insert(&touches, &touch->link);
|
||||
+ wlr_cursor_attach_input_device(cursor, &wlr_touch->base);
|
||||
+}
|
||||
+
|
||||
void
|
||||
cursorconstrain(struct wlr_pointer_constraint_v1 *constraint)
|
||||
{
|
||||
@@ -1412,6 +1436,9 @@ inputdevice(struct wl_listener *listener, void *data)
|
||||
case WLR_INPUT_DEVICE_POINTER:
|
||||
createpointer(wlr_pointer_from_input_device(device));
|
||||
break;
|
||||
+ case WLR_INPUT_DEVICE_TOUCH:
|
||||
+ createtouch(wlr_touch_from_input_device(device));
|
||||
+ break;
|
||||
default:
|
||||
/* TODO handle other input device types */
|
||||
break;
|
||||
@@ -1424,6 +1451,8 @@ inputdevice(struct wl_listener *listener, void *data)
|
||||
caps = WL_SEAT_CAPABILITY_POINTER;
|
||||
if (!wl_list_empty(&kb_group.wlr_group->devices))
|
||||
caps |= WL_SEAT_CAPABILITY_KEYBOARD;
|
||||
+ if (!wl_list_empty(&touches))
|
||||
+ caps |= WL_SEAT_CAPABILITY_TOUCH;
|
||||
wlr_seat_set_capabilities(seat, caps);
|
||||
}
|
||||
|
||||
@@ -2431,6 +2460,13 @@ setup(void)
|
||||
LISTEN_STATIC(&cursor->events.axis, axisnotify);
|
||||
LISTEN_STATIC(&cursor->events.frame, cursorframe);
|
||||
|
||||
+ wl_list_init(&touches);
|
||||
+
|
||||
+ LISTEN_STATIC(&cursor->events.touch_down, touchdown);
|
||||
+ LISTEN_STATIC(&cursor->events.touch_frame, touchframe);
|
||||
+ LISTEN_STATIC(&cursor->events.touch_motion, touchmotion);
|
||||
+ LISTEN_STATIC(&cursor->events.touch_up, touchup);
|
||||
+
|
||||
cursor_shape_mgr = wlr_cursor_shape_manager_v1_create(dpy, 1);
|
||||
LISTEN_STATIC(&cursor_shape_mgr->events.request_set_shape, setcursorshape);
|
||||
|
||||
@@ -2647,6 +2683,115 @@ toggleview(const Arg *arg)
|
||||
printstatus();
|
||||
}
|
||||
|
||||
+void
|
||||
+touchdown(struct wl_listener *listener, void *data)
|
||||
+{
|
||||
+ struct wlr_touch_down_event *event = data;
|
||||
+ double lx, ly;
|
||||
+ double sx, sy;
|
||||
+ struct wlr_surface *surface;
|
||||
+ Client *c = NULL;
|
||||
+ uint32_t serial = 0;
|
||||
+ Monitor *m;
|
||||
+
|
||||
+ wlr_idle_notifier_v1_notify_activity(idle_notifier, seat);
|
||||
+
|
||||
+ // Map the input to the appropriate output, to ensure that rotation is
|
||||
+ // handled.
|
||||
+ wl_list_for_each(m, &mons, link) {
|
||||
+ if (m == NULL || m->wlr_output == NULL) {
|
||||
+ continue;
|
||||
+ }
|
||||
+ if (event->touch->output_name != NULL && 0 != strcmp(event->touch->output_name, m->wlr_output->name)) {
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ wlr_cursor_map_input_to_output(cursor, &event->touch->base, m->wlr_output);
|
||||
+ }
|
||||
+
|
||||
+ wlr_cursor_absolute_to_layout_coords(cursor, &event->touch->base, event->x, event->y, &lx, &ly);
|
||||
+
|
||||
+ /* Find the client under the pointer and send the event along. */
|
||||
+ xytonode(lx, ly, &surface, &c, NULL, &sx, &sy);
|
||||
+ // fprintf(stderr, "touch_down at %lf, %lf\n", lx, ly);
|
||||
+
|
||||
+ if (surface != NULL) {
|
||||
+ serial = wlr_seat_touch_notify_down(seat, surface, event->time_msec, event->touch_id, sx, sy);
|
||||
+ }
|
||||
+
|
||||
+ if (serial && wlr_seat_touch_num_points(seat) == 1) {
|
||||
+ /* Emulate a mouse click if the touch event wasn't handled */
|
||||
+ struct wlr_pointer_button_event *button_event = data;
|
||||
+ struct wlr_pointer_motion_absolute_event *motion_event = data;
|
||||
+ double dx, dy;
|
||||
+
|
||||
+ wlr_cursor_absolute_to_layout_coords(cursor, &motion_event->pointer->base, motion_event->x, motion_event->y, &lx, &ly);
|
||||
+ wlr_cursor_warp_closest(cursor, &motion_event->pointer->base, lx, ly);
|
||||
+ dx = lx - cursor->x;
|
||||
+ dy = ly - cursor->y;
|
||||
+ motionnotify(motion_event->time_msec, &motion_event->pointer->base, dx, dy, dx, dy);
|
||||
+
|
||||
+ button_event->button = BTN_LEFT;
|
||||
+ button_event->state = WLR_BUTTON_PRESSED;
|
||||
+ buttonpress(listener, button_event);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+touchup(struct wl_listener *listener, void *data)
|
||||
+{
|
||||
+ struct wlr_touch_up_event *event = data;
|
||||
+
|
||||
+ if (!wlr_seat_touch_get_point(seat, event->touch_id)) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (wlr_seat_touch_num_points(seat) == 1) {
|
||||
+ struct wlr_pointer_button_event *button_event = data;
|
||||
+
|
||||
+ button_event->button = BTN_LEFT;
|
||||
+ button_event->state = WLR_BUTTON_RELEASED;
|
||||
+ buttonpress(listener, button_event);
|
||||
+ }
|
||||
+
|
||||
+ wlr_seat_touch_notify_up(seat, event->time_msec, event->touch_id);
|
||||
+ wlr_idle_notifier_v1_notify_activity(idle_notifier, seat);
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+touchframe(struct wl_listener *listener, void *data)
|
||||
+{
|
||||
+ wlr_seat_touch_notify_frame(seat);
|
||||
+ wlr_idle_notifier_v1_notify_activity(idle_notifier, seat);
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+touchmotion(struct wl_listener *listener, void *data)
|
||||
+{
|
||||
+ struct wlr_touch_motion_event *event = data;
|
||||
+ double lx, ly;
|
||||
+ double sx, sy;
|
||||
+ struct wlr_surface *surface;
|
||||
+ Client *c = NULL;
|
||||
+
|
||||
+ if (!wlr_seat_touch_get_point(seat, event->touch_id)) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ wlr_cursor_absolute_to_layout_coords(cursor, &event->touch->base, event->x, event->y, &lx, &ly);
|
||||
+ xytonode(lx, ly, &surface, &c, NULL, &sx, &sy);
|
||||
+
|
||||
+ if (c != NULL) {
|
||||
+ wlr_seat_touch_point_focus(seat, surface, event->time_msec, event->touch_id, sx, sy);
|
||||
+ } else {
|
||||
+ wlr_seat_touch_point_clear_focus(seat, event->time_msec, event->touch_id);
|
||||
+ }
|
||||
+ wlr_seat_touch_notify_motion(seat, event->time_msec, event->touch_id, sx, sy);
|
||||
+
|
||||
+ wlr_idle_notifier_v1_notify_activity(idle_notifier, seat);
|
||||
+}
|
||||
+
|
||||
+
|
||||
void
|
||||
unlocksession(struct wl_listener *listener, void *data)
|
||||
{
|
||||
--
|
||||
2.44.0
|
||||
|
||||
|
||||
From c2e4ff7253f33c80552abe9126e3c57d0aa23560 Mon Sep 17 00:00:00 2001
|
||||
From: Micah N Gorrell <m@minego.net>
|
||||
Date: Thu, 28 Mar 2024 11:25:59 -0600
|
||||
Subject: [PATCH 2/3] Removed debug
|
||||
|
||||
---
|
||||
dwl.c | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/dwl.c b/dwl.c
|
||||
index fe447fb..c26c581 100644
|
||||
--- a/dwl.c
|
||||
+++ b/dwl.c
|
||||
@@ -2713,7 +2713,6 @@ touchdown(struct wl_listener *listener, void *data)
|
||||
|
||||
/* Find the client under the pointer and send the event along. */
|
||||
xytonode(lx, ly, &surface, &c, NULL, &sx, &sy);
|
||||
- // fprintf(stderr, "touch_down at %lf, %lf\n", lx, ly);
|
||||
|
||||
if (surface != NULL) {
|
||||
serial = wlr_seat_touch_notify_down(seat, surface, event->time_msec, event->touch_id, sx, sy);
|
||||
--
|
||||
2.44.0
|
||||
|
||||
|
||||
From ae64e0c3b51c8600de7c081034ea267c08134635 Mon Sep 17 00:00:00 2001
|
||||
From: anabasis <anabasis@noreply.codeberg.org>
|
||||
Date: Sat, 11 May 2024 20:19:18 -0400
|
||||
Subject: [PATCH 3/3] fix bug and focus client according to sloppyfocus
|
||||
|
||||
---
|
||||
dwl.c | 8 +++++++-
|
||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dwl.c b/dwl.c
|
||||
index c26c581..75b44d7 100644
|
||||
--- a/dwl.c
|
||||
+++ b/dwl.c
|
||||
@@ -2713,6 +2713,8 @@ touchdown(struct wl_listener *listener, void *data)
|
||||
|
||||
/* Find the client under the pointer and send the event along. */
|
||||
xytonode(lx, ly, &surface, &c, NULL, &sx, &sy);
|
||||
+ if (sloppyfocus)
|
||||
+ focusclient(c, 0);
|
||||
|
||||
if (surface != NULL) {
|
||||
serial = wlr_seat_touch_notify_down(seat, surface, event->time_msec, event->touch_id, sx, sy);
|
||||
@@ -2780,9 +2782,13 @@ touchmotion(struct wl_listener *listener, void *data)
|
||||
wlr_cursor_absolute_to_layout_coords(cursor, &event->touch->base, event->x, event->y, &lx, &ly);
|
||||
xytonode(lx, ly, &surface, &c, NULL, &sx, &sy);
|
||||
|
||||
- if (c != NULL) {
|
||||
+ if (c != NULL && surface != NULL) {
|
||||
+ if (sloppyfocus)
|
||||
+ focusclient(c, 0);
|
||||
wlr_seat_touch_point_focus(seat, surface, event->time_msec, event->touch_id, sx, sy);
|
||||
} else {
|
||||
+ if (sloppyfocus)
|
||||
+ focusclient(NULL, 0);
|
||||
wlr_seat_touch_point_clear_focus(seat, event->time_msec, event->touch_id);
|
||||
}
|
||||
wlr_seat_touch_notify_motion(seat, event->time_msec, event->touch_id, sx, sy);
|
||||
--
|
||||
2.44.0
|
||||
|
||||
@ -3,9 +3,13 @@ This patch adds 3 additional options to the `Key` struct, `on_press`, `on_repeat
|
||||
|
||||
NOTE: Due to concerns about patching difficulties this patch does NOT include any changes to `config.def.h`. After applying you will need to add the 3 additional initializers to each key binding that you would like to modify. Any key binding that is not updated will cause a build warning but should function as it does in vanilla.
|
||||
|
||||
2025-01-04 Moved to stale patches.
|
||||
Outstanding issues with this patch: https://codeberg.org/dwl/dwl-patches/issues/98
|
||||
Patch maintainer notes he is no longer maintaining dwl patches: https://codeberg.org/dwl/dwl-patches/pulls/102
|
||||
|
||||
### Download
|
||||
- [git branch](https://codeberg.org/USERNAME/dwl/src/branch/press_repeat_release)
|
||||
- [2024-03-27](https://codeberg.org/dwl/dwl-patches/raw/branch/main/patches/press_repeat_release/press_repeat_release.patch)
|
||||
|
||||
### Authors
|
||||
- [minego](https://codeberg.org/minego)
|
||||
- [minego](https://codeberg.org/minego)
|
||||
Loading…
x
Reference in New Issue
Block a user