st-externalpipe-signal-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-externalpipe-signal-0.8.2.diff (1705B)
       ---
            1 From df32a82e8a889629ed406ce468f24c35da7e9a03 Mon Sep 17 00:00:00 2001
            2 From: Miles Alan <m@milesalan.com>
            3 Date: Sun, 11 Aug 2019 21:33:55 -0500
            4 Subject: [PATCH] Add handler for SIGUSR1 signal to run an externalpipe command
            5 
            6 ---
            7  config.def.h |  1 +
            8  st.c         | 14 ++++++++++++++
            9  st.h         |  1 +
           10  3 files changed, 16 insertions(+)
           11 
           12 diff --git a/config.def.h b/config.def.h
           13 index 0e01717..96d1bdd 100644
           14 --- a/config.def.h
           15 +++ b/config.def.h
           16 @@ -1,3 +1,4 @@
           17 +char *externalpipe_sigusr1[] = {"/bin/sh", "-c", "externalpipe_buffer.sh st_strings_read"};
           18  /* See LICENSE file for copyright and license details. */
           19  
           20  /*
           21 diff --git a/st.c b/st.c
           22 index b8e6077..48cae2e 100644
           23 --- a/st.c
           24 +++ b/st.c
           25 @@ -155,6 +155,7 @@ typedef struct {
           26  static void execsh(char *, char **);
           27  static void stty(char **);
           28  static void sigchld(int);
           29 +static void sigusr1(int);
           30  static void ttywriteraw(const char *, size_t);
           31  
           32  static void csidump(void);
           33 @@ -719,6 +720,13 @@ execsh(char *cmd, char **args)
           34          _exit(1);
           35  }
           36  
           37 +void
           38 +sigusr1(int unused)
           39 +{
           40 +  static Arg a = {.v = externalpipe_sigusr1};
           41 +  externalpipe(&a);
           42 +}
           43 +
           44  void
           45  sigchld(int a)
           46  {
           47 @@ -765,6 +773,12 @@ stty(char **args)
           48  int
           49  ttynew(char *line, char *cmd, char *out, char **args)
           50  {
           51 +        static struct sigaction sa;
           52 +        sa.sa_handler = sigusr1;
           53 +        sigemptyset(&sa.sa_mask);
           54 +        sa.sa_flags = SA_RESTART;
           55 +        sigaction(SIGUSR1, &sa, NULL);
           56 +
           57          int m, s;
           58  
           59          if (out) {
           60 diff --git a/st.h b/st.h
           61 index 38c61c4..794b4ff 100644
           62 --- a/st.h
           63 +++ b/st.h
           64 @@ -111,6 +111,7 @@ void *xrealloc(void *, size_t);
           65  char *xstrdup(char *);
           66  
           67  /* config.h globals */
           68 +extern char *externalpipe_sigusr1[];
           69  extern char *utmp;
           70  extern char *stty_args;
           71  extern char *vtiden;
           72 -- 
           73 2.19.2
           74