/* input modes: no break, no CR to NL, no parity check, no strip char,
* no start/stop output control. */
raw.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
- /* output modes - disable post processing */
- raw.c_oflag &= ~(OPOST);
+ /* output modes - actually, no need to disable post processing */
+ /*raw.c_oflag &= ~(OPOST);*/
/* control modes - set 8 bit chars */
raw.c_cflag |= (CS8);
/* local modes - choing off, canonical off, no extended functions,
IGNORE_RC(write(fd, buf, n));
}
-static void clearScreen(struct current *current)
+void linenoiseClearScreen(void)
{
- fd_printf(current->fd, "\x1b[H\x1b[2J");
+ fd_printf(STDOUT_FILENO, "\x1b[H\x1b[2J");
}
static void cursorToLeft(struct current *current)
static void setCursorPos(struct current *current, int x)
{
- fd_printf(current->fd, "\r\x1b[%dC", x);
+ if (x == 0) {
+ cursorToLeft(current);
+ }
+ else {
+ fd_printf(current->fd, "\r\x1b[%dC", x);
+ }
}
/**
SetConsoleMode(current->inh, orig_consolemode);
}
-static void clearScreen(struct current *current)
+void linenoiseClearScreen(void)
{
+ HANDLE fh = GetStdHandle(STD_OUTPUT_HANDLE);
+
COORD topleft = { 0, 0 };
DWORD n;
- FillConsoleOutputCharacter(current->outh, ' ',
+ FillConsoleOutputCharacter(fh, ' ',
current->cols * current->rows, topleft, &n);
- FillConsoleOutputAttribute(current->outh,
+ FillConsoleOutputAttribute(fh,
FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN,
current->cols * current->rows, topleft, &n);
- SetConsoleCursorPosition(current->outh, topleft);
+ SetConsoleCursorPosition(fh, topleft);
}
static void cursorToLeft(struct current *current)
}
break;
case ctrl('L'): /* Ctrl+L, clear screen */
- clearScreen(current);
+ linenoiseClearScreen();
/* Force recalc of window size for serial terminals */
current->cols = 0;
refreshLine(current->prompt, current);