80 lines
1.9 KiB
Diff
80 lines
1.9 KiB
Diff
|
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
|
||
|
|