diff --git a/CHANGELOG.md b/CHANGELOG.md index 959c03d0..6707efa1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -43,6 +43,7 @@ on the wrap around. * Selection handling when viewport wrapped around. * Restore signal mask in the slave process. +* Set `IUTF8`. ### Security diff --git a/slave.c b/slave.c index 26ccdf6f..30b5c4d9 100644 --- a/slave.c +++ b/slave.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include @@ -99,6 +100,19 @@ slave_exec(int ptmx, char *argv[], int err_fd, bool login_shell) goto err; } + { + struct termios flags; + if (tcgetattr(pts, &flags) < 0) { + LOG_ERRNO("failed to get terminal attributes"); + goto err; + } + + flags.c_iflag |= IUTF8; + if (tcsetattr(pts, TCSANOW, &flags) < 0) { + LOG_ERRNO("failed to set IUTF8 terminal attribute"); + goto err; + } + } if (dup2(pts, STDIN_FILENO) == -1 || dup2(pts, STDOUT_FILENO) == -1 ||