removed (visual) bell. '\a' sets the urgency flag if st is unfocused.
This commit is contained in:
		
							parent
							
								
									188293c828
								
							
						
					
					
						commit
						e851736e8b
					
				
							
								
								
									
										2
									
								
								config.h
								
								
								
								
							
							
						
						
									
										2
									
								
								config.h
								
								
								
								
							| 
						 | 
				
			
			@ -29,8 +29,6 @@ static const char *colorname[] = {
 | 
			
		|||
#define DefaultFG 7
 | 
			
		||||
#define DefaultBG 0
 | 
			
		||||
#define DefaultCS 1
 | 
			
		||||
#define BellCol   DefaultFG
 | 
			
		||||
#define BellTime  30000 /* microseconds */
 | 
			
		||||
 | 
			
		||||
/* special keys */
 | 
			
		||||
static Key key[] = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										42
									
								
								st.c
								
								
								
								
							
							
						
						
									
										42
									
								
								st.c
								
								
								
								
							| 
						 | 
				
			
			@ -108,6 +108,7 @@ typedef struct {
 | 
			
		|||
	int bufh; /* pixmap height */
 | 
			
		||||
	int ch; /* char height */
 | 
			
		||||
	int cw; /* char width  */
 | 
			
		||||
	int hasfocus;
 | 
			
		||||
} XWindow; 
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
| 
						 | 
				
			
			@ -161,23 +162,27 @@ static void ttyread(void);
 | 
			
		|||
static void ttyresize(int, int);
 | 
			
		||||
static void ttywrite(const char *, size_t);
 | 
			
		||||
 | 
			
		||||
static void xbell(void);
 | 
			
		||||
static void xdraws(char *, Glyph, int, int, int);
 | 
			
		||||
static void xhints(void);
 | 
			
		||||
static void xclear(int, int, int, int);
 | 
			
		||||
static void xdrawcursor(void);
 | 
			
		||||
static void xinit(void);
 | 
			
		||||
static void xloadcols(void);
 | 
			
		||||
static void xseturgency(int);
 | 
			
		||||
 | 
			
		||||
static void expose(XEvent *);
 | 
			
		||||
static char* kmap(KeySym);
 | 
			
		||||
static void kpress(XEvent *);
 | 
			
		||||
static void resize(XEvent *);
 | 
			
		||||
static void focus(XEvent *);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void (*handler[LASTEvent])(XEvent *) = {
 | 
			
		||||
	[KeyPress] = kpress,
 | 
			
		||||
	[Expose] = expose,
 | 
			
		||||
	[ConfigureNotify] = resize
 | 
			
		||||
	[ConfigureNotify] = resize,
 | 
			
		||||
	[FocusIn] = focus,
 | 
			
		||||
	[FocusOut] = focus,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Globals */
 | 
			
		||||
| 
						 | 
				
			
			@ -187,7 +192,6 @@ static Term term;
 | 
			
		|||
static CSIEscape escseq;
 | 
			
		||||
static int cmdfd;
 | 
			
		||||
static pid_t pid;
 | 
			
		||||
static int running;
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
void
 | 
			
		||||
| 
						 | 
				
			
			@ -227,15 +231,6 @@ execsh(void) {
 | 
			
		|||
	execvp(args[0], args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
xbell(void) {
 | 
			
		||||
	XSetForeground(xw.dis, dc.gc, dc.col[BellCol]);
 | 
			
		||||
	XFillRectangle(xw.dis, xw.win, dc.gc, BORDER, BORDER, xw.bufw, xw.bufh);
 | 
			
		||||
	XFlush(xw.dis);
 | 
			
		||||
	usleep(BellTime);
 | 
			
		||||
	draw(SCREEN_REDRAW);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void 
 | 
			
		||||
sigchld(int a) {
 | 
			
		||||
	int stat = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -930,7 +925,8 @@ tputc(char c) {
 | 
			
		|||
			tnewline();
 | 
			
		||||
			break;
 | 
			
		||||
		case '\a':
 | 
			
		||||
			xbell();
 | 
			
		||||
			if(!xw.hasfocus)
 | 
			
		||||
				xseturgency(1);
 | 
			
		||||
			break;
 | 
			
		||||
		case '\033':
 | 
			
		||||
			csireset();
 | 
			
		||||
| 
						 | 
				
			
			@ -1208,6 +1204,20 @@ expose(XEvent *ev) {
 | 
			
		|||
	draw(SCREEN_REDRAW);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
xseturgency(int add) {
 | 
			
		||||
	XWMHints *h = XGetWMHints(xw.dis, xw.win);
 | 
			
		||||
	h->flags = add ? (h->flags | XUrgencyHint) : (h->flags & ~XUrgencyHint);
 | 
			
		||||
	XSetWMHints(xw.dis, xw.win, h);
 | 
			
		||||
	XFree(h);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
focus(XEvent *ev) {
 | 
			
		||||
	if((xw.hasfocus = ev->type == FocusIn))
 | 
			
		||||
		xseturgency(0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char*
 | 
			
		||||
kmap(KeySym k) {
 | 
			
		||||
	int i;
 | 
			
		||||
| 
						 | 
				
			
			@ -1282,12 +1292,12 @@ run(void) {
 | 
			
		|||
	XEvent ev;
 | 
			
		||||
	fd_set rfd;
 | 
			
		||||
	int xfd = XConnectionNumber(xw.dis);
 | 
			
		||||
	long mask = ExposureMask | KeyPressMask | StructureNotifyMask | FocusChangeMask;
 | 
			
		||||
 | 
			
		||||
	running = 1;
 | 
			
		||||
	XSelectInput(xw.dis, xw.win, ExposureMask | KeyPressMask | StructureNotifyMask);
 | 
			
		||||
	XSelectInput(xw.dis, xw.win, mask);
 | 
			
		||||
	XResizeWindow(xw.dis, xw.win, xw.w, xw.h); /* XXX: fix resize bug in wmii (?) */
 | 
			
		||||
 | 
			
		||||
	while(running) {
 | 
			
		||||
	while(1) {
 | 
			
		||||
		FD_ZERO(&rfd);
 | 
			
		||||
		FD_SET(cmdfd, &rfd);
 | 
			
		||||
		FD_SET(xfd, &rfd);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue