tinyrl.h 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. #ifndef _tinyrl_tinyrl_h
  2. #define _tinyrl_tinyrl_h
  3. #include <stdio.h>
  4. #include <faux/faux.h>
  5. #include "tinyrl/vt100.h"
  6. C_DECL_BEGIN
  7. typedef struct tinyrl_s tinyrl_t;
  8. typedef enum {
  9. /**
  10. * no possible completions were found
  11. */
  12. TINYRL_NO_MATCH = 0,
  13. /**
  14. * the provided string was already an exact match
  15. */
  16. TINYRL_MATCH,
  17. /**
  18. * the provided string was ambiguous and produced
  19. * more than one possible completion
  20. */
  21. TINYRL_AMBIGUOUS,
  22. /**
  23. * the provided string was unambiguous and a
  24. * completion was performed
  25. */
  26. TINYRL_COMPLETED_MATCH,
  27. /**
  28. * the provided string was ambiguous but a partial
  29. * completion was performed.
  30. */
  31. TINYRL_COMPLETED_AMBIGUOUS,
  32. /**
  33. * the provided string was an exact match for one
  34. * possible value but there are other exetensions
  35. * of the string available.
  36. */
  37. TINYRL_MATCH_WITH_EXTENSIONS
  38. } tinyrl_match_e;
  39. /* virtual methods */
  40. typedef char *tinyrl_compentry_func_t(tinyrl_t * instance,
  41. const char *text, unsigned offset, unsigned state);
  42. typedef int tinyrl_hook_func_t(tinyrl_t * instance);
  43. typedef char **tinyrl_completion_func_t(tinyrl_t * instance,
  44. const char *text, unsigned start, unsigned end);
  45. typedef int tinyrl_timeout_fn_t(tinyrl_t *instance);
  46. /**
  47. * \return
  48. * - BOOL_TRUE if the action associated with the key has
  49. * been performed successfully
  50. * - BOOL_FALSE if the action was not successful
  51. */
  52. typedef bool_t tinyrl_key_func_t(tinyrl_t *instance, unsigned char key);
  53. bool_t tinyrl_key_default(tinyrl_t *tinyrl, unsigned char key);
  54. tinyrl_t *tinyrl_new(FILE *istream, FILE *ostream,
  55. const char *hist_fname, size_t hist_stifle);
  56. void tinyrl_free(tinyrl_t *tinyrl);
  57. bool_t tinyrl_bind_key(tinyrl_t *tinyrl, int key, tinyrl_key_func_t *fn);
  58. void tinyrl_set_hotkey_fn(tinyrl_t *tinyrl, tinyrl_key_func_t *fn);
  59. void tinyrl_set_istream(tinyrl_t *tinyrl, FILE *istream);
  60. FILE *tinyrl_istream(const tinyrl_t *tinyrl);
  61. void tinyrl_set_ostream(tinyrl_t *tinyrl, FILE *ostream);
  62. FILE *tinyrl_ostream(const tinyrl_t *tinyrl);
  63. void tinyrl_set_utf8(tinyrl_t *tinyrl, bool_t utf8);
  64. bool_t tinyrl_utf8(const tinyrl_t *tinyrl);
  65. bool_t tinyrl_busy(const tinyrl_t *tinyrl);
  66. void tinyrl_set_busy(tinyrl_t *tinyrl, bool_t busy);
  67. void tinyrl_set_prompt(tinyrl_t *tinyrl, const char *prompt);
  68. const char *tinyrl_prompt(const tinyrl_t *tinyrl);
  69. const char *tinyrl_line(const tinyrl_t *tinyrl);
  70. char *tinyrl_line_to_pos(const tinyrl_t *tinyrl);
  71. bool_t tinyrl_hist_save(const tinyrl_t *tinyrl);
  72. bool_t tinyrl_hist_restore(tinyrl_t *tinyrl);
  73. void tinyrl_line_to_hist(tinyrl_t *tinyrl);
  74. void tinyrl_reset_hist_pos(tinyrl_t *tinyrl);
  75. void *tinyrl_udata(const tinyrl_t *tinyrl);
  76. void tinyrl_set_udata(tinyrl_t *tinyrl, void *udata);
  77. void tty_raw_mode(tinyrl_t *tinyrl);
  78. void tty_restore_mode(tinyrl_t *tinyrl);
  79. int tinyrl_read(tinyrl_t *tinyrl);
  80. void tinyrl_redisplay(tinyrl_t *tinyrl);
  81. void tinyrl_save_last(tinyrl_t *tinyrl);
  82. void tinyrl_reset_line_state(tinyrl_t *tinyrl);
  83. void tinyrl_reset_line(tinyrl_t *tinyrl);
  84. void tinyrl_crlf(const tinyrl_t *tinyrl);
  85. void tinyrl_multi_crlf(const tinyrl_t *tinyrl);
  86. void tinyrl_winsize(const tinyrl_t *tinyrl, size_t *width, size_t *height);
  87. size_t tinyrl_width(const tinyrl_t *tinyrl);
  88. size_t tinyrl_height(const tinyrl_t *tinyrl);
  89. int tinyrl_printf(const tinyrl_t *tinyrl, const char *fmt, ...);
  90. size_t tinyrl_equal_part(const tinyrl_t *tinyrl,
  91. const char *s1, const char *s2);
  92. bool_t tinyrl_line_insert(tinyrl_t *tinyrl, const char *text, size_t len);
  93. bool_t tinyrl_line_delete(tinyrl_t *tinyrl, size_t start, size_t len);
  94. bool_t tinyrl_line_replace(tinyrl_t *tinyrl, const char *text);
  95. extern void tinyrl_done(tinyrl_t * instance);
  96. extern void tinyrl_completion_over(tinyrl_t * instance);
  97. extern void tinyrl_completion_error_over(tinyrl_t * instance);
  98. extern bool_t tinyrl_is_completion_error_over(const tinyrl_t * instance);
  99. /**
  100. * This operation returns the current line in use by the tinyrl instance
  101. * NB. the pointer will become invalid after any further operation on the
  102. * instance.
  103. */
  104. extern void tinyrl_delete_matches(char **instance);
  105. extern char **tinyrl_completion(tinyrl_t *instance,
  106. const char *line, unsigned start, unsigned end,
  107. tinyrl_compentry_func_t *generator);
  108. extern void tinyrl_ding(const tinyrl_t * instance);
  109. extern void
  110. tinyrl_replace_line(tinyrl_t * instance, const char *text, int clear_undo);
  111. /**
  112. * Complete the current word in the input buffer, displaying
  113. * a prompt to clarify any abiguity if necessary.
  114. *
  115. * \return
  116. * - the type of match performed.
  117. * \post
  118. * - If the current word is ambiguous then a list of
  119. * possible completions will be displayed.
  120. */
  121. extern tinyrl_match_e tinyrl_complete(tinyrl_t * instance);
  122. /**
  123. * Complete the current word in the input buffer, displaying
  124. * a prompt to clarify any abiguity or extra extensions if necessary.
  125. *
  126. * \return
  127. * - the type of match performed.
  128. * \post
  129. * - If the current word is ambiguous then a list of
  130. * possible completions will be displayed.
  131. * - If the current word is complete but there are extra
  132. * completions which are an extension of that word then
  133. * a list of these will be displayed.
  134. */
  135. extern tinyrl_match_e tinyrl_complete_with_extensions(tinyrl_t * instance);
  136. /**
  137. * Disable echoing of input characters when a line in input.
  138. *
  139. */
  140. extern void tinyrl_disable_echo(
  141. /**
  142. * The instance on which to operate
  143. */
  144. tinyrl_t * instance,
  145. /**
  146. * The character to display instead of a key press.
  147. *
  148. * If this has the special value '/0' then the insertion point will not
  149. * be moved when keys are pressed.
  150. */
  151. char echo_char);
  152. /**
  153. * Enable key echoing for this instance. (This is the default behaviour)
  154. */
  155. extern void tinyrl_enable_echo(
  156. /**
  157. * The instance on which to operate
  158. */
  159. tinyrl_t * instance);
  160. /**
  161. * Indicate whether the current insertion point is quoting or not
  162. */
  163. extern bool_t tinyrl_is_quoting(
  164. /**
  165. * The instance on which to operate
  166. */
  167. const tinyrl_t * instance);
  168. /**
  169. * Indicate whether the current insertion is empty or not
  170. */
  171. extern bool_t
  172. tinyrl_is_empty(
  173. /**
  174. * The instance on which to operate
  175. */
  176. const tinyrl_t *instance
  177. );
  178. /**
  179. * Limit maximum line length
  180. */
  181. extern void tinyrl_limit_line_length(
  182. /**
  183. * The instance on which to operate
  184. */
  185. tinyrl_t * instance,
  186. /**
  187. * The length to limit to (0) is unlimited
  188. */
  189. unsigned length);
  190. C_DECL_END
  191. #endif /* _tinyrl_tinyrl_h */