Skip to content

Commit 97f962a

Browse files
committed
Windows: Set DISABLE_NEWLINE_AUTO_RETURN in raw mode, rather than cooked mode.
The docs are super wrong: MicrosoftDocs/Console-Docs#132 Closes #156.
1 parent fa1e5aa commit 97f962a

File tree

2 files changed

+26
-31
lines changed

2 files changed

+26
-31
lines changed

src/native/driver-unix.c

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -164,8 +164,7 @@ TerminalResult cathode_set_mode(bool raw, bool flush)
164164
termios.c_cflag &= (tcflag_t)~(CSTOPB | PARENB | PARODD | HUPCL | CLOCAL | CRTSCTS);
165165
#if defined(ZIG_OS_LINUX)
166166
termios.c_cflag &= (tcflag_t)~CMSPAR;
167-
#endif
168-
#if defined(ZIG_OS_MACOS)
167+
#elif defined(ZIG_OS_MACOS)
169168
termios.c_cflag &= (tcflag_t)~(CDTR_IFLOW | CDSR_OFLOW | MDMBUF);
170169
#endif
171170
termios.c_lflag &= (tcflag_t)~(FLUSHO | EXTPROC);
@@ -179,44 +178,40 @@ TerminalResult cathode_set_mode(bool raw, bool flush)
179178
termios.c_oflag &= (tcflag_t)~(OCRNL | ONOCR | ONLRET);
180179
#if defined(ZIG_OS_LINUX)
181180
termios.c_oflag &= (tcflag_t)~OLCUC;
182-
#endif
183-
#if defined(ZIG_OS_MACOS)
181+
#elif defined(ZIG_OS_MACOS)
184182
termios.c_oflag &= (tcflag_t)~ONOEOT;
185183
#endif
186184
termios.c_cflag &= (tcflag_t)~CSIZE;
187185
termios.c_cflag |= CS8 | CREAD;
188186
termios.c_lflag &= (tcflag_t)~(ECHONL | NOFLSH | ECHOPRT | PENDIN);
189187
#if defined(ZIG_OS_LINUX)
190188
termios.c_lflag &= (tcflag_t)~XCASE;
191-
#endif
192-
#if defined(ZIG_OS_MACOS)
189+
#elif defined(ZIG_OS_MACOS)
193190
termios.c_lflag &= (tcflag_t)~ALTWERASE;
194191
#endif
195192

196-
tcflag_t iflag = BRKINT | ICRNL | IXON;
197-
tcflag_t oflag = OPOST | ONLCR;
198-
tcflag_t lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK | ECHOCTL | ECHOKE | IEXTEN;
193+
tcflag_t iflag_cooked = BRKINT | ICRNL | IXON;
194+
tcflag_t oflag_cooked = OPOST | ONLCR;
195+
tcflag_t lflag_cooked = ISIG | ICANON | ECHO | ECHOE | ECHOK | ECHOCTL | ECHOKE | IEXTEN;
196+
tcflag_t lflag_raw = TOSTOP;
197+
#if defined(ZIG_OS_MACOS)
198+
lflag_raw |= NOKERNINFO;
199+
#endif
199200

200201
// Finally, enable/disable features that depend on raw/cooked mode.
201202
if (raw)
202203
{
203-
termios.c_iflag &= ~iflag;
204-
termios.c_oflag &= ~oflag;
205-
termios.c_lflag &= ~lflag;
206-
termios.c_lflag |= TOSTOP;
207-
#if defined(ZIG_OS_MACOS)
208-
termios.c_lflag |= NOKERNINFO;
209-
#endif
204+
termios.c_iflag &= ~iflag_cooked;
205+
termios.c_oflag &= ~oflag_cooked;
206+
termios.c_lflag &= ~lflag_cooked;
207+
termios.c_lflag |= lflag_raw;
210208
}
211209
else
212210
{
213-
termios.c_iflag |= iflag;
214-
termios.c_oflag |= oflag;
215-
termios.c_lflag |= lflag;
216-
termios.c_lflag &= (tcflag_t)~TOSTOP;
217-
#if defined(ZIG_OS_MACOS)
218-
termios.c_lflag &= (tcflag_t)~NOKERNINFO;
219-
#endif
211+
termios.c_iflag |= iflag_cooked;
212+
termios.c_oflag |= oflag_cooked;
213+
termios.c_lflag |= lflag_cooked;
214+
termios.c_lflag &= ~lflag_raw;
220215
}
221216

222217
if (!raw)

src/native/driver-windows.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -200,19 +200,19 @@ TerminalResult cathode_set_mode(bool raw, bool flush)
200200
out_mode &= (DWORD)~ENABLE_LVB_GRID_WORLDWIDE;
201201
out_mode |= ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING;
202202

203-
DWORD in_mode_extra = ENABLE_PROCESSED_INPUT | ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT;
204-
DWORD out_mode_extra = DISABLE_NEWLINE_AUTO_RETURN;
203+
DWORD in_mode_cooked = ENABLE_PROCESSED_INPUT | ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT;
204+
DWORD out_mode_raw = DISABLE_NEWLINE_AUTO_RETURN;
205205

206-
// Enable/disable features that depend on cooked/raw mode.
207-
if (!raw)
206+
// Enable/disable features that depend on raw/cooked mode.
207+
if (raw)
208208
{
209-
in_mode |= in_mode_extra;
210-
out_mode |= out_mode_extra;
209+
in_mode &= ~in_mode_cooked;
210+
out_mode |= out_mode_raw;
211211
}
212212
else
213213
{
214-
in_mode &= ~in_mode_extra;
215-
out_mode &= ~out_mode_extra;
214+
in_mode |= in_mode_cooked;
215+
out_mode &= ~out_mode_raw;
216216
}
217217

218218
TerminalResult result;

0 commit comments

Comments
 (0)