st-visualbell-20180101-1f24bde.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       st-visualbell-20180101-1f24bde.diff (1508B)
       ---
            1 diff --git a/st.c b/st.c
            2 index 7c7ddff..2dc10c2 100644
            3 --- a/st.c
            4 +++ b/st.c
            5 @@ -218,6 +218,7 @@ char *opt_line  = NULL;
            6  char *opt_name  = NULL;
            7  char *opt_title = NULL;
            8  int oldbutton   = 3; /* button event on startup: 3 = release */
            9 +int bellon      = 0;
           10  
           11  static CSIEscape csiescseq;
           12  static STREscape strescseq;
           13 @@ -2187,8 +2188,7 @@ tcontrolcode(uchar ascii)
           14                  } else {
           15                          if (!(win.state & WIN_FOCUSED))
           16                                  xseturgency(1);
           17 -                        if (bellvolume)
           18 -                                xbell(bellvolume);
           19 +                        xbell(bellvolume);
           20                  }
           21                  break;
           22          case '\033': /* ESC */
           23 diff --git a/st.h b/st.h
           24 index 44d4938..24a6eb6 100644
           25 --- a/st.h
           26 +++ b/st.h
           27 @@ -231,6 +231,7 @@ extern char *opt_line;
           28  extern char *opt_name;
           29  extern char *opt_title;
           30  extern int oldbutton;
           31 +extern int bellon;
           32  
           33  extern char *usedfont;
           34  extern double usedfontsize;
           35 diff --git a/x.c b/x.c
           36 index c484dfc..0b59d0e 100644
           37 --- a/x.c
           38 +++ b/x.c
           39 @@ -1484,7 +1484,17 @@ xseturgency(int add)
           40  void
           41  xbell(int vol)
           42  {
           43 -        XkbBell(xw.dpy, xw.win, vol, (Atom)NULL);
           44 +        if (vol)
           45 +                XkbBell(xw.dpy, xw.win, vol, (Atom)NULL);
           46 +
           47 +        /* visual bell*/
           48 +        if (!bellon) {
           49 +                bellon = 1;
           50 +                MODBIT(term.mode, !IS_SET(MODE_REVERSE), MODE_REVERSE);
           51 +                redraw();
           52 +                XFlush(xw.dpy);
           53 +                MODBIT(term.mode, !IS_SET(MODE_REVERSE), MODE_REVERSE);
           54 +        }
           55  }
           56  
           57  unsigned long
           58 @@ -1676,7 +1686,12 @@ run(void)
           59                                          (handler[ev.type])(&ev);
           60                          }
           61  
           62 -                        draw();
           63 +                        if (bellon) {
           64 +                                bellon = 0;
           65 +                                redraw();
           66 +                        }
           67 +                        else draw();
           68 +
           69                          XFlush(xw.dpy);
           70  
           71                          if (xev && !FD_ISSET(xfd, &rfd))
           72 -- 
           73 2.15.1
           74