1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- From a7eedc85e0609177cdb1ed3f6203fa37e6420012 Mon Sep 17 00:00:00 2001
- From: Matias Lang <yo@matiaslang.me>
- Date: Wed, 17 Jul 2019 01:10:44 -0300
- Subject: [PATCH] Add shortcut to spawn new terminal in the current dir
- Ctrl-Shift-Return now creates a new ST terminal, whose CWD is the same
- as the parent st's CWD
- ---
- config.def.h | 1 +
- st.c | 21 +++++++++++++++++++++
- st.h | 1 +
- 3 files changed, 23 insertions(+)
- diff --git a/config.def.h b/config.def.h
- index 0e01717..31f26d8 100644
- --- a/config.def.h
- +++ b/config.def.h
- @@ -178,6 +178,7 @@ static Shortcut shortcuts[] = {
- { TERMMOD, XK_Y, selpaste, {.i = 0} },
- { ShiftMask, XK_Insert, selpaste, {.i = 0} },
- { TERMMOD, XK_Num_Lock, numlock, {.i = 0} },
- + { TERMMOD, XK_Return, newterm, {.i = 0} },
- };
-
- /*
- diff --git a/st.c b/st.c
- index b8e6077..044e29b 100644
- --- a/st.c
- +++ b/st.c
- @@ -153,6 +153,7 @@ typedef struct {
- } STREscape;
-
- static void execsh(char *, char **);
- +static char *getcwd_by_pid(pid_t pid);
- static void stty(char **);
- static void sigchld(int);
- static void ttywriteraw(const char *, size_t);
- @@ -1059,6 +1060,26 @@ tswapscreen(void)
- tfulldirt();
- }
-
- +void
- +newterm(const Arg* a)
- +{
- + switch (fork()) {
- + case -1:
- + die("fork failed: %s\n", strerror(errno));
- + break;
- + case 0:
- + chdir(getcwd_by_pid(pid));
- + execlp("st", "./st", NULL);
- + break;
- + }
- +}
- +
- +static char *getcwd_by_pid(pid_t pid) {
- + char buf[32];
- + snprintf(buf, sizeof buf, "/proc/%d/cwd", pid);
- + return realpath(buf, NULL);
- +}
- +
- void
- tscrolldown(int orig, int n)
- {
- diff --git a/st.h b/st.h
- index 38c61c4..54d4a43 100644
- --- a/st.h
- +++ b/st.h
- @@ -80,6 +80,7 @@ void die(const char *, ...);
- void redraw(void);
- void draw(void);
-
- +void newterm(const Arg *);
- void printscreen(const Arg *);
- void printsel(const Arg *);
- void sendbreak(const Arg *);
- --
- 2.19.2
|