sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | 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