Add a utmp option if built with utempter, GitHub issue 5657 from Damian Nowak.

This commit is contained in:
Nicholas Marriott
2026-10-09 13:18:05 +01:00
parent 10c744038f
commit b7fd92b782
7 changed files with 81 additions and 17 deletions

View File

@@ -1579,6 +1579,46 @@ window_pane_scrollbar_redraw_visibility(struct window_pane *wp)
server_redraw_window(wp->window);
}
#ifdef HAVE_UTEMPTER
void
window_pane_utmp_add(struct window_pane *wp)
{
char *cp;
if (wp->fd == -1 ||
(wp->flags & (PANE_EMPTY|PANE_EXITED|PANE_UTMP)) ||
!options_get_number(global_options, "utmp"))
return;
xasprintf(&cp, "tmux(%lu).%%%u", (long)getpid(), wp->id);
utempter_add_record(wp->fd, cp);
kill(getpid(), SIGCHLD);
wp->flags |= PANE_UTMP;
free(cp);
}
#else
void
window_pane_utmp_add(__unused struct window_pane *wp)
{
}
#endif
#ifdef HAVE_UTEMPTER
void
window_pane_utmp_remove(struct window_pane *wp)
{
if (~wp->flags & PANE_UTMP)
return;
utempter_remove_record(wp->fd);
kill(getpid(), SIGCHLD);
wp->flags &= ~PANE_UTMP;
}
#else
void
window_pane_utmp_remove(__unused struct window_pane *wp)
{
}
#endif
static void
window_pane_destroy(struct window_pane *wp)
{
@@ -1597,10 +1637,7 @@ window_pane_destroy(struct window_pane *wp)
wp->event = NULL;
}
if (wp->fd != -1) {
#ifdef HAVE_UTEMPTER
utempter_remove_record(wp->fd);
kill(getpid(), SIGCHLD);
#endif
window_pane_utmp_remove(wp);
close(wp->fd);
wp->fd = -1;
}