mirror of
https://github.com/yhirose/cpp-peglib.git
synced 2024-12-22 20:05:31 +00:00
Updated linenoise library.
This commit is contained in:
parent
32794cbd7b
commit
9578362416
@ -128,7 +128,6 @@
|
||||
#include <unistd.h>
|
||||
#include <sys/ioctl.h>
|
||||
#else
|
||||
#define _CRT_SECURE_NO_WARNINGS
|
||||
#define NOMINMAX
|
||||
#include <Windows.h>
|
||||
#include <io.h>
|
||||
@ -138,9 +137,6 @@
|
||||
#ifndef STDOUT_FILENO
|
||||
#define STDOUT_FILENO 1
|
||||
#endif
|
||||
#if (_MSC_VER < 1900)
|
||||
#define snprintf _snprintf
|
||||
#endif
|
||||
#define isatty _isatty
|
||||
#define write win32_write
|
||||
#define read _read
|
||||
@ -1237,7 +1233,11 @@ inline int getCursorPosition(int ifd, int ofd) {
|
||||
|
||||
/* Parse it. */
|
||||
if (buf[0] != ESC || buf[1] != '[') return -1;
|
||||
#ifdef _WIN32
|
||||
if (sscanf_s(buf+2,"%d;%d",&rows,&cols) != 2) return -1;
|
||||
#else
|
||||
if (sscanf(buf + 2, "%d;%d", &rows, &cols) != 2) return -1;
|
||||
#endif
|
||||
return cols;
|
||||
}
|
||||
|
||||
@ -1349,7 +1349,11 @@ inline int completeLine(struct linenoiseState *ls) {
|
||||
default:
|
||||
/* Update buffer and return */
|
||||
if (i < lc.size()) {
|
||||
#ifdef _WIN32
|
||||
nwritten = _snprintf_s(ls->buf, ls->buflen, _TRUNCATE,"%s", &lc[i][0]);
|
||||
#else
|
||||
nwritten = snprintf(ls->buf, ls->buflen, "%s", &lc[i][0]);
|
||||
#endif
|
||||
ls->len = ls->pos = nwritten;
|
||||
}
|
||||
stop = 1;
|
||||
@ -1391,16 +1395,28 @@ inline void refreshSingleLine(struct linenoiseState *l) {
|
||||
}
|
||||
|
||||
/* Cursor to left edge */
|
||||
#ifdef _WIN32
|
||||
_snprintf_s(seq, 64, _TRUNCATE, "\r");
|
||||
#else
|
||||
snprintf(seq, 64, "\r");
|
||||
#endif
|
||||
ab += seq;
|
||||
/* Write the prompt and the current buffer content */
|
||||
ab += l->prompt;
|
||||
ab.append(buf, len);
|
||||
/* Erase to right */
|
||||
#ifdef _WIN32
|
||||
_snprintf_s(seq,64,_TRUNCATE,"\x1b[0K");
|
||||
#else
|
||||
snprintf(seq, 64, "\x1b[0K");
|
||||
#endif
|
||||
ab += seq;
|
||||
/* Move cursor to original position. */
|
||||
#ifdef _WIN32
|
||||
_snprintf_s(seq, 64, _TRUNCATE, "\r\x1b[%dC", (int)(pos + plen));
|
||||
#else
|
||||
snprintf(seq, 64, "\r\x1b[%dC", (int)(pos + plen));
|
||||
#endif
|
||||
ab += seq;
|
||||
if (write(fd,ab.c_str(),ab.length()) == -1) {} /* Can't recover from write error. */
|
||||
}
|
||||
@ -1426,18 +1442,30 @@ inline void refreshMultiLine(struct linenoiseState *l) {
|
||||
/* First step: clear all the lines used before. To do so start by
|
||||
* going to the last row. */
|
||||
if (old_rows-rpos > 0) {
|
||||
#ifdef _WIN32
|
||||
_snprintf_s(seq,64,_TRUNCATE,"\x1b[%dB", old_rows-rpos);
|
||||
#else
|
||||
snprintf(seq, 64, "\x1b[%dB", old_rows - rpos);
|
||||
#endif
|
||||
ab += seq;
|
||||
}
|
||||
|
||||
/* Now for every row clear it, go up. */
|
||||
for (j = 0; j < old_rows-1; j++) {
|
||||
#ifdef _WIN32
|
||||
_snprintf_s(seq, 64, _TRUNCATE, "\r\x1b[0K\x1b[1A");
|
||||
#else
|
||||
snprintf(seq, 64, "\r\x1b[0K\x1b[1A");
|
||||
#endif
|
||||
ab += seq;
|
||||
}
|
||||
|
||||
/* Clean the top line. */
|
||||
#ifdef _WIN32
|
||||
_snprintf_s(seq, 64, _TRUNCATE, "\r\x1b[0K");
|
||||
#else
|
||||
snprintf(seq, 64, "\r\x1b[0K");
|
||||
#endif
|
||||
ab += seq;
|
||||
|
||||
/* Write the prompt and the current buffer content */
|
||||
@ -1451,7 +1479,11 @@ inline void refreshMultiLine(struct linenoiseState *l) {
|
||||
(l->pos+plen) % l->cols == 0)
|
||||
{
|
||||
ab += "\n";
|
||||
#ifdef _WIN32
|
||||
_snprintf_s(seq, 64, _TRUNCATE, "\r");
|
||||
#else
|
||||
snprintf(seq, 64, "\r");
|
||||
#endif
|
||||
ab += seq;
|
||||
rows++;
|
||||
if (rows > (int)l->maxrows) l->maxrows = rows;
|
||||
@ -1462,16 +1494,28 @@ inline void refreshMultiLine(struct linenoiseState *l) {
|
||||
|
||||
/* Go up till we reach the expected positon. */
|
||||
if (rows-rpos2 > 0) {
|
||||
#ifdef _WIN32
|
||||
_snprintf_s(seq, 64, _TRUNCATE, "\x1b[%dA", rows - rpos2);
|
||||
#else
|
||||
snprintf(seq, 64, "\x1b[%dA", rows - rpos2);
|
||||
#endif
|
||||
ab += seq;
|
||||
}
|
||||
|
||||
/* Set column. */
|
||||
col = (plen+(int)l->pos) % (int)l->cols;
|
||||
if (col)
|
||||
#ifdef _WIN32
|
||||
_snprintf_s(seq, 64, _TRUNCATE, "\r\x1b[%dC", col);
|
||||
#else
|
||||
snprintf(seq, 64, "\r\x1b[%dC", col);
|
||||
#endif
|
||||
else
|
||||
#ifdef _WIN32
|
||||
_snprintf_s(seq, 64, _TRUNCATE, "\r");
|
||||
#else
|
||||
snprintf(seq, 64, "\r");
|
||||
#endif
|
||||
ab += seq;
|
||||
|
||||
l->oldpos = l->pos;
|
||||
@ -1568,7 +1612,11 @@ inline void linenoiseEditHistoryNext(struct linenoiseState *l, int dir) {
|
||||
return;
|
||||
}
|
||||
memset(l->buf, 0, l->buflen);
|
||||
#ifdef _WIN32
|
||||
strcpy_s(l->buf, l->buflen, history[history.size() - 1 - l->history_index].c_str());
|
||||
#else
|
||||
strcpy(l->buf, history[history.size() - 1 - l->history_index].c_str());
|
||||
#endif
|
||||
l->len = l->pos = strlen(l->buf);
|
||||
refreshLine(l);
|
||||
}
|
||||
@ -1913,9 +1961,7 @@ inline const std::vector<std::string>& GetHistory() {
|
||||
} // namespace linenoise
|
||||
|
||||
#ifdef _WIN32
|
||||
#if (_MSC_VER < 1900)
|
||||
#undef snprintf
|
||||
#endif
|
||||
#undef isatty
|
||||
#undef write
|
||||
#undef read
|
||||
|
Loading…
Reference in New Issue
Block a user