aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac7
-rw-r--r--server-fn.c3
-rw-r--r--tmux.h4
-rw-r--r--window.c11
4 files changed, 25 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
index fec79043..05286d3d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -144,6 +144,13 @@ if test "x$found_curses" = xno; then
AC_MSG_ERROR("curses not found")
fi
+# Look for utempter
+AC_CHECK_HEADER(utempter.h, have_utempter=yes, have_utempter=no)
+if test "x$have_utempter" = xyes; then
+ AC_DEFINE(HAVE_UTEMPTER)
+ LIBS="$LIBS -lutempter"
+fi
+
# Check for b64_ntop.
AC_MSG_CHECKING(for b64_ntop)
AC_TRY_LINK(
diff --git a/server-fn.c b/server-fn.c
index a00cadbd..30626984 100644
--- a/server-fn.c
+++ b/server-fn.c
@@ -361,6 +361,9 @@ server_destroy_pane(struct window_pane *wp)
old_fd = wp->fd;
if (wp->fd != -1) {
+#ifdef HAVE_UTEMPTER
+ utempter_remove_record(wp->fd);
+#endif
bufferevent_free(wp->event);
close(wp->fd);
wp->fd = -1;
diff --git a/tmux.h b/tmux.h
index 7d5f230b..ec5cf55f 100644
--- a/tmux.h
+++ b/tmux.h
@@ -32,6 +32,10 @@
#include <stdio.h>
#include <termios.h>
+#ifdef HAVE_UTEMPTER
+#include <utempter.h>
+#endif
+
#include "array.h"
#include "compat.h"
diff --git a/window.c b/window.c
index f41b58d0..70530450 100644
--- a/window.c
+++ b/window.c
@@ -779,6 +779,9 @@ window_pane_destroy(struct window_pane *wp)
evtimer_del(&wp->changes_timer);
if (wp->fd != -1) {
+#ifdef HAVE_UTEMPTER
+ utempter_remove_record(wp->fd);
+#endif
bufferevent_free(wp->event);
close(wp->fd);
}
@@ -810,6 +813,9 @@ window_pane_spawn(struct window_pane *wp, const char *cmd, const char *shell,
char *argv0, paneid[16];
const char *ptr;
struct termios tio2;
+#ifdef HAVE_UTEMPTER
+ char s[32];
+#endif
if (wp->fd != -1) {
bufferevent_free(wp->event);
@@ -886,6 +892,11 @@ window_pane_spawn(struct window_pane *wp, const char *cmd, const char *shell,
fatal("execl failed");
}
+#ifdef HAVE_UTEMPTER
+ xsnprintf(s, sizeof s, "tmux(%lu):%%%u", (long) getpid(), wp->id);
+ utempter_add_record(wp->fd, s);
+#endif
+
setblocking(wp->fd, 0);
wp->event = bufferevent_new(wp->fd,