Introduction
Introduction Statistics Contact Development Disclaimer Help
dwm-restoreafterrestart-20220709-d3f93c7.diff - sites - public wiki contents of…
git clone git://git.suckless.org/sites
Log
Files
Refs
---
dwm-restoreafterrestart-20220709-d3f93c7.diff (2399B)
---
1 From 9fd4a02b57aa8a764d8105d5f2f854372f4ef559 Mon Sep 17 00:00:00 2001
2 From: ViliamKovac1223 <[email protected]>
3 Date: Sat, 9 Jul 2022 17:35:54 +0200
4 Subject: [PATCH] add restore patch
5
6 ---
7 config.def.h | 2 ++
8 dwm.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++
9 2 files changed, 55 insertions(+)
10
11 diff --git a/config.def.h b/config.def.h
12 index 6ec4146..0b91976 100644
13 --- a/config.def.h
14 +++ b/config.def.h
15 @@ -1,5 +1,7 @@
16 /* See LICENSE file for copyright and license details. */
17
18 +#define SESSION_FILE "/tmp/dwm-session"
19 +
20 /* appearance */
21 static const unsigned int borderpx = 1; /* border pixel of wind…
22 static const unsigned int snap = 32; /* snap pixel */
23 diff --git a/dwm.c b/dwm.c
24 index 74cec7e..76b40a2 100644
25 --- a/dwm.c
26 +++ b/dwm.c
27 @@ -1255,11 +1255,63 @@ propertynotify(XEvent *e)
28 }
29 }
30
31 +void
32 +saveSession(void)
33 +{
34 + FILE *fw = fopen(SESSION_FILE, "w");
35 + for (Client *c = selmon->clients; c != NULL; c = c->next) { // …
36 + fprintf(fw, "%lu %u\n", c->win, c->tags);
37 + }
38 + fclose(fw);
39 +}
40 +
41 +void
42 +restoreSession(void)
43 +{
44 + // restore session
45 + FILE *fr = fopen(SESSION_FILE, "r");
46 + if (!fr)
47 + return;
48 +
49 + char *str = malloc(23 * sizeof(char)); // allocate enough space…
50 + while (fscanf(fr, "%[^\n] ", str) != EOF) { // read file till t…
51 + long unsigned int winId;
52 + unsigned int tagsForWin;
53 + int check = sscanf(str, "%lu %u", &winId, &tagsForWin);…
54 + if (check != 2) // break loop if data wasn't read corre…
55 + break;
56 +
57 + for (Client *c = selmon->clients; c ; c = c->next) { //…
58 + if (c->win == winId) {
59 + c->tags = tagsForWin;
60 + break;
61 + }
62 + }
63 + }
64 +
65 + for (Client *c = selmon->clients; c ; c = c->next) { // refocus…
66 + focus(c);
67 + restack(c->mon);
68 + }
69 +
70 + for (Monitor *m = selmon; m; m = m->next) // rearrange all moni…
71 + arrange(m);
72 +
73 + free(str);
74 + fclose(fr);
75 +
76 + // delete a file
77 + remove(SESSION_FILE);
78 +}
79 +
80 void
81 quit(const Arg *arg)
82 {
83 if(arg->i) restart = 1;
84 running = 0;
85 +
86 + if (restart == 1)
87 + saveSession();
88 }
89
90 Monitor *
91 @@ -2173,6 +2225,7 @@ main(int argc, char *argv[])
92 die("pledge");
93 #endif /* __OpenBSD__ */
94 scan();
95 + restoreSession();
96 run();
97 if(restart) execvp(argv[0], argv);
98 cleanup();
99 --
100 2.35.1
101
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.