mirror of
https://github.com/tmux/tmux.git
synced 2025-12-21 14:56:05 +00:00
Merge branch 'obsd-master'
This commit is contained in:
@@ -123,6 +123,26 @@ const char window_clock_table[14][5][5] = {
|
|||||||
{ 1,0,0,0,1 } },
|
{ 1,0,0,0,1 } },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
window_clock_start_timer(struct window_mode_entry *wme)
|
||||||
|
{
|
||||||
|
struct window_clock_mode_data *data = wme->data;
|
||||||
|
struct timeval tv;
|
||||||
|
struct timespec ts;
|
||||||
|
long delay;
|
||||||
|
|
||||||
|
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 void
|
static void
|
||||||
window_clock_timer_callback(__unused int fd, __unused short events, void *arg)
|
window_clock_timer_callback(__unused int fd, __unused short events, void *arg)
|
||||||
{
|
{
|
||||||
@@ -131,23 +151,20 @@ window_clock_timer_callback(__unused int fd, __unused short events, void *arg)
|
|||||||
struct window_clock_mode_data *data = wme->data;
|
struct window_clock_mode_data *data = wme->data;
|
||||||
struct tm now, then;
|
struct tm now, then;
|
||||||
time_t t;
|
time_t t;
|
||||||
struct timeval tv = { .tv_sec = 1 };
|
|
||||||
|
|
||||||
evtimer_del(&data->timer);
|
evtimer_del(&data->timer);
|
||||||
evtimer_add(&data->timer, &tv);
|
|
||||||
|
|
||||||
if (TAILQ_FIRST(&wp->modes) != wme)
|
|
||||||
return;
|
|
||||||
|
|
||||||
t = time(NULL);
|
t = time(NULL);
|
||||||
gmtime_r(&t, &now);
|
gmtime_r(&t, &now);
|
||||||
gmtime_r(&data->tim, &then);
|
gmtime_r(&data->tim, &then);
|
||||||
if (now.tm_sec == then.tm_sec)
|
|
||||||
return;
|
|
||||||
data->tim = t;
|
|
||||||
|
|
||||||
window_clock_draw_screen(wme);
|
if (now.tm_sec != then.tm_sec) {
|
||||||
wp->flags |= PANE_REDRAW;
|
data->tim = t;
|
||||||
|
window_clock_draw_screen(wme);
|
||||||
|
wp->flags |= PANE_REDRAW;
|
||||||
|
}
|
||||||
|
|
||||||
|
window_clock_start_timer(wme);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct screen *
|
static struct screen *
|
||||||
@@ -157,13 +174,12 @@ window_clock_init(struct window_mode_entry *wme,
|
|||||||
struct window_pane *wp = wme->wp;
|
struct window_pane *wp = wme->wp;
|
||||||
struct window_clock_mode_data *data;
|
struct window_clock_mode_data *data;
|
||||||
struct screen *s;
|
struct screen *s;
|
||||||
struct timeval tv = { .tv_sec = 1 };
|
|
||||||
|
|
||||||
wme->data = data = xmalloc(sizeof *data);
|
wme->data = data = xmalloc(sizeof *data);
|
||||||
data->tim = time(NULL);
|
data->tim = time(NULL);
|
||||||
|
|
||||||
evtimer_set(&data->timer, window_clock_timer_callback, wme);
|
evtimer_set(&data->timer, window_clock_timer_callback, wme);
|
||||||
evtimer_add(&data->timer, &tv);
|
window_clock_start_timer(wme);
|
||||||
|
|
||||||
s = &data->screen;
|
s = &data->screen;
|
||||||
screen_init(s, screen_size_x(&wp->base), screen_size_y(&wp->base), 0);
|
screen_init(s, screen_size_x(&wp->base), screen_size_y(&wp->base), 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user