=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/server.c,v retrieving revision 1.9 retrieving revision 1.10 diff -c -r1.9 -r1.10 *** src/usr.bin/tmux/server.c 2009/07/14 19:03:16 1.9 --- src/usr.bin/tmux/server.c 2009/07/18 14:59:25 1.10 *************** *** 1,4 **** ! /* $OpenBSD: server.c,v 1.9 2009/07/14 19:03:16 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: server.c,v 1.10 2009/07/18 14:59:25 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 55,62 **** struct client *server_accept_client(int); void server_handle_client(struct client *); void server_handle_window(struct window *, struct window_pane *); ! int server_check_window_bell(struct session *, struct window *, ! struct window_pane *); int server_check_window_activity(struct session *, struct window *); int server_check_window_content(struct session *, struct window *, --- 55,61 ---- struct client *server_accept_client(int); void server_handle_client(struct client *); void server_handle_window(struct window *, struct window_pane *); ! int server_check_window_bell(struct session *, struct window *); int server_check_window_activity(struct session *, struct window *); int server_check_window_content(struct session *, struct window *, *************** *** 909,915 **** if (s == NULL || !session_has(s, w)) continue; ! update += server_check_window_bell(s, w, wp); update += server_check_window_activity(s, w); update += server_check_window_content(s, w, wp); } --- 908,914 ---- if (s == NULL || !session_has(s, w)) continue; ! update += server_check_window_bell(s, w); update += server_check_window_activity(s, w); update += server_check_window_content(s, w, wp); } *************** *** 920,931 **** } int ! server_check_window_bell( ! struct session *s, struct window *w, struct window_pane *wp) { struct client *c; u_int i; ! int action; if (!(w->flags & WINDOW_BELL)) return (0); --- 919,929 ---- } int ! server_check_window_bell(struct session *s, struct window *w) { struct client *c; u_int i; ! int action, visual; if (!(w->flags & WINDOW_BELL)) return (0); *************** *** 938,956 **** case BELL_ANY: if (s->flags & SESSION_UNATTACHED) break; for (i = 0; i < ARRAY_LENGTH(&clients); i++) { c = ARRAY_ITEM(&clients, i); ! if (c != NULL && c->session == s) tty_putcode(&c->tty, TTYC_BEL); } break; case BELL_CURRENT: ! if (w->active != wp) break; for (i = 0; i < ARRAY_LENGTH(&clients); i++) { c = ARRAY_ITEM(&clients, i); ! if (c != NULL && c->session == s) tty_putcode(&c->tty, TTYC_BEL); } break; } --- 936,973 ---- case BELL_ANY: if (s->flags & SESSION_UNATTACHED) break; + visual = options_get_number(&s->options, "visual-bell"); for (i = 0; i < ARRAY_LENGTH(&clients); i++) { c = ARRAY_ITEM(&clients, i); ! if (c == NULL || c->session != s) ! continue; ! if (!visual) { tty_putcode(&c->tty, TTYC_BEL); + continue; + } + if (c->session->curw->window == w) { + status_message_set(c, "Bell in current window"); + continue; + } + status_message_set(c, "Bell in window %u", + winlink_find_by_window(&s->windows, w)->idx); } break; case BELL_CURRENT: ! if (s->flags & SESSION_UNATTACHED) break; + visual = options_get_number(&s->options, "visual-bell"); for (i = 0; i < ARRAY_LENGTH(&clients); i++) { c = ARRAY_ITEM(&clients, i); ! if (c == NULL || c->session != s) ! continue; ! if (c->session->curw->window != w) ! continue; ! if (!visual) { tty_putcode(&c->tty, TTYC_BEL); + continue; + } + status_message_set(c, "Bell in current window"); } break; } *************** *** 960,972 **** --- 977,1009 ---- int server_check_window_activity(struct session *s, struct window *w) { + struct client *c; + u_int i; + if (!(w->flags & WINDOW_ACTIVITY)) return (0); + if (!options_get_number(&w->options, "monitor-activity")) return (0); + if (session_alert_has_window(s, w, WINDOW_ACTIVITY)) return (0); + if (s->curw->window == w) + return (0); + session_alert_add(s, w, WINDOW_ACTIVITY); + if (s->flags & SESSION_UNATTACHED) + return (0); + if (options_get_number(&s->options, "visual-activity")) { + for (i = 0; i < ARRAY_LENGTH(&clients); i++) { + c = ARRAY_ITEM(&clients, i); + if (c == NULL || c->session != s) + continue; + status_message_set(c, "Activity in window %u", + winlink_find_by_window(&s->windows, w)->idx); + } + } + return (1); } *************** *** 974,993 **** server_check_window_content( struct session *s, struct window *w, struct window_pane *wp) { ! char *found, *ptr; ! if (!(w->flags & WINDOW_CONTENT)) return (0); ! if ((ptr = options_get_string(&w->options, "monitor-content")) == NULL) ! return (0); ! if (*ptr == '\0') ! return (0); if (session_alert_has_window(s, w, WINDOW_CONTENT)) return (0); if ((found = window_pane_search(wp, ptr, NULL)) == NULL) return (0); - session_alert_add(s, w, WINDOW_CONTENT); xfree(found); return (1); } --- 1011,1049 ---- server_check_window_content( struct session *s, struct window *w, struct window_pane *wp) { ! struct client *c; ! u_int i; ! char *found, *ptr; ! ! if (!(w->flags & WINDOW_ACTIVITY)) /* activity for new content */ ! return (0); ! ptr = options_get_string(&w->options, "monitor-content"); ! if (ptr == NULL || *ptr == '\0') return (0); ! if (session_alert_has_window(s, w, WINDOW_CONTENT)) return (0); + if (s->curw->window == w) + return (0); + if ((found = window_pane_search(wp, ptr, NULL)) == NULL) return (0); xfree(found); + + session_alert_add(s, w, WINDOW_CONTENT); + if (s->flags & SESSION_UNATTACHED) + return (0); + if (options_get_number(&s->options, "visual-content")) { + for (i = 0; i < ARRAY_LENGTH(&clients); i++) { + c = ARRAY_ITEM(&clients, i); + if (c == NULL || c->session != s) + continue; + status_message_set(c, "Content in window %u", + winlink_find_by_window(&s->windows, w)->idx); + } + } + return (1); }