st-newterm-0.8.2.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
st-newterm-0.8.2.diff (1947B)
---
1 From a7eedc85e0609177cdb1ed3f6203fa37e6420012 Mon Sep 17 00:00:00 2001
2 From: Matias Lang <yo@matiaslang.me>
3 Date: Wed, 17 Jul 2019 01:10:44 -0300
4 Subject: [PATCH] Add shortcut to spawn new terminal in the current dir
5
6 Ctrl-Shift-Return now creates a new ST terminal, whose CWD is the same
7 as the parent st's CWD
8 ---
9 config.def.h | 1 +
10 st.c | 21 +++++++++++++++++++++
11 st.h | 1 +
12 3 files changed, 23 insertions(+)
13
14 diff --git a/config.def.h b/config.def.h
15 index 0e01717..31f26d8 100644
16 --- a/config.def.h
17 +++ b/config.def.h
18 @@ -178,6 +178,7 @@ static Shortcut shortcuts[] = {
19 { TERMMOD, XK_Y, selpaste, {.i = 0} },
20 { ShiftMask, XK_Insert, selpaste, {.i = 0} },
21 { TERMMOD, XK_Num_Lock, numlock, {.i = 0} },
22 + { TERMMOD, XK_Return, newterm, {.i = 0} },
23 };
24
25 /*
26 diff --git a/st.c b/st.c
27 index b8e6077..044e29b 100644
28 --- a/st.c
29 +++ b/st.c
30 @@ -153,6 +153,7 @@ typedef struct {
31 } STREscape;
32
33 static void execsh(char *, char **);
34 +static char *getcwd_by_pid(pid_t pid);
35 static void stty(char **);
36 static void sigchld(int);
37 static void ttywriteraw(const char *, size_t);
38 @@ -1059,6 +1060,26 @@ tswapscreen(void)
39 tfulldirt();
40 }
41
42 +void
43 +newterm(const Arg* a)
44 +{
45 + switch (fork()) {
46 + case -1:
47 + die("fork failed: %s\n", strerror(errno));
48 + break;
49 + case 0:
50 + chdir(getcwd_by_pid(pid));
51 + execlp("st", "./st", NULL);
52 + break;
53 + }
54 +}
55 +
56 +static char *getcwd_by_pid(pid_t pid) {
57 + char buf[32];
58 + snprintf(buf, sizeof buf, "/proc/%d/cwd", pid);
59 + return realpath(buf, NULL);
60 +}
61 +
62 void
63 tscrolldown(int orig, int n)
64 {
65 diff --git a/st.h b/st.h
66 index 38c61c4..54d4a43 100644
67 --- a/st.h
68 +++ b/st.h
69 @@ -80,6 +80,7 @@ void die(const char *, ...);
70 void redraw(void);
71 void draw(void);
72
73 +void newterm(const Arg *);
74 void printscreen(const Arg *);
75 void printsel(const Arg *);
76 void sendbreak(const Arg *);
77 --
78 2.19.2
79