Changeset b752f1e


Ignore:
Timestamp:
Dec 19, 2009, 10:19:04 PM (10 years ago)
Author:
Nelson Elhage <nelhage@mit.edu>
Branches:
master, release-1.5, release-1.6, release-1.7, release-1.8, release-1.9
Children:
1247aaa
Parents:
99c1f46
git-author:
Nelson Elhage <nelhage@mit.edu> (12/16/09 17:50:34)
git-committer:
Nelson Elhage <nelhage@mit.edu> (12/19/09 22:19:04)
Message:
Allow ^Z to be rebound.

Rather than catching SIGTSTP and doing things with it, disable VSUSP,
which causes ^Z to get passed through to us as a normal keystroke. In
addition, change the binding so that it prints the warning SIGTSTP
used to.
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • global.c

    r129e609 rb752f1e  
    117117  g->timerlist = NULL;
    118118  g->interrupted = FALSE;
    119   g->got_sigtstp = FALSE;
    120119}
    121120
     
    963962  g->interrupted = 0;
    964963}
    965 
    966 int owl_global_is_sigstp(const owl_global *g) {
    967   return g->got_sigtstp;
    968 }
    969 
    970 void owl_global_set_got_sigstp(owl_global *g) {
    971   g->got_sigtstp = 1;
    972 }
    973 
    974 void owl_global_unset_got_sigstp(owl_global *g) {
    975   g->got_sigtstp = 0;
    976 }
  • keys.c

    rdbe172d rb752f1e  
    2121       "System-wide default key bindings",
    2222       owl_keys_default_invalid, NULL, NULL);
    23   BIND_CMD("C-z",      "suspend",            "Suspend owl");
     23  BIND_CMD("C-z",      "message Use :suspend to suspend.", "");
    2424
    2525  /****************************************************************/
  • owl.c

    r129e609 rb752f1e  
    135135  tcgetattr(0, owl_global_get_startup_tio(&g));
    136136
    137   /* turn ISTRIP off */
    138137  tcgetattr(0, &tio);
    139138  tio.c_iflag &= ~(ISTRIP|IEXTEN);
    140139  tio.c_cc[VQUIT] = 0;
     140  tio.c_cc[VSUSP] = 0;
    141141  tcsetattr(0, TCSAFLUSH, &tio);
    142142
     
    396396}
    397397
    398 void sigtstp_handler(int sig, siginfo_t *si, void *data)
    399 {
    400   owl_global_set_got_sigstp(&g);
    401 }
    402 
    403398void owl_register_signal_handlers(void) {
    404399  struct sigaction sigact;
     
    417412  sigact.sa_sigaction=sigint_handler;
    418413  sigaction(SIGINT, &sigact, NULL);
    419 
    420   sigact.sa_sigaction=sigtstp_handler;
    421   sigaction(SIGTSTP, &sigact, NULL);
    422414}
    423415
  • owl.h

    r129e609 rb752f1e  
    610610  int load_initial_subs;
    611611  int interrupted;
    612   int got_sigtstp;
    613612} owl_global;
    614613
  • select.c

    r7ca5d3e rb752f1e  
    303303  sigemptyset(&set);
    304304  sigaddset(&set, SIGINT);
    305   sigaddset(&set, SIGTSTP);
    306305  sigprocmask(SIG_BLOCK, &set, oldmask);
    307306}
     
    317316  in.ch = in.uch = owl_global_get_startup_tio(&g)->c_cc[VINTR];
    318317  owl_process_input_char(in);
    319 }
    320 
    321 void owl_select_check_tstp(void) {
    322   if(owl_global_is_sigstp(&g)) {
    323     owl_function_makemsg("Use :suspend to suspend.");
    324     owl_global_unset_got_sigstp(&g);
    325   }
    326318}
    327319
     
    398390  owl_select_mask_signals(&mask);
    399391
    400   owl_select_check_tstp();
    401392  if(owl_global_is_interrupted(&g)) {
    402393    owl_select_handle_intr(&mask);
     
    447438
    448439  if(ret < 0 && errno == EINTR) {
    449     owl_select_check_tstp();
    450440    if(owl_global_is_interrupted(&g)) {
    451441      owl_select_handle_intr(NULL);
Note: See TracChangeset for help on using the changeset viewer.