patch-sigcont-and-sigtstp.patch - pkgsrc-localpatches - leot's pkgsrc LOCALPATCHES
 (HTM) hg clone https://bitbucket.org/iamleot/pkgsrc-localpatches
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       patch-sigcont-and-sigtstp.patch
       ---
            1 Add initial and incomplete support for SIG{CONT,TSTP}
            2 
            3 This is probably still not completely correct, e.g. can we gracefully
            4 handle the case where `/' is pressed and some input for the search
            5 was entered?
            6 
            7 Apart that, signals are properly not handled correctly when in
            8 PAGER and the screen is messed up there too.
            9 
           10 --- common.h.orig
           11 +++ common.h
           12 @@ -35,4 +35,6 @@ char *uiprompt(char *fmt, ...);
           13  Item *uiselectitem(Item *entry);
           14  void uisetup(void);
           15  void uisigwinch(int signal);
           16 +void uisigcont(int signal);
           17 +void uisigtstp(int signal);
           18  void uistatus(char *fmt, ...);
           19 diff --git a/sacc.c b/sacc.c
           20 index 1ed1d1c..60e62ca 100644
           21 --- sacc.c.orig
           22 +++ sacc.c
           23 @@ -965,6 +965,10 @@ setup(void)
           24                 uisetup();
           25                 sa.sa_handler = uisigwinch;
           26                 sigaction(SIGWINCH, &sa, NULL);
           27 +               sa.sa_handler = uisigcont;
           28 +               sigaction(SIGCONT, &sa, NULL);
           29 +               sa.sa_handler = uisigtstp;
           30 +               sigaction(SIGTSTP, &sa, NULL);
           31         }
           32  }
           33  
           34 diff --git a/ui_ti.c b/ui_ti.c
           35 index ae11338..c324043 100644
           36 --- ui_ti.c.orig
           37 +++ ui_ti.c
           38 @@ -1,3 +1,4 @@
           39 +#include <signal.h>
           40  #include <stdarg.h>
           41  #include <stdio.h>
           42  #include <stdlib.h>
           43 @@ -554,8 +555,7 @@ uisigwinch(int signal)
           44  {
           45         Dir *dir;
           46  
           47 -       setupterm(NULL, 1, NULL);
           48 -       putp(tparm(change_scroll_region, 0, lines-2, 0, 0, 0, 0, 0, 0, 0));
           49 +       uisetup();
           50  
           51         if (!curentry || !(dir = curentry->dat))
           52                 return;
           53 @@ -565,3 +565,19 @@ uisigwinch(int signal)
           54  
           55         uidisplay(curentry);
           56  }
           57 +
           58 +void
           59 +uisigcont(int signal)
           60 +{
           61 +
           62 +       uicleanup();
           63 +       uisigwinch(signal);
           64 +}
           65 +
           66 +void
           67 +uisigtstp(int signal)
           68 +{
           69 +
           70 +       uicleanup();
           71 +       kill(getpid(), SIGSTOP);
           72 +}
           73 diff --git a/ui_txt.c b/ui_txt.c
           74 index 3b9d964..d7d868f 100644
           75 --- ui_txt.c.orig
           76 +++ ui_txt.c
           77 @@ -1,10 +1,12 @@
           78  #include <ctype.h>
           79  #include <errno.h>
           80 +#include <signal.h>
           81  #include <stdarg.h>
           82  #include <stdio.h>
           83  #include <stdlib.h>
           84  #include <string.h>
           85  #include <termios.h>
           86 +#include <unistd.h>
           87  #include <sys/ioctl.h>
           88  #include <sys/types.h>
           89  
           90 @@ -336,3 +338,17 @@ uisigwinch(int signal)
           91         printstatus(curentry, cmd);
           92         fflush(stdout);
           93  }
           94 +
           95 +void
           96 +uisigcont(int signal)
           97 +{
           98 +
           99 +       uisigwinch(signal);
          100 +}
          101 +
          102 +void
          103 +uisigtstp(int signal)
          104 +{
          105 +
          106 +       kill(getpid(), SIGSTOP);
          107 +}