mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 8.1.0824: SunOS/Solaris has a problem with ttys
Problem: SunOS/Solaris has a problem with ttys. Solution: Add mch_isatty() with extra handling for SunOS. (Ozaki Kiichi, closes #3865)
This commit is contained in:
2
src/auto/configure
vendored
2
src/auto/configure
vendored
@@ -11131,7 +11131,7 @@ for ac_header in stdint.h stdlib.h string.h \
|
|||||||
unistd.h stropts.h errno.h sys/resource.h \
|
unistd.h stropts.h errno.h sys/resource.h \
|
||||||
sys/systeminfo.h locale.h sys/stream.h termios.h \
|
sys/systeminfo.h locale.h sys/stream.h termios.h \
|
||||||
libc.h sys/statfs.h poll.h sys/poll.h pwd.h \
|
libc.h sys/statfs.h poll.h sys/poll.h pwd.h \
|
||||||
utime.h sys/param.h libintl.h libgen.h \
|
utime.h sys/param.h sys/ptms.h libintl.h libgen.h \
|
||||||
util/debug.h util/msg18n.h frame.h sys/acl.h \
|
util/debug.h util/msg18n.h frame.h sys/acl.h \
|
||||||
sys/access.h sys/sysinfo.h wchar.h wctype.h
|
sys/access.h sys/sysinfo.h wchar.h wctype.h
|
||||||
do :
|
do :
|
||||||
|
@@ -1048,7 +1048,7 @@ channel_set_pipes(channel_T *channel, sock_T in, sock_T out, sock_T err)
|
|||||||
# if defined(UNIX)
|
# if defined(UNIX)
|
||||||
/* Do not end the job when all output channels are closed, wait until
|
/* Do not end the job when all output channels are closed, wait until
|
||||||
* the job ended. */
|
* the job ended. */
|
||||||
if (isatty(in))
|
if (mch_isatty(in))
|
||||||
channel->ch_to_be_closed |= (1U << PART_IN);
|
channel->ch_to_be_closed |= (1U << PART_IN);
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
|
@@ -258,6 +258,7 @@
|
|||||||
#undef HAVE_SYS_PARAM_H
|
#undef HAVE_SYS_PARAM_H
|
||||||
#undef HAVE_SYS_POLL_H
|
#undef HAVE_SYS_POLL_H
|
||||||
#undef HAVE_SYS_PTEM_H
|
#undef HAVE_SYS_PTEM_H
|
||||||
|
#undef HAVE_SYS_PTMS_H
|
||||||
#undef HAVE_SYS_RESOURCE_H
|
#undef HAVE_SYS_RESOURCE_H
|
||||||
#undef HAVE_SYS_SELECT_H
|
#undef HAVE_SYS_SELECT_H
|
||||||
#undef HAVE_SYS_STATFS_H
|
#undef HAVE_SYS_STATFS_H
|
||||||
|
@@ -3265,7 +3265,7 @@ AC_CHECK_HEADERS(stdint.h stdlib.h string.h \
|
|||||||
unistd.h stropts.h errno.h sys/resource.h \
|
unistd.h stropts.h errno.h sys/resource.h \
|
||||||
sys/systeminfo.h locale.h sys/stream.h termios.h \
|
sys/systeminfo.h locale.h sys/stream.h termios.h \
|
||||||
libc.h sys/statfs.h poll.h sys/poll.h pwd.h \
|
libc.h sys/statfs.h poll.h sys/poll.h pwd.h \
|
||||||
utime.h sys/param.h libintl.h libgen.h \
|
utime.h sys/param.h sys/ptms.h libintl.h libgen.h \
|
||||||
util/debug.h util/msg18n.h frame.h sys/acl.h \
|
util/debug.h util/msg18n.h frame.h sys/acl.h \
|
||||||
sys/access.h sys/sysinfo.h wchar.h wctype.h)
|
sys/access.h sys/sysinfo.h wchar.h wctype.h)
|
||||||
|
|
||||||
|
129
src/os_unix.c
129
src/os_unix.c
@@ -338,7 +338,9 @@ mch_chdir(char *path)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Why is NeXT excluded here (and not in os_unixx.h)? */
|
/* Why is NeXT excluded here (and not in os_unixx.h)? */
|
||||||
#if defined(ECHOE) && defined(ICANON) && (defined(HAVE_TERMIO_H) || defined(HAVE_TERMIOS_H)) && !defined(__NeXT__)
|
#if defined(ECHOE) && defined(ICANON) \
|
||||||
|
&& (defined(HAVE_TERMIO_H) || defined(HAVE_TERMIOS_H)) \
|
||||||
|
&& !defined(__NeXT__)
|
||||||
# define NEW_TTY_SYSTEM
|
# define NEW_TTY_SYSTEM
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -3448,6 +3450,58 @@ may_core_dump(void)
|
|||||||
|
|
||||||
#ifndef VMS
|
#ifndef VMS
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get the file descriptor to use for tty operations.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
get_tty_fd(int fd)
|
||||||
|
{
|
||||||
|
int tty_fd = fd;
|
||||||
|
|
||||||
|
#if defined(HAVE_SVR4_PTYS) && defined(SUN_SYSTEM)
|
||||||
|
// On SunOS: Get the terminal parameters from "fd", or the slave device of
|
||||||
|
// "fd" when it is a master device.
|
||||||
|
if (mch_isatty(fd) > 1)
|
||||||
|
{
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
name = ptsname(fd);
|
||||||
|
if (name == NULL)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
tty_fd = open(name, O_RDONLY | O_NOCTTY | O_EXTRA, 0);
|
||||||
|
if (tty_fd < 0)
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return tty_fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
mch_tcgetattr(int fd, void *term)
|
||||||
|
{
|
||||||
|
int tty_fd;
|
||||||
|
int retval = -1;
|
||||||
|
|
||||||
|
tty_fd = get_tty_fd(fd);
|
||||||
|
if (tty_fd >= 0)
|
||||||
|
{
|
||||||
|
#ifdef NEW_TTY_SYSTEM
|
||||||
|
# ifdef HAVE_TERMIOS_H
|
||||||
|
retval = tcgetattr(tty_fd, (struct termios *)term);
|
||||||
|
# else
|
||||||
|
retval = ioctl(tty_fd, TCGETA, (struct termio *)term);
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
// for "old" tty systems
|
||||||
|
retval = ioctl(tty_fd, TIOCGETP, (struct sgttyb *)term);
|
||||||
|
#endif
|
||||||
|
if (tty_fd != fd)
|
||||||
|
close(tty_fd);
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
mch_settmode(int tmode)
|
mch_settmode(int tmode)
|
||||||
{
|
{
|
||||||
@@ -3465,11 +3519,7 @@ mch_settmode(int tmode)
|
|||||||
if (first)
|
if (first)
|
||||||
{
|
{
|
||||||
first = FALSE;
|
first = FALSE;
|
||||||
# if defined(HAVE_TERMIOS_H)
|
mch_tcgetattr(read_cmd_fd, &told);
|
||||||
tcgetattr(read_cmd_fd, &told);
|
|
||||||
# else
|
|
||||||
ioctl(read_cmd_fd, TCGETA, &told);
|
|
||||||
# endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tnew = told;
|
tnew = told;
|
||||||
@@ -3527,7 +3577,7 @@ mch_settmode(int tmode)
|
|||||||
if (first)
|
if (first)
|
||||||
{
|
{
|
||||||
first = FALSE;
|
first = FALSE;
|
||||||
ioctl(read_cmd_fd, TIOCGETP, &ttybold);
|
mch_tcgetattr(read_cmd_fd, &ttybold);
|
||||||
}
|
}
|
||||||
|
|
||||||
ttybnew = ttybold;
|
ttybnew = ttybold;
|
||||||
@@ -3587,13 +3637,7 @@ get_tty_info(int fd, ttyinfo_T *info)
|
|||||||
struct termio keys;
|
struct termio keys;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
if (
|
if (mch_tcgetattr(fd, &keys) != -1)
|
||||||
# if defined(HAVE_TERMIOS_H)
|
|
||||||
tcgetattr(fd, &keys) != -1
|
|
||||||
# else
|
|
||||||
ioctl(fd, TCGETA, &keys) != -1
|
|
||||||
# endif
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
info->backspace = keys.c_cc[VERASE];
|
info->backspace = keys.c_cc[VERASE];
|
||||||
info->interrupt = keys.c_cc[VINTR];
|
info->interrupt = keys.c_cc[VINTR];
|
||||||
@@ -3611,7 +3655,7 @@ get_tty_info(int fd, ttyinfo_T *info)
|
|||||||
/* for "old" tty systems */
|
/* for "old" tty systems */
|
||||||
struct sgttyb keys;
|
struct sgttyb keys;
|
||||||
|
|
||||||
if (ioctl(fd, TIOCGETP, &keys) != -1)
|
if (mch_tcgetattr(fd, &keys) != -1)
|
||||||
{
|
{
|
||||||
info->backspace = keys.sg_erase;
|
info->backspace = keys.sg_erase;
|
||||||
info->interrupt = keys.sg_kill;
|
info->interrupt = keys.sg_kill;
|
||||||
@@ -4070,34 +4114,35 @@ mch_get_shellsize(void)
|
|||||||
int
|
int
|
||||||
mch_report_winsize(int fd, int rows, int cols)
|
mch_report_winsize(int fd, int rows, int cols)
|
||||||
{
|
{
|
||||||
# ifdef TIOCSWINSZ
|
int tty_fd;
|
||||||
struct winsize ws;
|
int retval = -1;
|
||||||
|
|
||||||
ws.ws_col = cols;
|
tty_fd = get_tty_fd(fd);
|
||||||
ws.ws_row = rows;
|
if (tty_fd >= 0)
|
||||||
ws.ws_xpixel = cols * 5;
|
|
||||||
ws.ws_ypixel = rows * 10;
|
|
||||||
if (ioctl(fd, TIOCSWINSZ, &ws) == 0)
|
|
||||||
{
|
{
|
||||||
ch_log(NULL, "ioctl(TIOCSWINSZ) success");
|
# if defined(TIOCSWINSZ)
|
||||||
return OK;
|
struct winsize ws;
|
||||||
}
|
|
||||||
ch_log(NULL, "ioctl(TIOCSWINSZ) failed");
|
|
||||||
# else
|
|
||||||
# ifdef TIOCSSIZE
|
|
||||||
struct ttysize ts;
|
|
||||||
|
|
||||||
ts.ts_cols = cols;
|
ws.ws_col = cols;
|
||||||
ts.ts_lines = rows;
|
ws.ws_row = rows;
|
||||||
if (ioctl(fd, TIOCSSIZE, &ws) == 0)
|
ws.ws_xpixel = cols * 5;
|
||||||
{
|
ws.ws_ypixel = rows * 10;
|
||||||
ch_log(NULL, "ioctl(TIOCSSIZE) success");
|
retval = ioctl(tty_fd, TIOCSWINSZ, &ws);
|
||||||
return OK;
|
ch_log(NULL, "ioctl(TIOCSWINSZ) %s",
|
||||||
}
|
retval == 0 ? "success" : "failed");
|
||||||
ch_log(NULL, "ioctl(TIOCSSIZE) failed");
|
# elif defined(TIOCSSIZE)
|
||||||
# endif
|
struct ttysize ts;
|
||||||
|
|
||||||
|
ts.ts_cols = cols;
|
||||||
|
ts.ts_lines = rows;
|
||||||
|
retval = ioctl(tty_fd, TIOCSSIZE, &ts);
|
||||||
|
ch_log(NULL, "ioctl(TIOCSSIZE) %s",
|
||||||
|
retval == 0 ? "success" : "failed");
|
||||||
# endif
|
# endif
|
||||||
return FAIL;
|
if (tty_fd != fd)
|
||||||
|
close(tty_fd);
|
||||||
|
}
|
||||||
|
return retval == 0 ? OK : FAIL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -4273,7 +4318,7 @@ open_pty(int *pty_master_fd, int *pty_slave_fd, char_u **namep)
|
|||||||
{
|
{
|
||||||
char *tty_name;
|
char *tty_name;
|
||||||
|
|
||||||
*pty_master_fd = OpenPTY(&tty_name); /* open pty */
|
*pty_master_fd = mch_openpty(&tty_name); // open pty
|
||||||
if (*pty_master_fd >= 0)
|
if (*pty_master_fd >= 0)
|
||||||
{
|
{
|
||||||
/* Leaving out O_NOCTTY may lead to waitpid() always returning
|
/* Leaving out O_NOCTTY may lead to waitpid() always returning
|
||||||
@@ -4721,7 +4766,7 @@ mch_call_shell_fork(
|
|||||||
{
|
{
|
||||||
/* push stream discipline modules */
|
/* push stream discipline modules */
|
||||||
if (options & SHELL_COOKED)
|
if (options & SHELL_COOKED)
|
||||||
SetupSlavePTY(pty_slave_fd);
|
setup_slavepty(pty_slave_fd);
|
||||||
# ifdef TIOCSCTTY
|
# ifdef TIOCSCTTY
|
||||||
/* Try to become controlling tty (probably doesn't work,
|
/* Try to become controlling tty (probably doesn't work,
|
||||||
* unless run by root) */
|
* unless run by root) */
|
||||||
@@ -5579,7 +5624,7 @@ mch_job_start(char **argv, job_T *job, jobopt_T *options, int is_terminal)
|
|||||||
if (pty_slave_fd >= 0)
|
if (pty_slave_fd >= 0)
|
||||||
{
|
{
|
||||||
/* push stream discipline modules */
|
/* push stream discipline modules */
|
||||||
SetupSlavePTY(pty_slave_fd);
|
setup_slavepty(pty_slave_fd);
|
||||||
# ifdef TIOCSCTTY
|
# ifdef TIOCSCTTY
|
||||||
/* Try to become controlling tty (probably doesn't work,
|
/* Try to become controlling tty (probably doesn't work,
|
||||||
* unless run by root) */
|
* unless run by root) */
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
/* pty.c */
|
/* pty.c */
|
||||||
int SetupSlavePTY(int fd);
|
int setup_slavepty(int fd);
|
||||||
int OpenPTY(char **ttyn);
|
int mch_openpty(char **ttyn);
|
||||||
|
int mch_isatty(int fd);
|
||||||
/* vim: set ft=c : */
|
/* vim: set ft=c : */
|
||||||
|
66
src/pty.c
66
src/pty.c
@@ -56,16 +56,19 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HAVE_STROPTS_H
|
#if HAVE_STROPTS_H
|
||||||
#include <sys/types.h>
|
# include <sys/types.h>
|
||||||
#ifdef sinix
|
# ifdef sinix
|
||||||
#define buf_T __system_buf_t__
|
# define buf_T __system_buf_t__
|
||||||
#endif
|
# endif
|
||||||
#include <stropts.h>
|
# include <stropts.h>
|
||||||
#ifdef sinix
|
# ifdef sinix
|
||||||
#undef buf_T
|
# undef buf_T
|
||||||
#endif
|
# endif
|
||||||
# ifdef SUN_SYSTEM
|
# ifdef SUN_SYSTEM
|
||||||
# include <sys/conf.h>
|
# include <sys/conf.h>
|
||||||
|
# if defined(HAVE_SYS_PTMS_H) && defined(HAVE_SVR4_PTYS)
|
||||||
|
# include <sys/ptms.h>
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -155,11 +158,12 @@ initmaster(int f UNUSED)
|
|||||||
* pty on others. Needs to be tuned...
|
* pty on others. Needs to be tuned...
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
SetupSlavePTY(int fd)
|
setup_slavepty(int fd)
|
||||||
{
|
{
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
return 0;
|
return 0;
|
||||||
#if defined(I_PUSH) && defined(HAVE_SVR4_PTYS) && !defined(sgi) && !defined(linux) && !defined(__osf__) && !defined(M_UNIX)
|
#if defined(I_PUSH) && defined(HAVE_SVR4_PTYS) && !defined(sgi) \
|
||||||
|
&& !defined(linux) && !defined(__osf__) && !defined(M_UNIX)
|
||||||
# if defined(HAVE_SYS_PTEM_H) || defined(hpux)
|
# if defined(HAVE_SYS_PTEM_H) || defined(hpux)
|
||||||
if (ioctl(fd, I_PUSH, "ptem") != 0)
|
if (ioctl(fd, I_PUSH, "ptem") != 0)
|
||||||
return -1;
|
return -1;
|
||||||
@@ -178,7 +182,7 @@ SetupSlavePTY(int fd)
|
|||||||
#if defined(OSX) && !defined(PTY_DONE)
|
#if defined(OSX) && !defined(PTY_DONE)
|
||||||
#define PTY_DONE
|
#define PTY_DONE
|
||||||
int
|
int
|
||||||
OpenPTY(char **ttyn)
|
mch_openpty(char **ttyn)
|
||||||
{
|
{
|
||||||
int f;
|
int f;
|
||||||
static char TtyName[32];
|
static char TtyName[32];
|
||||||
@@ -195,7 +199,7 @@ OpenPTY(char **ttyn)
|
|||||||
&& !defined(PTY_DONE)
|
&& !defined(PTY_DONE)
|
||||||
#define PTY_DONE
|
#define PTY_DONE
|
||||||
int
|
int
|
||||||
OpenPTY(char **ttyn)
|
mch_openpty(char **ttyn)
|
||||||
{
|
{
|
||||||
char *m, *s;
|
char *m, *s;
|
||||||
int f;
|
int f;
|
||||||
@@ -219,7 +223,7 @@ OpenPTY(char **ttyn)
|
|||||||
#if defined(__sgi) && !defined(PTY_DONE)
|
#if defined(__sgi) && !defined(PTY_DONE)
|
||||||
#define PTY_DONE
|
#define PTY_DONE
|
||||||
int
|
int
|
||||||
OpenPTY(char **ttyn)
|
mch_openpty(char **ttyn)
|
||||||
{
|
{
|
||||||
int f;
|
int f;
|
||||||
char *name;
|
char *name;
|
||||||
@@ -244,7 +248,7 @@ OpenPTY(char **ttyn)
|
|||||||
#if defined(MIPS) && defined(HAVE_DEV_PTC) && !defined(PTY_DONE)
|
#if defined(MIPS) && defined(HAVE_DEV_PTC) && !defined(PTY_DONE)
|
||||||
#define PTY_DONE
|
#define PTY_DONE
|
||||||
int
|
int
|
||||||
OpenPTY(char **ttyn)
|
mch_openpty(char **ttyn)
|
||||||
{
|
{
|
||||||
int f;
|
int f;
|
||||||
stat_T buf;
|
stat_T buf;
|
||||||
@@ -272,7 +276,7 @@ OpenPTY(char **ttyn)
|
|||||||
* Same for Mac OS X Leopard (10.5). */
|
* Same for Mac OS X Leopard (10.5). */
|
||||||
#define PTY_DONE
|
#define PTY_DONE
|
||||||
int
|
int
|
||||||
OpenPTY(char **ttyn)
|
mch_openpty(char **ttyn)
|
||||||
{
|
{
|
||||||
int f;
|
int f;
|
||||||
char *m;
|
char *m;
|
||||||
@@ -313,7 +317,7 @@ int aixhack = -1;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
int
|
int
|
||||||
OpenPTY(char **ttyn)
|
mch_openpty(char **ttyn)
|
||||||
{
|
{
|
||||||
int f;
|
int f;
|
||||||
/* used for opening a new pty-pair: */
|
/* used for opening a new pty-pair: */
|
||||||
@@ -359,7 +363,7 @@ static char TtyProto[] = "/dev/ttyXY";
|
|||||||
# endif
|
# endif
|
||||||
|
|
||||||
int
|
int
|
||||||
OpenPTY(char **ttyn)
|
mch_openpty(char **ttyn)
|
||||||
{
|
{
|
||||||
char *p, *q, *l, *d;
|
char *p, *q, *l, *d;
|
||||||
int f;
|
int f;
|
||||||
@@ -410,4 +414,30 @@ OpenPTY(char **ttyn)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* FEAT_GUI || FEAT_TERMINAL */
|
/*
|
||||||
|
* Call isatty(fd), except for SunOS where it's done differently.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
mch_isatty(int fd)
|
||||||
|
{
|
||||||
|
# if defined(I_STR) && defined(HAVE_SYS_PTMS_H) && defined(HAVE_SVR4_PTYS) \
|
||||||
|
&& defined(SUN_SYSTEM)
|
||||||
|
// On SunOS, isatty() for /dev/ptmx returns false or sometimes can hang up
|
||||||
|
// in the inner ioctl(), and therefore first determine whether "fd" is a
|
||||||
|
// master device.
|
||||||
|
struct strioctl istr;
|
||||||
|
|
||||||
|
istr.ic_cmd = ISPTM;
|
||||||
|
istr.ic_timout = 0;
|
||||||
|
istr.ic_dp = NULL;
|
||||||
|
istr.ic_len = 0;
|
||||||
|
|
||||||
|
if (ioctl(fd, I_STR, &istr) == 0)
|
||||||
|
// Trick: return 2 in order to advice the caller that "fd" is a master
|
||||||
|
// device. cf. src/os_unix.c:get_tty_fd()
|
||||||
|
return 2;
|
||||||
|
# endif
|
||||||
|
return isatty(fd);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* FEAT_GUI || FEAT_JOB_CHANNEL */
|
||||||
|
@@ -873,7 +873,7 @@ get_tty_part(term_T *term)
|
|||||||
{
|
{
|
||||||
int fd = term->tl_job->jv_channel->ch_part[parts[i]].ch_fd;
|
int fd = term->tl_job->jv_channel->ch_part[parts[i]].ch_fd;
|
||||||
|
|
||||||
if (isatty(fd))
|
if (mch_isatty(fd))
|
||||||
return parts[i];
|
return parts[i];
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -2182,7 +2182,7 @@ terminal_loop(int blocking)
|
|||||||
* them for every typed character is a bit of overhead, but it's needed
|
* them for every typed character is a bit of overhead, but it's needed
|
||||||
* for the first character typed, e.g. when Vim starts in a shell.
|
* for the first character typed, e.g. when Vim starts in a shell.
|
||||||
*/
|
*/
|
||||||
if (isatty(tty_fd))
|
if (mch_isatty(tty_fd))
|
||||||
{
|
{
|
||||||
ttyinfo_T info;
|
ttyinfo_T info;
|
||||||
|
|
||||||
@@ -5882,7 +5882,7 @@ term_report_winsize(term_T *term, int rows, int cols)
|
|||||||
for (part = PART_OUT; part < PART_COUNT; ++part)
|
for (part = PART_OUT; part < PART_COUNT; ++part)
|
||||||
{
|
{
|
||||||
fd = term->tl_job->jv_channel->ch_part[part].ch_fd;
|
fd = term->tl_job->jv_channel->ch_part[part].ch_fd;
|
||||||
if (isatty(fd))
|
if (mch_isatty(fd))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (part < PART_COUNT && mch_report_winsize(fd, rows, cols) == OK)
|
if (part < PART_COUNT && mch_report_winsize(fd, rows, cols) == OK)
|
||||||
|
@@ -787,6 +787,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
824,
|
||||||
/**/
|
/**/
|
||||||
823,
|
823,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user