summaryrefslogtreecommitdiff
path: root/usr.bin/tmux
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@cvs.openbsd.org>2015-08-28 16:10:47 +0000
committerNicholas Marriott <nicm@cvs.openbsd.org>2015-08-28 16:10:47 +0000
commit1cabce8d4e4ba00fcf1bf674b12c52d037f21852 (patch)
tree053846e02cfdce4f4e7a5c072c3b37559edf9d96 /usr.bin/tmux
parentdfb48d71786eb399c3c1e45e69d14f2144d90956 (diff)
Revert previous; we do need a timer, until I have a better idea. We
can't do the name check every loop, because that is too expensive, and we can't make sure it only happens infrequently because we have no idea when the next change will happen.
Diffstat (limited to 'usr.bin/tmux')
-rw-r--r--usr.bin/tmux/cmd-set-option.c6
-rw-r--r--usr.bin/tmux/names.c34
-rw-r--r--usr.bin/tmux/server-window.c3
-rw-r--r--usr.bin/tmux/tmux.h5
-rw-r--r--usr.bin/tmux/window.c7
5 files changed, 40 insertions, 15 deletions
diff --git a/usr.bin/tmux/cmd-set-option.c b/usr.bin/tmux/cmd-set-option.c
index ed50d855979..5f4461f6063 100644
--- a/usr.bin/tmux/cmd-set-option.c
+++ b/usr.bin/tmux/cmd-set-option.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd-set-option.c,v 1.79 2015/08/28 15:51:48 nicm Exp $ */
+/* $OpenBSD: cmd-set-option.c,v 1.80 2015/08/28 16:10:46 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -180,7 +180,9 @@ cmd_set_option_exec(struct cmd *self, struct cmd_q *cmdq)
if (strcmp(oe->name, "automatic-rename") == 0) {
RB_FOREACH(w, windows, &windows) {
if (options_get_number(&w->options, "automatic-rename"))
- w->active->flags |= PANE_CHANGED;
+ queue_window_name(w);
+ else if (event_initialized(&w->name_timer))
+ evtimer_del(&w->name_timer);
}
}
if (strcmp(oe->name, "status") == 0 ||
diff --git a/usr.bin/tmux/names.c b/usr.bin/tmux/names.c
index c407d1d67a2..8491adf5da1 100644
--- a/usr.bin/tmux/names.c
+++ b/usr.bin/tmux/names.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: names.c,v 1.27 2015/08/28 15:51:48 nicm Exp $ */
+/* $OpenBSD: names.c,v 1.28 2015/08/28 16:10:46 nicm Exp $ */
/*
* Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -25,16 +25,37 @@
#include "tmux.h"
+void window_name_callback(unused int, unused short, void *);
+
+void
+queue_window_name(struct window *w)
+{
+ struct timeval tv;
+
+ tv.tv_sec = 0;
+ tv.tv_usec = NAME_INTERVAL * 1000L;
+
+ if (event_initialized(&w->name_timer))
+ evtimer_del(&w->name_timer);
+ evtimer_set(&w->name_timer, window_name_callback, w);
+ evtimer_add(&w->name_timer, &tv);
+}
+
void
-check_window_name(struct window *w)
+window_name_callback(unused int fd, unused short events, void *data)
{
- char *name;
+ struct window *w = data;
+ char *name;
if (w->active == NULL)
return;
- if (!options_get_number(&w->options, "automatic-rename"))
+ if (!options_get_number(&w->options, "automatic-rename")) {
+ if (event_initialized(&w->name_timer))
+ event_del(&w->name_timer);
return;
+ }
+ queue_window_name(w);
if (~w->active->flags & PANE_CHANGED)
return;
@@ -42,12 +63,9 @@ check_window_name(struct window *w)
name = format_window_name(w);
if (strcmp(name, w->name) != 0) {
- log_debug("@%u new name %s (was %s)", w->id, name, w->name);
window_set_name(w, name);
server_status_window(w);
- } else
- log_debug("@%u name not changed (still %s)", w->id, w->name);
-
+ }
free(name);
}
diff --git a/usr.bin/tmux/server-window.c b/usr.bin/tmux/server-window.c
index 5c9102e2d7d..e3536aee87e 100644
--- a/usr.bin/tmux/server-window.c
+++ b/usr.bin/tmux/server-window.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: server-window.c,v 1.37 2015/08/28 15:51:48 nicm Exp $ */
+/* $OpenBSD: server-window.c,v 1.38 2015/08/28 16:10:46 nicm Exp $ */
/*
* Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -49,7 +49,6 @@ server_window_loop(void)
server_status_session(s);
}
}
- check_window_name(w);
}
}
diff --git a/usr.bin/tmux/tmux.h b/usr.bin/tmux/tmux.h
index 781f5fda6a2..c2ad6ad0818 100644
--- a/usr.bin/tmux/tmux.h
+++ b/usr.bin/tmux/tmux.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: tmux.h,v 1.538 2015/08/28 15:51:48 nicm Exp $ */
+/* $OpenBSD: tmux.h,v 1.539 2015/08/28 16:10:46 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -870,6 +870,7 @@ RB_HEAD(window_pane_tree, window_pane);
struct window {
u_int id;
char *name;
+ struct event name_timer;
struct timeval silence_timer;
struct timeval activity_time;
@@ -2208,7 +2209,7 @@ void window_choose_collapse_all(struct window_pane *);
void window_choose_set_current(struct window_pane *, u_int);
/* names.c */
-void check_window_name(struct window *);
+void queue_window_name(struct window *);
char *default_window_name(struct window *);
char *format_window_name(struct window *);
char *parse_window_name(const char *);
diff --git a/usr.bin/tmux/window.c b/usr.bin/tmux/window.c
index db1cb28743e..946facedb0d 100644
--- a/usr.bin/tmux/window.c
+++ b/usr.bin/tmux/window.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: window.c,v 1.138 2015/08/28 15:51:48 nicm Exp $ */
+/* $OpenBSD: window.c,v 1.139 2015/08/28 16:10:46 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -299,6 +299,8 @@ window_create1(u_int sx, u_int sy)
fatal("gettimeofday failed");
options_init(&w->options, &global_w_options);
+ if (options_get_number(&w->options, "automatic-rename"))
+ queue_window_name(w);
w->references = 0;
@@ -347,6 +349,9 @@ window_destroy(struct window *w)
layout_free_cell(w->saved_layout_root);
free(w->old_layout);
+ if (event_initialized(&w->name_timer))
+ evtimer_del(&w->name_timer);
+
options_free(&w->options);
window_destroy_panes(w);