mirror of
https://github.com/zoriya/flake.git
synced 2026-06-01 10:15:45 +00:00
Add gestures
This commit is contained in:
@@ -0,0 +1,79 @@
|
|||||||
|
From 9dbdc4269c8db1b9580a153d99165aaa9cf14ad7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: korei999 <ju7t1xe@gmail.com>
|
||||||
|
Date: Mon, 17 Jul 2023 01:02:22 +0300
|
||||||
|
Subject: [PATCH] This patch provides the ability to rotate the tagset left /
|
||||||
|
right. It implements a new function rotatetags which modifies the current
|
||||||
|
tagset. Same as original dwm patch. Also adds ability to "shift" focused
|
||||||
|
client to left / right tag.
|
||||||
|
|
||||||
|
---
|
||||||
|
config.def.h | 6 +++++-
|
||||||
|
dwl.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
2 files changed, 53 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/dwl.c b/dwl.c
|
||||||
|
index 93f66efe6..3928c2b9b 100644
|
||||||
|
--- a/dwl.c
|
||||||
|
+++ b/dwl.c
|
||||||
|
@@ -318,6 +318,8 @@ static Monitor *xytomon(double x, double y);
|
||||||
|
static struct wlr_scene_node *xytonode(double x, double y, struct wlr_surface **psurface,
|
||||||
|
Client **pc, LayerSurface **pl, double *nx, double *ny);
|
||||||
|
static void zoom(const Arg *arg);
|
||||||
|
+static void rotatetags(const Arg *arg);
|
||||||
|
+static void clientshift(const Arg *arg);
|
||||||
|
|
||||||
|
/* variables */
|
||||||
|
static const char broken[] = "broken";
|
||||||
|
@@ -2687,6 +2689,52 @@ zoom(const Arg *arg)
|
||||||
|
arrange(selmon);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+rotatetags(const Arg *arg)
|
||||||
|
+{
|
||||||
|
+ Arg a;
|
||||||
|
+ size_t ntags = tagcount;
|
||||||
|
+ int i = arg->i;
|
||||||
|
+ int nextseltags, curseltags = selmon->tagset[selmon->seltags];
|
||||||
|
+
|
||||||
|
+ if (i > 0) // left circular shift
|
||||||
|
+ nextseltags = (curseltags << 1) | (curseltags >> (ntags - 1));
|
||||||
|
+ else // right circular shift
|
||||||
|
+ nextseltags = curseltags >> 1 | (curseltags << (ntags - 1));
|
||||||
|
+
|
||||||
|
+ i += arg->i;
|
||||||
|
+
|
||||||
|
+ a.i = nextseltags;
|
||||||
|
+ view(&a);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+clientshift(const Arg *arg)
|
||||||
|
+{
|
||||||
|
+ Client *sel = focustop(selmon);
|
||||||
|
+
|
||||||
|
+ Arg a;
|
||||||
|
+ size_t ntags = tagcount;
|
||||||
|
+ int i = arg->i;
|
||||||
|
+ int nextseltags, curseltags = selmon->tagset[selmon->seltags];
|
||||||
|
+
|
||||||
|
+ if (i > 0) // left circular shift
|
||||||
|
+ nextseltags = (curseltags << 1) | (curseltags >> (ntags - 1));
|
||||||
|
+ else // right circular shift
|
||||||
|
+ nextseltags = curseltags >> 1 | (curseltags << (ntags - 1));
|
||||||
|
+
|
||||||
|
+ i += arg->i;
|
||||||
|
+
|
||||||
|
+ a.i = nextseltags;
|
||||||
|
+
|
||||||
|
+ if (sel && a.i) {
|
||||||
|
+ sel->tags = a.i;
|
||||||
|
+ focusclient(focustop(selmon), 1);
|
||||||
|
+ arrange(selmon);
|
||||||
|
+ }
|
||||||
|
+ printstatus();
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
#ifdef XWAYLAND
|
||||||
|
void
|
||||||
|
activatex11(struct wl_listener *listener, void *data)
|
||||||
@@ -23,6 +23,7 @@ static const bool cursor_warp = true;
|
|||||||
static const char *const autostart[] = {
|
static const char *const autostart[] = {
|
||||||
"dwlstartup", NULL,
|
"dwlstartup", NULL,
|
||||||
"wallpaper", NULL,
|
"wallpaper", NULL,
|
||||||
|
"ydotoold", NULL,
|
||||||
"wl-paste", "--watch", "cliphist", "store", NULL,
|
"wl-paste", "--watch", "cliphist", "store", NULL,
|
||||||
"discord", NULL,
|
"discord", NULL,
|
||||||
"youtube-music", NULL,
|
"youtube-music", NULL,
|
||||||
@@ -38,7 +39,7 @@ static const Rule rules[] = {
|
|||||||
{ "Gimp", NULL, 0, 1, -1 },
|
{ "Gimp", NULL, 0, 1, -1 },
|
||||||
*/
|
*/
|
||||||
{ "discord", NULL, 1 << 2, 0, -1 },
|
{ "discord", NULL, 1 << 2, 0, -1 },
|
||||||
{ "YouTube Music", NULL, 1 << 0, 0, -1 },
|
{ "YouTube Music", NULL, 1 << 1, 0, -1 },
|
||||||
};
|
};
|
||||||
|
|
||||||
/* layout(s) */
|
/* layout(s) */
|
||||||
@@ -156,6 +157,10 @@ static const Key keys[] = {
|
|||||||
{ MODKEY, XKB_KEY_period, focusmon, {.i = WLR_DIRECTION_RIGHT} },
|
{ MODKEY, XKB_KEY_period, focusmon, {.i = WLR_DIRECTION_RIGHT} },
|
||||||
{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_less, tagmon, {.i = WLR_DIRECTION_LEFT} },
|
{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_less, tagmon, {.i = WLR_DIRECTION_LEFT} },
|
||||||
{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_greater, tagmon, {.i = WLR_DIRECTION_RIGHT} },
|
{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_greater, tagmon, {.i = WLR_DIRECTION_RIGHT} },
|
||||||
|
{ MODKEY, XKB_KEY_Left, rotatetags, {.i = -1} },
|
||||||
|
{ MODKEY, XKB_KEY_Right, rotatetags, {.i = +1} },
|
||||||
|
{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Left, clientshift, {.i = -1} },
|
||||||
|
{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Right, clientshift, {.i = +1} },
|
||||||
TAGKEYS( XKB_KEY_1, XKB_KEY_exclam, 0),
|
TAGKEYS( XKB_KEY_1, XKB_KEY_exclam, 0),
|
||||||
TAGKEYS( XKB_KEY_2, XKB_KEY_at, 1),
|
TAGKEYS( XKB_KEY_2, XKB_KEY_at, 1),
|
||||||
TAGKEYS( XKB_KEY_3, XKB_KEY_numbersign, 2),
|
TAGKEYS( XKB_KEY_3, XKB_KEY_numbersign, 2),
|
||||||
|
|||||||
@@ -4,3 +4,5 @@ dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
|
|||||||
# Stop any services that are running, so that they receive the new env var when they restart.
|
# Stop any services that are running, so that they receive the new env var when they restart.
|
||||||
systemctl --user stop pipewire wireplumber xdg-desktop-portal xdg-desktop-portal-wlr xdg-desktop-portal-gtk
|
systemctl --user stop pipewire wireplumber xdg-desktop-portal xdg-desktop-portal-wlr xdg-desktop-portal-gtk
|
||||||
systemctl --user start wireplumber
|
systemctl --user start wireplumber
|
||||||
|
|
||||||
|
fusuma -c ~/.config/fusuma/config.yaml
|
||||||
|
|||||||
+22
-14
@@ -11,10 +11,11 @@
|
|||||||
name = "covercolors";
|
name = "covercolors";
|
||||||
dontUnpack = true;
|
dontUnpack = true;
|
||||||
propagatedBuildInputs = [
|
propagatedBuildInputs = [
|
||||||
(pkgs.python3.withPackages (pyPkgs: with pyPkgs; [
|
(pkgs.python3.withPackages (pyPkgs:
|
||||||
material-color-utilities
|
with pyPkgs; [
|
||||||
pillow
|
material-color-utilities
|
||||||
]))
|
pillow
|
||||||
|
]))
|
||||||
];
|
];
|
||||||
installPhase = "install -Dm755 ${./ags/covercolors.py} $out/bin/covercolors";
|
installPhase = "install -Dm755 ${./ags/covercolors.py} $out/bin/covercolors";
|
||||||
};
|
};
|
||||||
@@ -41,6 +42,8 @@ in {
|
|||||||
slurp
|
slurp
|
||||||
cliphist
|
cliphist
|
||||||
covercolors
|
covercolors
|
||||||
|
ydotool
|
||||||
|
fusuma
|
||||||
];
|
];
|
||||||
|
|
||||||
xdg.systemDirs.data = [
|
xdg.systemDirs.data = [
|
||||||
@@ -48,19 +51,24 @@ in {
|
|||||||
"${pkgs.gsettings-desktop-schemas}/share/gsettings-schemas/${pkgs.gsettings-desktop-schemas.name}"
|
"${pkgs.gsettings-desktop-schemas}/share/gsettings-schemas/${pkgs.gsettings-desktop-schemas.name}"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
xdg.configFile."ags" = {
|
xdg.configFile."ags" = {
|
||||||
source = ./ags;
|
source = ./ags;
|
||||||
recursive = true;
|
recursive = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
home.pointerCursor = {
|
xdg.configFile."fusuma/config.yaml".text = "
|
||||||
name = "Adwaita";
|
swipe:
|
||||||
package = pkgs.gnome.adwaita-icon-theme;
|
3:
|
||||||
size = 24;
|
right:
|
||||||
x11 = {
|
command: 'ydotool key 125:1 105:1 105:0 125:0'
|
||||||
enable = true;
|
left:
|
||||||
defaultCursor = "Adwaita";
|
command: 'ydotool key 125:1 106:1 106:0 125:0'
|
||||||
};
|
up:
|
||||||
};
|
command: 'ydotool key 125:1 4:1 4:0 125:0'
|
||||||
|
down:
|
||||||
|
command: 'ydotool key 125:1 4:1 4:0 125:0'
|
||||||
|
hold:
|
||||||
|
3:
|
||||||
|
command: 'ydotool key 125:1 3:1 3:0 125:0'
|
||||||
|
";
|
||||||
}
|
}
|
||||||
|
|||||||
+29
-16
@@ -1,22 +1,35 @@
|
|||||||
{ config, pkgs, ... }:
|
{
|
||||||
rec {
|
config,
|
||||||
gtk = {
|
pkgs,
|
||||||
enable = true;
|
...
|
||||||
theme = {
|
}: rec {
|
||||||
name = pkgs.adw-gtk3.pname;
|
gtk = {
|
||||||
package = pkgs.adw-gtk3;
|
enable = true;
|
||||||
};
|
theme = {
|
||||||
|
name = pkgs.adw-gtk3.pname;
|
||||||
|
package = pkgs.adw-gtk3;
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
|
||||||
services.xsettingsd = {
|
services.xsettingsd = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
"Net/ThemeName" = "${gtk.theme.name}";
|
"Net/ThemeName" = "${gtk.theme.name}";
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
|
||||||
qt = {
|
qt = {
|
||||||
|
enable = true;
|
||||||
|
platformTheme = "gtk";
|
||||||
|
};
|
||||||
|
|
||||||
|
home.pointerCursor = {
|
||||||
|
name = "Adwaita";
|
||||||
|
package = pkgs.gnome.adwaita-icon-theme;
|
||||||
|
size = 24;
|
||||||
|
x11 = {
|
||||||
enable = true;
|
enable = true;
|
||||||
platformTheme = "gtk";
|
defaultCursor = "Adwaita";
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
|
}
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ in {
|
|||||||
../dwl_patches/montagset.patch
|
../dwl_patches/montagset.patch
|
||||||
../dwl_patches/movestack.patch
|
../dwl_patches/movestack.patch
|
||||||
../dwl_patches/gdk_monitors_status.patch
|
../dwl_patches/gdk_monitors_status.patch
|
||||||
|
../dwl_patches/rotatetags.patch
|
||||||
];
|
];
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user