linenoise/source/linenoise.d
2025-09-23 22:00:14 +03:00

66 lines
2.8 KiB
D

module linenoise;
extern (C) {
struct LinenoiseState {
int in_completion; /* Пользователь нажал TAB, и теперь мы в режиме автодополнения,
* так что ввод обрабатывается completeLine(). */
size_t completion_idx; /* Индекс следующего предлагаемого дополнения. */
int ifd; /* Дескриптор файла stdin терминала. */
int ofd; /* Дескриптор файла stdout терминала. */
char* buf; /* Буфер редактируемой строки. */
size_t buflen; /* Размер буфера редактируемой строки. */
const(char)* prompt; /* Приглашение для отображения. */
size_t plen; /* Длина приглашения. */
size_t pos; /* Текущая позиция курсора. */
size_t oldpos; /* Предыдущая позиция курсора при обновлении. */
size_t len; /* Текущая длина редактируемой строки. */
size_t cols; /* Количество столбцов в терминале. */
size_t oldrows; /* Строки, использованные последней обновлённой строкой (многострочный режим) */
int history_index; /* Индекс истории, который мы сейчас редактируем. */
}
struct LinenoiseCompletions {
size_t len;
char** cvec;
}
alias linenoiseCompletionCallback = void function(const(char)*, LinenoiseCompletions*);
alias linenoiseHintsCallback = char* function(const(char)*, int* color, int* bold);
alias linenoiseFreeHintsCallback = void function(void*);
@nogc nothrow:
/* Non blocking API. */
int linenoiseEditStart(LinenoiseState* l, int stdin_fd, int stdout_fd, char* buf, size_t buflen, const(char)* prompt);
char* linenoiseEditFeed(LinenoiseState* l);
void linenoiseEditStop(LinenoiseState* l);
void linenoiseHide(LinenoiseState* l);
void linenoiseShow(LinenoiseState* l);
/* Blocking API. */
char* linenoise(const(char)* prompt);
void linenoiseFree(void* ptr);
/* Completion API. */
void linenoiseSetCompletionCallback(linenoiseCompletionCallback);
void linenoiseSetHintsCallback(linenoiseHintsCallback);
void linenoiseSetFreeHintsCallback(linenoiseFreeHintsCallback);
void linenoiseAddCompletion(LinenoiseCompletions*, const(char)*);
/* History API. */
int linenoiseHistoryAdd(const(char)* line);
int linenoiseHistorySetMaxLen(int len);
int linenoiseHistorySave(const(char)* filename);
int linenoiseHistoryLoad(const(char)* filename);
/* Other utilities. */
void linenoiseClearScreen();
void linenoiseSetMultiLine(int ml);
void linenoisePrintKeyCodes();
void linenoiseMaskModeEnable();
void linenoiseMaskModeDisable();
extern __gshared char* linenoiseEditMore;
}