Last active
March 22, 2021 08:32
-
-
Save bbtdev/e18c0901f1bfcea24367dc19852eef3e to your computer and use it in GitHub Desktop.
New term with n instead of return
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From a7eedc85e0609177cdb1ed3f6203fa37e6420012 Mon Sep 17 00:00:00 2001 | |
From: Matias Lang <[email protected]> | |
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_N, 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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From a7eedc85e0609177cdb1ed3f6203fa37e6420012 Mon Sep 17 00:00:00 2001 | |
From: Matias Lang <[email protected]> | |
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_N, 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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment