private.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #include <termios.h>
  2. #include <faux/faux.h>
  3. #include "tinyrl/vt100.h"
  4. #include "tinyrl/hist.h"
  5. #include "tinyrl/tinyrl.h"
  6. // UTF-8 functions
  7. ssize_t utf8_to_wchar(const char *sp, unsigned long *sym_out);
  8. bool_t utf8_wchar_is_cjk(unsigned long sym);
  9. off_t utf8_move_left(const char *line, off_t cur_pos);
  10. off_t utf8_move_right(const char *line, off_t cur_pos);
  11. // Keys
  12. bool_t tinyrl_key_default(tinyrl_t *tinyrl, char key);
  13. bool_t tinyrl_key_interrupt(tinyrl_t *tinyrl, char key);
  14. bool_t tinyrl_key_start_of_line(tinyrl_t *tinyrl, char key);
  15. bool_t tinyrl_key_end_of_line(tinyrl_t *tinyrl, char key);
  16. bool_t tinyrl_key_kill(tinyrl_t *tinyrl, char key);
  17. bool_t tinyrl_key_yank(tinyrl_t *tinyrl, char key);
  18. bool_t tinyrl_key_crlf(tinyrl_t *tinyrl, char key);
  19. bool_t tinyrl_key_up(tinyrl_t *tinyrl, char key);
  20. bool_t tinyrl_key_down(tinyrl_t *tinyrl, char key);
  21. bool_t tinyrl_key_left(tinyrl_t *tinyrl, char key);
  22. bool_t tinyrl_key_right(tinyrl_t *tinyrl, char key);
  23. bool_t tinyrl_key_backspace(tinyrl_t *tinyrl, char key);
  24. bool_t tinyrl_key_backword(tinyrl_t *tinyrl, char key);
  25. bool_t tinyrl_key_delete(tinyrl_t *tinyrl, char key);
  26. bool_t tinyrl_key_clear_screen(tinyrl_t *tinyrl, char key);
  27. bool_t tinyrl_key_erase_line(tinyrl_t *tinyrl, char key);
  28. bool_t tinyrl_key_tab(tinyrl_t *tinyrl, char key);
  29. // Tinyrl
  30. bool_t tinyrl_esc_seq(tinyrl_t *tinyrl, const char *esc_seq);
  31. bool_t tinyrl_line_extend(tinyrl_t *tinyrl, size_t len);
  32. bool_t tinyrl_line_insert(tinyrl_t *tinyrl, const char *text, size_t len);
  33. bool_t tinyrl_line_delete(tinyrl_t *tinyrl, off_t start, size_t len);
  34. typedef struct line_s {
  35. char *str;
  36. size_t size; // Size of buffer
  37. size_t len; // Length of string
  38. off_t pos;
  39. } line_t;
  40. #define NUM_HANDLERS 256
  41. struct tinyrl_s {
  42. tinyrl_key_func_t *handlers[NUM_HANDLERS]; // Handlers for pressed keys
  43. tinyrl_key_func_t *hotkey_fn; // Handler for non-standard hotkeys
  44. hist_t *hist; // History object
  45. vt100_t *term; // VT100 terminal object
  46. struct termios default_termios; // Saved terminal settings
  47. unsigned int width; // Terminal width
  48. bool_t utf8; // Is encoding UTF-8 flag. Default is UTF-8
  49. line_t line; // Current line
  50. // Input processing vars. Input is processed char by char so
  51. // the current state of processing is necessary.
  52. size_t utf8_cont; // Number of UTF-8 continue bytes left
  53. bool_t esc_cont; // Does escape sequence continue
  54. char esc_seq[10]; // Current ESC sequence (line doesn't contain it)
  55. char *esc_p; // Pointer for unfinished ESC sequence
  56. unsigned max_line_length;
  57. char *prompt;
  58. size_t prompt_size; /* strlen() */
  59. size_t prompt_len; /* Symbol positions */
  60. char *buffer;
  61. size_t buffer_size;
  62. bool_t done;
  63. bool_t completion_over;
  64. bool_t completion_error_over;
  65. tinyrl_completion_func_t *attempted_completion_function;
  66. int state;
  67. #define RL_STATE_COMPLETING (0x00000001)
  68. char *kill_string;
  69. void *context; /* context supplied by caller
  70. * to tinyrl_readline()
  71. */
  72. char echo_char;
  73. bool_t echo_enabled;
  74. char *last_buffer; /* hold record of the previous
  75. buffer for redisplay purposes */
  76. unsigned int last_point; /* hold record of the previous
  77. cursor position for redisplay purposes */
  78. unsigned int last_line_size; /* The length of last_buffer */
  79. };