Libecoli  0.11.3
Extensible COmmand LIne library
editline.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright 2018, Olivier MATZ <zer0@droids-corp.org>
3  */
4 
15 #pragma once
16 
17 #include <stdbool.h>
18 #include <stdio.h>
19 
20 struct ec_node;
21 struct ec_pnode;
22 struct ec_comp;
23 struct editline;
24 
26 struct ec_editline;
27 
31 #define EC_EDITLINE_HISTORY_SIZE 128
32 
58 
65 
80 
87 };
88 
94 typedef int (*ec_editline_check_exit_cb_t)(void *opaque);
95 
120  const char *prog,
121  FILE *f_in,
122  FILE *f_out,
123  FILE *f_err,
124  enum ec_editline_init_flags flags
125 );
126 
133 void ec_editline_free(struct ec_editline *editline);
134 
141 struct editline *ec_editline_get_el(struct ec_editline *editline);
142 
157  const struct ec_editline *editline,
158  unsigned int *width,
159  unsigned int *height
160 );
161 
177 int ec_editline_set_node(struct ec_editline *editline, const struct ec_node *node);
178 
187 const struct ec_node *ec_editline_get_node(const struct ec_editline *editline);
188 
205 int ec_editline_set_history(struct ec_editline *editline, size_t hist_size, const char *hist_file);
206 
217 int ec_editline_set_prompt(struct ec_editline *editline, const char *prompt);
218 
242 int ec_editline_set_prompt_esc(struct ec_editline *editline, const char *prompt, char delim);
243 
255 char *ec_editline_curline(const struct ec_editline *editline, bool trim_after_cursor);
256 
269 char *ec_editline_gets(struct ec_editline *editline);
270 
283 struct ec_pnode *ec_editline_parse(struct ec_editline *editline);
284 
307  struct ec_editline *editline,
308  ec_editline_check_exit_cb_t check_exit_cb,
309  void *opaque
310 );
311 
325 int ec_editline_complete(struct editline *el, int c);
326 
327 /*
328  * Deprecated aliases for symbols moved to interact.h.
329  */
330 
331 #include "interact.h"
332 #include "utils.h"
333 
336 #define EC_EDITLINE_HELP_ATTR EC_DEPRECATED_MACRO("use EC_INTERACT_HELP_ATTR") EC_INTERACT_HELP_ATTR
337 #define EC_EDITLINE_CB_ATTR EC_DEPRECATED_MACRO("use EC_INTERACT_CB_ATTR") EC_INTERACT_CB_ATTR
338 #define EC_EDITLINE_DESC_ATTR EC_DEPRECATED_MACRO("use EC_INTERACT_DESC_ATTR") EC_INTERACT_DESC_ATTR
339 
340 struct EC_DEPRECATED("use struct ec_interact_help") ec_editline_help {
341  char *desc;
342  char *help;
343 };
344 
346  ec_editline_command_cb_t EC_DEPRECATED("use ec_interact_command_cb_t");
347 
348 /*
349  * Suppress deprecation warnings for function declarations that reference
350  * deprecated types in their signatures.
351  */
352 #pragma GCC diagnostic push
353 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
354 
355 EC_DEPRECATED("use ec_interact_get_completions") ssize_t
356 ec_editline_get_completions(const struct ec_comp *cmpl, char ***matches_out);
357 
359 void ec_editline_free_completions(char **matches, size_t n);
360 
362 int ec_editline_print_cols(struct ec_editline *editline, char const *const *matches, size_t n);
363 
365 char *ec_editline_append_chars(const struct ec_comp *cmpl);
366 
367 EC_DEPRECATED("use ec_interact_get_helps") ssize_t ec_editline_get_helps(
368  const struct ec_editline *editline,
369  const char *line,
370  struct ec_editline_help **helps_out
371 );
372 
374 int ec_editline_print_helps(
375  const struct ec_editline *editline,
376  const struct ec_editline_help *helps,
377  size_t n
378 );
379 
381 void ec_editline_free_helps(struct ec_editline_help *helps, size_t n);
382 
383 EC_DEPRECATED("use ec_interact_get_error_helps") ssize_t ec_editline_get_error_helps(
384  const struct ec_editline *editline,
385  struct ec_editline_help **helps_out,
386  size_t *char_idx
387 );
388 
390 int ec_editline_print_error_helps(
391  const struct ec_editline *editline,
392  const struct ec_editline_help *helps,
393  size_t n,
394  size_t char_idx
395 );
396 
398 int ec_editline_set_help(struct ec_node *node, const char *help);
399 
401 int ec_editline_set_callback(struct ec_node *node, ec_interact_command_cb_t cb);
402 
404 int ec_editline_set_desc(struct ec_node *node, const char *desc);
405 
406 #pragma GCC diagnostic pop
407 
struct ec_comp * ec_comp(void)
struct ec_pnode * ec_editline_parse(struct ec_editline *editline)
int ec_editline_set_prompt(struct ec_editline *editline, const char *prompt)
char * ec_editline_gets(struct ec_editline *editline)
int ec_editline_set_prompt_esc(struct ec_editline *editline, const char *prompt, char delim)
void ec_editline_free(struct ec_editline *editline)
int(* ec_editline_check_exit_cb_t)(void *opaque)
Definition: editline.h:94
const struct ec_node * ec_editline_get_node(const struct ec_editline *editline)
struct ec_editline * ec_editline(const char *prog, FILE *f_in, FILE *f_out, FILE *f_err, enum ec_editline_init_flags flags)
int ec_editline_term_size(const struct ec_editline *editline, unsigned int *width, unsigned int *height)
struct editline * ec_editline_get_el(struct ec_editline *editline)
int ec_editline_complete(struct editline *el, int c)
int ec_editline_interact(struct ec_editline *editline, ec_editline_check_exit_cb_t check_exit_cb, void *opaque)
ec_editline_init_flags
Definition: editline.h:36
char * ec_editline_curline(const struct ec_editline *editline, bool trim_after_cursor)
int ec_editline_set_node(struct ec_editline *editline, const struct ec_node *node)
int ec_editline_set_history(struct ec_editline *editline, size_t hist_size, const char *hist_file)
@ EC_EDITLINE_DISABLE_COMPLETION
Definition: editline.h:79
@ EC_EDITLINE_DISABLE_SIGNALS
Definition: editline.h:57
@ EC_EDITLINE_DEFAULT_SIGHANDLER
Definition: editline.h:86
@ EC_EDITLINE_DISABLE_HISTORY
Definition: editline.h:64
ssize_t ec_interact_get_error_helps(const struct ec_node *node, const char *line, struct ec_interact_help **helps_out, size_t *char_idx)
int(* ec_interact_command_cb_t)(const struct ec_pnode *)
Definition: interact.h:49
int ec_interact_print_error_helps(FILE *out, unsigned int width, const char *line, const struct ec_interact_help *helps, size_t n, size_t char_idx)
int ec_interact_set_help(struct ec_node *node, const char *help)
int ec_interact_print_helps(FILE *out, unsigned int width, const struct ec_interact_help *helps, size_t n)
int ec_interact_set_desc(struct ec_node *node, const char *desc)
ssize_t ec_interact_get_helps(const struct ec_node *node, const char *line, struct ec_interact_help **helps_out)
int ec_interact_set_callback(struct ec_node *node, ec_interact_command_cb_t cb)
int ec_interact_print_cols(FILE *out, unsigned int width, char const *const *matches, size_t n)
char * ec_interact_append_chars(const struct ec_comp *cmpl)
void ec_interact_free_helps(struct ec_interact_help *helps, size_t n)
void ec_interact_free_completions(char **matches, size_t n)
struct ec_node * ec_node(const char *typename, const char *id)
struct ec_pnode * ec_pnode(const struct ec_node *node)
#define EC_DEPRECATED(msg)
Definition: utils.h:36