123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- #include <termios.h>
- #include <faux/faux.h>
- #include "tinyrl/vt100.h"
- #include "tinyrl/hist.h"
- #include "tinyrl/tinyrl.h"
- // UTF-8 functions
- ssize_t utf8_to_wchar(const char *sp, unsigned long *sym_out);
- bool_t utf8_wchar_is_cjk(unsigned long sym);
- off_t utf8_move_left(const char *line, off_t cur_pos);
- off_t utf8_move_right(const char *line, off_t cur_pos);
- ssize_t utf8_nsyms(const char *str, size_t len);
- // Keys
- bool_t tinyrl_key_default(tinyrl_t *tinyrl, unsigned char key);
- bool_t tinyrl_key_interrupt(tinyrl_t *tinyrl, unsigned char key);
- bool_t tinyrl_key_start_of_line(tinyrl_t *tinyrl, unsigned char key);
- bool_t tinyrl_key_end_of_line(tinyrl_t *tinyrl, unsigned char key);
- bool_t tinyrl_key_kill(tinyrl_t *tinyrl, unsigned char key);
- bool_t tinyrl_key_yank(tinyrl_t *tinyrl, unsigned char key);
- bool_t tinyrl_key_crlf(tinyrl_t *tinyrl, unsigned char key);
- bool_t tinyrl_key_up(tinyrl_t *tinyrl, unsigned char key);
- bool_t tinyrl_key_down(tinyrl_t *tinyrl, unsigned char key);
- bool_t tinyrl_key_left(tinyrl_t *tinyrl, unsigned char key);
- bool_t tinyrl_key_right(tinyrl_t *tinyrl, unsigned char key);
- bool_t tinyrl_key_backspace(tinyrl_t *tinyrl, unsigned char key);
- bool_t tinyrl_key_backword(tinyrl_t *tinyrl, unsigned char key);
- bool_t tinyrl_key_delete(tinyrl_t *tinyrl, unsigned char key);
- bool_t tinyrl_key_clear_screen(tinyrl_t *tinyrl, unsigned char key);
- bool_t tinyrl_key_erase_line(tinyrl_t *tinyrl, unsigned char key);
- bool_t tinyrl_key_tab(tinyrl_t *tinyrl, unsigned char key);
- // Tinyrl
- bool_t tinyrl_esc_seq(tinyrl_t *tinyrl, const char *esc_seq);
- bool_t tinyrl_line_extend(tinyrl_t *tinyrl, size_t len);
- typedef struct line_s {
- char *str;
- size_t size; // Size of buffer
- size_t len; // Length of string
- size_t pos;
- } line_t;
- #define NUM_HANDLERS 256
- struct tinyrl_s {
- tinyrl_key_func_t *handlers[NUM_HANDLERS]; // Handlers for pressed keys
- tinyrl_key_func_t *hotkey_fn; // Handler for non-standard hotkeys
- hist_t *hist; // History object
- vt100_t *term; // VT100 terminal object
- struct termios default_termios; // Saved terminal settings
- unsigned int width; // Terminal width
- bool_t utf8; // Is encoding UTF-8 flag. Default is UTF-8
- line_t line; // Current line
- line_t last; // Last (previous) line
- char *prompt;
- size_t prompt_len; // strlen()
- size_t prompt_chars; // Symbol positions
- void *udata; // Arbitrary user data
- bool_t busy; // Long executed commands set this flag. tinyrl_read() drops it
- // Input processing vars. Input is processed char by char so
- // the current state of processing is necessary.
- size_t utf8_cont; // Number of UTF-8 continue bytes left
- bool_t esc_cont; // Does escape sequence continue
- char esc_seq[10]; // Current ESC sequence (line doesn't contain it)
- char *esc_p; // Pointer for unfinished ESC sequence
- unsigned max_line_length;
- char *buffer;
- size_t buffer_size;
- bool_t done;
- bool_t completion_over;
- bool_t completion_error_over;
- tinyrl_completion_func_t *attempted_completion_function;
- int state;
- #define RL_STATE_COMPLETING (0x00000001)
- char *kill_string;
- char echo_char;
- bool_t echo_enabled;
- };
|