tinyrl.h 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. #ifndef _tinyrl_tinyrl_h
  2. #define _tinyrl_tinyrl_h
  3. #include <stdio.h>
  4. #include <faux/faux.h>
  5. C_DECL_BEGIN
  6. typedef struct _tinyrl tinyrl_t;
  7. typedef enum {
  8. /**
  9. * no possible completions were found
  10. */
  11. TINYRL_NO_MATCH = 0,
  12. /**
  13. * the provided string was already an exact match
  14. */
  15. TINYRL_MATCH,
  16. /**
  17. * the provided string was ambiguous and produced
  18. * more than one possible completion
  19. */
  20. TINYRL_AMBIGUOUS,
  21. /**
  22. * the provided string was unambiguous and a
  23. * completion was performed
  24. */
  25. TINYRL_COMPLETED_MATCH,
  26. /**
  27. * the provided string was ambiguous but a partial
  28. * completion was performed.
  29. */
  30. TINYRL_COMPLETED_AMBIGUOUS,
  31. /**
  32. * the provided string was an exact match for one
  33. * possible value but there are other exetensions
  34. * of the string available.
  35. */
  36. TINYRL_MATCH_WITH_EXTENSIONS
  37. } tinyrl_match_e;
  38. /* virtual methods */
  39. typedef char *tinyrl_compentry_func_t(tinyrl_t * instance,
  40. const char *text, unsigned offset, unsigned state);
  41. typedef int tinyrl_hook_func_t(tinyrl_t * instance);
  42. typedef char **tinyrl_completion_func_t(tinyrl_t * instance,
  43. const char *text, unsigned start, unsigned end);
  44. typedef int tinyrl_timeout_fn_t(tinyrl_t *instance);
  45. typedef int tinyrl_keypress_fn_t(tinyrl_t *instance, int key);
  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, int key);
  53. /* exported functions */
  54. extern tinyrl_t *tinyrl_new(FILE * instream,
  55. FILE * outstream,
  56. unsigned stifle,
  57. tinyrl_completion_func_t * complete_fn);
  58. /*lint -esym(534,tinyrl_printf) Ignoring return value of function */
  59. extern int tinyrl_printf(const tinyrl_t * instance, const char *fmt, ...);
  60. extern void tinyrl_delete(tinyrl_t * instance);
  61. extern const char *tinyrl__get_prompt(const tinyrl_t * instance);
  62. extern void tinyrl__set_prompt(tinyrl_t *instance, const char *prompt);
  63. extern void tinyrl_done(tinyrl_t * instance);
  64. extern void tinyrl_completion_over(tinyrl_t * instance);
  65. extern void tinyrl_completion_error_over(tinyrl_t * instance);
  66. extern bool_t tinyrl_is_completion_error_over(const tinyrl_t * instance);
  67. extern void *tinyrl__get_context(const tinyrl_t * instance);
  68. /**
  69. * This operation returns the current line in use by the tinyrl instance
  70. * NB. the pointer will become invalid after any further operation on the
  71. * instance.
  72. */
  73. extern const char *tinyrl__get_line(const tinyrl_t * instance);
  74. extern void tinyrl__set_istream(tinyrl_t * instance, FILE * istream);
  75. extern bool_t tinyrl__get_isatty(const tinyrl_t * instance);
  76. extern FILE *tinyrl__get_istream(const tinyrl_t * instance);
  77. extern FILE *tinyrl__get_ostream(const tinyrl_t * instance);
  78. extern bool_t tinyrl__get_utf8(const tinyrl_t * instance);
  79. extern void tinyrl__set_utf8(tinyrl_t * instance, bool_t utf8);
  80. extern void tinyrl__set_timeout(tinyrl_t *instance, int timeout);
  81. extern void tinyrl__set_timeout_fn(tinyrl_t *instance,
  82. tinyrl_timeout_fn_t *fn);
  83. extern void tinyrl__set_keypress_fn(tinyrl_t *instance,
  84. tinyrl_keypress_fn_t *fn);
  85. extern void tinyrl__set_hotkey_fn(tinyrl_t *instance,
  86. tinyrl_key_func_t *fn);
  87. extern char *tinyrl_readline(tinyrl_t *instance, void *context);
  88. extern char *tinyrl_forceline(tinyrl_t *instance,
  89. void *context, const char *line);
  90. extern bool_t tinyrl_bind_key(tinyrl_t *instance, int key,
  91. tinyrl_key_func_t *fn);
  92. extern void tinyrl_delete_matches(char **instance);
  93. extern char **tinyrl_completion(tinyrl_t *instance,
  94. const char *line, unsigned start, unsigned end,
  95. tinyrl_compentry_func_t *generator);
  96. extern void tinyrl_crlf(const tinyrl_t * instance);
  97. extern void tinyrl_multi_crlf(const tinyrl_t * instance);
  98. extern void tinyrl_ding(const tinyrl_t * instance);
  99. extern void tinyrl_reset_line_state(tinyrl_t * instance);
  100. extern bool_t tinyrl_insert_text(tinyrl_t * instance, const char *text);
  101. extern void
  102. tinyrl_delete_text(tinyrl_t * instance, unsigned start, unsigned end);
  103. extern void tinyrl_redisplay(tinyrl_t * instance);
  104. extern void
  105. tinyrl_replace_line(tinyrl_t * instance, const char *text, int clear_undo);
  106. /**
  107. * Complete the current word in the input buffer, displaying
  108. * a prompt to clarify any abiguity if necessary.
  109. *
  110. * \return
  111. * - the type of match performed.
  112. * \post
  113. * - If the current word is ambiguous then a list of
  114. * possible completions will be displayed.
  115. */
  116. extern tinyrl_match_e tinyrl_complete(tinyrl_t * instance);
  117. /**
  118. * Complete the current word in the input buffer, displaying
  119. * a prompt to clarify any abiguity or extra extensions if necessary.
  120. *
  121. * \return
  122. * - the type of match performed.
  123. * \post
  124. * - If the current word is ambiguous then a list of
  125. * possible completions will be displayed.
  126. * - If the current word is complete but there are extra
  127. * completions which are an extension of that word then
  128. * a list of these will be displayed.
  129. */
  130. extern tinyrl_match_e tinyrl_complete_with_extensions(tinyrl_t * instance);
  131. /**
  132. * Disable echoing of input characters when a line in input.
  133. *
  134. */
  135. extern void tinyrl_disable_echo(
  136. /**
  137. * The instance on which to operate
  138. */
  139. tinyrl_t * instance,
  140. /**
  141. * The character to display instead of a key press.
  142. *
  143. * If this has the special value '/0' then the insertion point will not
  144. * be moved when keys are pressed.
  145. */
  146. char echo_char);
  147. /**
  148. * Enable key echoing for this instance. (This is the default behaviour)
  149. */
  150. extern void tinyrl_enable_echo(
  151. /**
  152. * The instance on which to operate
  153. */
  154. tinyrl_t * instance);
  155. /**
  156. * Indicate whether the current insertion point is quoting or not
  157. */
  158. extern bool_t tinyrl_is_quoting(
  159. /**
  160. * The instance on which to operate
  161. */
  162. const tinyrl_t * instance);
  163. /**
  164. * Indicate whether the current insertion is empty or not
  165. */
  166. extern bool_t
  167. tinyrl_is_empty(
  168. /**
  169. * The instance on which to operate
  170. */
  171. const tinyrl_t *instance
  172. );
  173. /**
  174. * Limit maximum line length
  175. */
  176. extern void tinyrl_limit_line_length(
  177. /**
  178. * The instance on which to operate
  179. */
  180. tinyrl_t * instance,
  181. /**
  182. * The length to limit to (0) is unlimited
  183. */
  184. unsigned length);
  185. extern unsigned tinyrl__get_width(const tinyrl_t *instance);
  186. extern unsigned tinyrl__get_height(const tinyrl_t *instance);
  187. C_DECL_END
  188. #endif /* _tinyrl_tinyrl_h */