mirror of
https://github.com/tmux/tmux.git
synced 2025-12-20 00:01:17 -05:00
Merge 986e621a504fe8d5083105980f3e99e845b6fccd into d2c7668bc241a93732229328dc2cebc0df41549f
This commit is contained in:
commit
5404ecd86e
@ -131,23 +131,33 @@ window_clock_timer_callback(__unused int fd, __unused short events, void *arg)
|
||||
struct window_clock_mode_data *data = wme->data;
|
||||
struct tm now, then;
|
||||
time_t t;
|
||||
struct timeval tv = { .tv_sec = 1 };
|
||||
struct timeval tv;
|
||||
struct timespec ts;
|
||||
long delay;
|
||||
|
||||
evtimer_del(&data->timer);
|
||||
evtimer_add(&data->timer, &tv);
|
||||
|
||||
if (TAILQ_FIRST(&wp->modes) != wme)
|
||||
return;
|
||||
|
||||
t = time(NULL);
|
||||
gmtime_r(&t, &now);
|
||||
gmtime_r(&data->tim, &then);
|
||||
if (now.tm_sec == then.tm_sec)
|
||||
return;
|
||||
data->tim = t;
|
||||
|
||||
if (now.tm_sec != then.tm_sec) {
|
||||
data->tim = t;
|
||||
window_clock_draw_screen(wme);
|
||||
wp->flags |= PANE_REDRAW;
|
||||
}
|
||||
|
||||
window_clock_draw_screen(wme);
|
||||
wp->flags |= PANE_REDRAW;
|
||||
clock_gettime(CLOCK_REALTIME, &ts);
|
||||
delay = 1000000 - (ts.tv_nsec / 1000);
|
||||
tv.tv_sec = delay / 1000000;
|
||||
tv.tv_usec = delay % 1000000;
|
||||
|
||||
if (tv.tv_sec < 0 || (tv.tv_sec == 0 && tv.tv_usec <= 0)) {
|
||||
tv.tv_sec = 1;
|
||||
tv.tv_usec = 0;
|
||||
}
|
||||
|
||||
evtimer_add(&data->timer, &tv);
|
||||
}
|
||||
|
||||
static struct screen *
|
||||
@ -157,12 +167,25 @@ window_clock_init(struct window_mode_entry *wme,
|
||||
struct window_pane *wp = wme->wp;
|
||||
struct window_clock_mode_data *data;
|
||||
struct screen *s;
|
||||
struct timeval tv = { .tv_sec = 1 };
|
||||
struct timeval tv;
|
||||
struct timespec ts;
|
||||
long delay;
|
||||
|
||||
wme->data = data = xmalloc(sizeof *data);
|
||||
data->tim = time(NULL);
|
||||
|
||||
evtimer_set(&data->timer, window_clock_timer_callback, wme);
|
||||
|
||||
clock_gettime(CLOCK_REALTIME, &ts);
|
||||
delay = 1000000 - (ts.tv_nsec / 1000);
|
||||
tv.tv_sec = delay / 1000000;
|
||||
tv.tv_usec = delay % 1000000;
|
||||
|
||||
if (tv.tv_sec < 0 || (tv.tv_sec == 0 && tv.tv_usec <= 0)) {
|
||||
tv.tv_sec = 1;
|
||||
tv.tv_usec = 0;
|
||||
}
|
||||
|
||||
evtimer_add(&data->timer, &tv);
|
||||
|
||||
s = &data->screen;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user