diff --git a/options-table.c b/options-table.c index 4b2f40bc..4a385051 100644 --- a/options-table.c +++ b/options-table.c @@ -98,6 +98,11 @@ const struct options_table_entry session_options_table[] = { .default_num = BELL_ANY }, + { .name = "bell-on-alert", + .type = OPTIONS_TABLE_FLAG, + .default_num = 0 + }, + { .name = "default-command", .type = OPTIONS_TABLE_STRING, .default_str = "" diff --git a/server-window.c b/server-window.c index b081355c..b444982d 100644 --- a/server-window.c +++ b/server-window.c @@ -28,6 +28,7 @@ int server_window_check_activity(struct session *, struct winlink *); int server_window_check_silence(struct session *, struct winlink *); int server_window_check_content( struct session *, struct winlink *, struct window_pane *); +void ring_bell(struct session *); /* Window functions that need to happen every loop. */ void @@ -134,6 +135,8 @@ server_window_check_activity(struct session *s, struct winlink *wl) if (!options_get_number(&w->options, "monitor-activity")) return (0); + if (options_get_number(&s->options, "bell-on-alert")) + ring_bell(s); wl->flags |= WINLINK_ACTIVITY; if (options_get_number(&s->options, "visual-activity")) { @@ -183,6 +186,9 @@ server_window_check_silence(struct session *s, struct winlink *wl) timer_difference = timer.tv_sec - w->silence_timer.tv_sec; if (timer_difference <= silence_interval) return (0); + + if (options_get_number(&s->options, "bell-on-alert")) + ring_bell(s); wl->flags |= WINLINK_SILENCE; if (options_get_number(&s->options, "visual-silence")) { @@ -221,6 +227,8 @@ server_window_check_content( return (0); xfree(found); + if (options_get_number(&s->options, "bell-on-alert")) + ring_bell(s); wl->flags |= WINLINK_CONTENT; if (options_get_number(&s->options, "visual-content")) { @@ -235,3 +243,17 @@ server_window_check_content( return (1); } + +/* Ring terminal bell. */ +void +ring_bell(struct session *s) +{ + struct client *c; + u_int i; + + 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); + } +} diff --git a/tmux.1 b/tmux.1 index 60d900a3..69ea5819 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1779,6 +1779,11 @@ window of that session, means all bells are ignored and .Ic current means only bell in windows other than the current window are ignored. +.It Xo Ic bell-on-alert +.Op Ic on | off +.Xc +If on, ring the terminal bell when an activity, content or silence alert +occurs. .It Ic default-command Ar shell-command Set the command used for new windows (if not specified when the window is created) to