Introduction
Introduction Statistics Contact Development Disclaimer Help
dwm-r1615-selfrestart.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
dwm-r1615-selfrestart.diff (2817B)
---
1 # HG changeset patch
2 # User Barbu Paul - Gheorghe <[email protected]>
3 # Date 1354650884 -7200
4 # Node ID 6c472a21a5887c5295a331c48c4da188ec2c8413
5 # Parent aaab44133a6830c9a00263731d098c01cc1d6fb5
6 selfrestart now magically locates the current dwm (no need to hardcode a…
7
8 diff -r aaab44133a68 -r 6c472a21a588 config.def.h
9 --- a/config.def.h Tue Dec 04 21:54:44 2012 +0200
10 +++ b/config.def.h Tue Dec 04 21:54:44 2012 +0200
11 @@ -54,6 +54,8 @@
12 static const char *termcmd[] = { "urxvtc", NULL };
13 static const char *filemancmd[] = { "thunar", NULL };
14
15 +#include "selfrestart.c"
16 +
17 static Key keys[] = {
18 /* modifier key function argu…
19 { MODKEY, XK_r, spawn, {.v …
20 @@ -89,6 +91,7 @@
21 TAGKEYS( XK_7, 6)
22 TAGKEYS( XK_8, 7)
23 TAGKEYS( XK_9, 8)
24 + { MODKEY|ShiftMask, XK_r, self_restart, {0} },
25 { MODKEY|ShiftMask, XK_q, quit, {0} …
26 };
27
28 @@ -108,4 +111,3 @@
29 { ClkTagBar, MODKEY, Button1, tag, …
30 { ClkTagBar, MODKEY, Button3, togglet…
31 };
32 -
33 diff -r aaab44133a68 -r 6c472a21a588 selfrestart.c
34 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
35 +++ b/selfrestart.c Tue Dec 04 21:54:44 2012 +0200
36 @@ -0,0 +1,65 @@
37 +#include <unistd.h>
38 +#include <sys/types.h>
39 +#include <sys/stat.h>
40 +#include <stdio.h>
41 +#include <stdlib.h>
42 +
43 +/**
44 + * Magically finds the current's executable path
45 + *
46 + * I'm doing the do{}while(); trick because Linux (what I'm running) is…
47 + * POSIX compilant and so lstat() cannot be trusted on /proc entries
48 + *
49 + * @return char* the path of the current executable
50 + */
51 +char *get_dwm_path(){
52 + struct stat s;
53 + int r, length, rate = 42;
54 + char *path = NULL;
55 +
56 + if(lstat("/proc/self/exe", &s) == -1){
57 + perror("lstat:");
58 + return NULL;
59 + }
60 +
61 + length = s.st_size + 1 - rate;
62 +
63 + do{
64 + length+=rate;
65 +
66 + free(path);
67 + path = malloc(sizeof(char) * length);
68 +
69 + if(path == NULL){
70 + perror("malloc:");
71 + return NULL;
72 + }
73 +
74 + r = readlink("/proc/self/exe", path, length);
75 +
76 + if(r == -1){
77 + perror("readlink:");
78 + return NULL;
79 + }
80 + }while(r >= length);
81 +
82 + path[r] = '\0';
83 +
84 + return path;
85 +}
86 +
87 +/**
88 + * self-restart
89 + *
90 + * Initially inspired by: Yu-Jie Lin
91 + * https://sites.google.com/site/yjlnotes/notes/dwm
92 + */
93 +void self_restart(const Arg *arg) {
94 + char *const argv[] = {get_dwm_path(), NULL};
95 +
96 + if(argv[0] == NULL){
97 + return;
98 + }
99 +
100 + execv(argv[0], argv);
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.