[wiki] [sites] [dwm] add patch for restoring clients to their tags after restart || ViliamKovac1223

From: <git_AT_suckless.org>
Date: Sat, 09 Jul 2022 19:07:01 +0200

commit c7509a6b5075a7e1f3b12a11a7d569068769b232
Author: ViliamKovac1223 <viliamkovac1223_AT_gmail.com>
Date: Sat Jul 9 19:05:37 2022 +0200

    [dwm] add patch for restoring clients to their tags after restart

diff --git a/dwm.suckless.org/patches/restoreafterrestart/dwm-restoreafterrestart-20220709-d3f93c7.diff b/dwm.suckless.org/patches/restoreafterrestart/dwm-restoreafterrestart-20220709-d3f93c7.diff
new file mode 100644
index 00000000..cfcb607c
--- /dev/null
+++ b/dwm.suckless.org/patches/restoreafterrestart/dwm-restoreafterrestart-20220709-d3f93c7.diff
_AT_@ -0,0 +1,101 @@
+From 9fd4a02b57aa8a764d8105d5f2f854372f4ef559 Mon Sep 17 00:00:00 2001
+From: ViliamKovac1223 <viliamkovac1223_AT_gmail.com>
+Date: Sat, 9 Jul 2022 17:35:54 +0200
+Subject: [PATCH] add restore patch
+
+---
+ config.def.h | 2 ++
+ dwm.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 55 insertions(+)
+
+diff --git a/config.def.h b/config.def.h
+index 6ec4146..0b91976 100644
+--- a/config.def.h
++++ b/config.def.h
+_AT_@ -1,5 +1,7 @@
+ /* See LICENSE file for copyright and license details. */
+
++#define SESSION_FILE "/tmp/dwm-session"
++
+ /* appearance */
+ static const unsigned int borderpx = 1; /* border pixel of windows */
+ static const unsigned int snap = 32; /* snap pixel */
+diff --git a/dwm.c b/dwm.c
+index 74cec7e..76b40a2 100644
+--- a/dwm.c
++++ b/dwm.c
+_AT_@ -1255,11 +1255,63 @@ propertynotify(XEvent *e)
+ }
+ }
+
++void
++saveSession(void)
++{
++ FILE *fw = fopen(SESSION_FILE, "w");
++ for (Client *c = selmon->clients; c != NULL; c = c->next) { // get all the clients with their tags and write them to the file
++ fprintf(fw, "%lu %u
", c->win, c->tags);
++ }
++ fclose(fw);
++}
++
++void
++restoreSession(void)
++{
++ // restore session
++ FILE *fr = fopen(SESSION_FILE, "r");
++ if (!fr)
++ return;
++
++ char *str = malloc(23 * sizeof(char)); // allocate enough space for excepted input from text file
++ while (fscanf(fr, "%[^
] ", str) != EOF) { // read file till the end
++ long unsigned int winId;
++ unsigned int tagsForWin;
++ int check = sscanf(str, "%lu %u", &winId, &tagsForWin); // get data
++ if (check != 2) // break loop if data wasn't read correctly
++ break;
++
++ for (Client *c = selmon->clients; c ; c = c->next) { // add tags to every window by winId
++ if (c->win == winId) {
++ c->tags = tagsForWin;
++ break;
++ }
++ }
++ }
++
++ for (Client *c = selmon->clients; c ; c = c->next) { // refocus on windows
++ focus(c);
++ restack(c->mon);
++ }
++
++ for (Monitor *m = selmon; m; m = m->next) // rearrange all monitors
++ arrange(m);
++
++ free(str);
++ fclose(fr);
++
++ // delete a file
++ remove(SESSION_FILE);
++}
++
+ void
+ quit(const Arg *arg)
+ {
+ if(arg->i) restart = 1;
+ running = 0;
++
++ if (restart == 1)
++ saveSession();
+ }
+
+ Monitor *
+_AT_@ -2173,6 +2225,7 @@ main(int argc, char *argv[])
+ die("pledge");
+ #endif /* __OpenBSD__ */
+ scan();
++ restoreSession();
+ run();
+ if(restart) execvp(argv[0], argv);
+ cleanup();
+--
+2.35.1
+
diff --git a/dwm.suckless.org/patches/restoreafterrestart/index.md b/dwm.suckless.org/patches/restoreafterrestart/index.md
new file mode 100644
index 00000000..bae75359
--- /dev/null
+++ b/dwm.suckless.org/patches/restoreafterrestart/index.md
_AT_@ -0,0 +1,34 @@
+Restore after restart
+=====================
+
+Description
+-----------
+After restarting your dwm all your windows/clients are all in one tag, first tag.
+Well no more, This patch save tag of every window/client to the file and after dwm is restarted
+the file is read and used to get all the windows/clients in their previous tags.
+
+Configuration Options
+---------------------
+* `SESSION_FILE` - path to the file which is used to store tags to all windows/clients
+
+Notes
+-----
+This patch is supposed be used along the [restartsig](../restartsig/index.md), if you want use this patch with your own
+way how to restart dwm then put "saveSession()" before restarting dwm and put "restoreSession()" after
+dwm was restarted.
+Patch has been coded based on [this debate](https://bbs.archlinux.org/viewtopic.php?id=196975).
+This patch is also hosted on my [github](https://github.com/ViliamKovac1223/dwm-ViliamKovac1223-build/tree/main/patches).
+
+Download
+--------
+* [dwm-restoreafterrestart-20220709-d3f93c7.diff](dwm-restoreafterrestart-20220709-d3f93c7.diff)
+
+Authors
+-------
+* Viliam Kováč - viliamkovac1223_AT_gmail.com
+
+Fake Internet money
+-------------------
+If you like my work and want to support me by some fake internet money, here is my monero address
+
+8722XFCUGajWxpdKQY4V2ije88Ti2v97VWLS9p9rvNTcWd7VisuKQzvQYNan37jYnv7thECLkrnbm6CKdA2jhdFFTLV8nav
Received on Sat Jul 09 2022 - 19:07:01 CEST

This archive was generated by hypermail 2.3.0 : Sat Jul 09 2022 - 19:12:39 CEST