fixup! win,tty: allow setting ENABLE_VIRTUAL_TERMINAL_INPUT for raw mode

This commit is contained in:
Anna Henningsen 2025-02-06 15:54:42 +01:00
parent 11d4e61dae
commit c785048904
4 changed files with 11 additions and 23 deletions

View File

@ -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

View File

@ -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 {

View File

@ -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);

View File

@ -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);
}