fixup! win,tty: allow setting ENABLE_VIRTUAL_TERMINAL_INPUT for raw mode
This commit is contained in:
parent
11d4e61dae
commit
c785048904
@ -30,16 +30,13 @@ Data types
|
||||
UV_TTY_MODE_NORMAL,
|
||||
/*
|
||||
* Raw input mode (On Windows, ENABLE_WINDOW_INPUT is also enabled).
|
||||
* Currently an alias for UV_TTY_MODE_RAW_LEGACY but may become an
|
||||
* alias for UV_TTY_MODE_RAW_VT in libuv v2.x.
|
||||
* May become equivalent to UV_TTY_MODE_RAW_VT in future libuv versions.
|
||||
*/
|
||||
UV_TTY_MODE_RAW,
|
||||
/* Binary-safe I/O mode for IPC (Unix-only) */
|
||||
UV_TTY_MODE_IO,
|
||||
/* Raw input mode. On Windows ENABLE_VIRTUAL_TERMINAL_INPUT is also set. */
|
||||
UV_TTY_MODE_RAW_VT,
|
||||
/* Alias for UV_TTY_MODE_RAW in libuv 1.x. */
|
||||
UV_TTY_MODE_RAW_LEGACY
|
||||
UV_TTY_MODE_RAW_VT
|
||||
} uv_tty_mode_t;
|
||||
|
||||
.. c:enum:: uv_tty_vtermstate_t
|
||||
|
||||
@ -807,16 +807,13 @@ typedef enum {
|
||||
UV_TTY_MODE_NORMAL,
|
||||
/*
|
||||
* Raw input mode (On Windows, ENABLE_WINDOW_INPUT is also enabled).
|
||||
* Currently an alias for UV_TTY_MODE_RAW_LEGACY but may become an
|
||||
* alias for UV_TTY_MODE_RAW_VT in libuv v2.x.
|
||||
* May become equivalent to UV_TTY_MODE_RAW_VT in future libuv versions.
|
||||
*/
|
||||
UV_TTY_MODE_RAW,
|
||||
/* Binary-safe I/O mode for IPC (Unix-only) */
|
||||
UV_TTY_MODE_IO,
|
||||
/* Raw input mode. On Windows ENABLE_VIRTUAL_TERMINAL_INPUT is also set. */
|
||||
UV_TTY_MODE_RAW_VT,
|
||||
/* Alias for UV_TTY_MODE_RAW in libuv 1.x. */
|
||||
UV_TTY_MODE_RAW_LEGACY
|
||||
UV_TTY_MODE_RAW_VT
|
||||
} uv_tty_mode_t;
|
||||
|
||||
typedef enum {
|
||||
|
||||
@ -140,10 +140,9 @@ enum {
|
||||
UV_HANDLE_REAP = 0x10000000
|
||||
};
|
||||
|
||||
#define uv__is_raw_tty_mode(m) \
|
||||
((m) == UV_TTY_MODE_RAW || \
|
||||
(m) == UV_TTY_MODE_RAW_VT || \
|
||||
(m) == UV_TTY_MODE_RAW_LEGACY)
|
||||
static inline int uv__is_raw_tty_mode(uv_tty_mode_t m) {
|
||||
return m == UV_TTY_MODE_RAW || m == UV_TTY_MODE_RAW_VT;
|
||||
}
|
||||
|
||||
int uv__loop_configure(uv_loop_t* loop, uv_loop_option option, va_list ap);
|
||||
|
||||
|
||||
@ -372,9 +372,6 @@ int uv_tty_set_mode(uv_tty_t* tty, uv_tty_mode_t mode) {
|
||||
uv_read_cb read_cb;
|
||||
int err;
|
||||
|
||||
if (mode == UV_TTY_MODE_RAW_LEGACY)
|
||||
mode = UV_TTY_MODE_RAW;
|
||||
|
||||
if (!(tty->flags & UV_HANDLE_TTY_READABLE)) {
|
||||
return UV_EINVAL;
|
||||
}
|
||||
@ -383,7 +380,7 @@ int uv_tty_set_mode(uv_tty_t* tty, uv_tty_mode_t mode) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
flags = ENABLE_ECHO_INPUT | ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT;
|
||||
try_set_flags = 0;
|
||||
switch (mode) {
|
||||
case UV_TTY_MODE_NORMAL:
|
||||
flags = ENABLE_ECHO_INPUT | ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT;
|
||||
@ -417,10 +414,8 @@ int uv_tty_set_mode(uv_tty_t* tty, uv_tty_mode_t mode) {
|
||||
}
|
||||
|
||||
uv_sem_wait(&uv_tty_output_lock);
|
||||
if (
|
||||
!SetConsoleMode(tty->handle, flags | try_set_flags) &&
|
||||
!SetConsoleMode(tty->handle, flags)
|
||||
) {
|
||||
if (!SetConsoleMode(tty->handle, flags | try_set_flags) &&
|
||||
!SetConsoleMode(tty->handle, flags)) {
|
||||
err = uv_translate_sys_error(GetLastError());
|
||||
uv_sem_post(&uv_tty_output_lock);
|
||||
return err;
|
||||
@ -2333,7 +2328,7 @@ int uv_tty_reset_mode(void) {
|
||||
if (
|
||||
uv__tty_console_handle_in != INVALID_HANDLE_VALUE &&
|
||||
uv__tty_console_in_original_mode != (DWORD)-1 &&
|
||||
InterlockedOr(&uv__tty_console_in_need_mode_reset, 0) != 0
|
||||
InterlockedExchange(&uv__tty_console_in_need_mode_reset, 0) != 0
|
||||
) {
|
||||
SetConsoleMode(uv__tty_console_handle_in, uv__tty_console_in_original_mode);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user