summaryrefslogtreecommitdiff
path: root/archive/st/patch/newterm.c
diff options
context:
space:
mode:
Diffstat (limited to 'archive/st/patch/newterm.c')
-rw-r--r--archive/st/patch/newterm.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/archive/st/patch/newterm.c b/archive/st/patch/newterm.c
new file mode 100644
index 0000000..d4a1735
--- /dev/null
+++ b/archive/st/patch/newterm.c
@@ -0,0 +1,30 @@
+void
+newterm(const Arg* a)
+{
+ int res;
+ switch (fork()) {
+ case -1:
+ die("fork failed: %s\n", strerror(errno));
+ break;
+ case 0:
+ switch (fork()) {
+ case -1:
+ die("fork failed: %s\n", strerror(errno));
+ break;
+ case 0:
+ res = chdir(getcwd_by_pid(pid));
+ execlp("st", "./st", NULL);
+ break;
+ default:
+ exit(0);
+ }
+ default:
+ wait(NULL);
+ }
+}
+
+static char *getcwd_by_pid(pid_t pid) {
+ char buf[32];
+ snprintf(buf, sizeof buf, "/proc/%d/cwd", pid);
+ return realpath(buf, NULL);
+} \ No newline at end of file