Libecoli  0.10.1
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 
19 #include <histedit.h>
20 
21 struct ec_editline;
22 struct ec_node;
23 struct ec_pnode;
24 struct ec_comp;
25 
30  char *desc;
31  char *help;
32 };
33 
37 #define EC_EDITLINE_HISTORY_SIZE 128
38 
42 #define EC_EDITLINE_HELP_ATTR "_help"
43 
47 #define EC_EDITLINE_CB_ATTR "_cb"
48 
52 #define EC_EDITLINE_DESC_ATTR "_desc"
53 
77 
84 
97 
104 };
105 
109 typedef int (*ec_editline_command_cb_t)(const struct ec_pnode *);
110 
116 typedef int (*ec_editline_check_exit_cb_t)(void *opaque);
117 
142  const char *prog,
143  FILE *f_in,
144  FILE *f_out,
145  FILE *f_err,
146  enum ec_editline_init_flags flags
147 );
148 
155 void ec_editline_free(struct ec_editline *editline);
156 
163 EditLine *ec_editline_get_el(struct ec_editline *editline);
164 
179  const struct ec_editline *editline,
180  unsigned int *width,
181  unsigned int *height
182 );
183 
199 int ec_editline_set_node(struct ec_editline *editline, const struct ec_node *node);
200 
209 const struct ec_node *ec_editline_get_node(const struct ec_editline *editline);
210 
227 int ec_editline_set_history(struct ec_editline *editline, size_t hist_size, const char *hist_file);
228 
239 ssize_t ec_editline_get_completions(const struct ec_comp *cmpl, char ***matches_out);
240 
249 void ec_editline_free_completions(char **matches, size_t n);
250 
263 int ec_editline_print_cols(struct ec_editline *editline, char const *const *matches, size_t n);
264 
274 char *ec_editline_append_chars(const struct ec_comp *cmpl);
275 
290  const struct ec_editline *editline,
291  const char *line,
292  struct ec_editline_help **helps_out
293 );
294 
308  const struct ec_editline *editline,
309  const struct ec_editline_help *helps,
310  size_t n
311 );
312 
324 void ec_editline_free_helps(struct ec_editline_help *helps, size_t n);
325 
340  const struct ec_editline *editline,
341  struct ec_editline_help **helps_out,
342  size_t *char_idx
343 );
344 
360  const struct ec_editline *editline,
361  const struct ec_editline_help *helps,
362  size_t n,
363  size_t char_idx
364 );
365 
376 int ec_editline_set_prompt(struct ec_editline *editline, const char *prompt);
377 
400 int ec_editline_set_prompt_esc(struct ec_editline *editline, const char *prompt, char delim);
401 
413 char *ec_editline_curline(const struct ec_editline *editline, bool trim_after_cursor);
414 
427 char *ec_editline_gets(struct ec_editline *editline);
428 
441 struct ec_pnode *ec_editline_parse(struct ec_editline *editline);
442 
464  struct ec_editline *el,
465  ec_editline_check_exit_cb_t check_exit_cb,
466  void *opaque
467 );
468 
482 int ec_editline_complete(EditLine *el, int c);
483 
498 int ec_editline_set_help(struct ec_node *node, const char *help);
499 
514 
530 int ec_editline_set_desc(struct ec_node *node, const char *desc);
531 
struct ec_comp * ec_comp(void)
int ec_editline_interact(struct ec_editline *el, ec_editline_check_exit_cb_t check_exit_cb, void *opaque)
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_callback(struct ec_node *node, ec_editline_command_cb_t cb)
int ec_editline_set_prompt_esc(struct ec_editline *editline, const char *prompt, char delim)
ssize_t ec_editline_get_error_helps(const struct ec_editline *editline, struct ec_editline_help **helps_out, size_t *char_idx)
void ec_editline_free(struct ec_editline *editline)
int(* ec_editline_command_cb_t)(const struct ec_pnode *)
Definition: editline.h:109
int(* ec_editline_check_exit_cb_t)(void *opaque)
Definition: editline.h:116
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)
ssize_t ec_editline_get_completions(const struct ec_comp *cmpl, char ***matches_out)
int ec_editline_set_desc(struct ec_node *node, const char *desc)
int ec_editline_term_size(const struct ec_editline *editline, unsigned int *width, unsigned int *height)
int ec_editline_set_help(struct ec_node *node, const char *help)
int ec_editline_print_error_helps(const struct ec_editline *editline, const struct ec_editline_help *helps, size_t n, size_t char_idx)
void ec_editline_free_completions(char **matches, size_t n)
char * ec_editline_append_chars(const struct ec_comp *cmpl)
ec_editline_init_flags
Definition: editline.h:57
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)
void ec_editline_free_helps(struct ec_editline_help *helps, size_t n)
EditLine * ec_editline_get_el(struct ec_editline *editline)
int ec_editline_print_cols(struct ec_editline *editline, char const *const *matches, size_t n)
int ec_editline_print_helps(const struct ec_editline *editline, const struct ec_editline_help *helps, size_t n)
ssize_t ec_editline_get_helps(const struct ec_editline *editline, const char *line, struct ec_editline_help **helps_out)
int ec_editline_complete(EditLine *el, int c)
int ec_editline_set_history(struct ec_editline *editline, size_t hist_size, const char *hist_file)
@ EC_EDITLINE_DISABLE_COMPLETION
Definition: editline.h:96
@ EC_EDITLINE_DISABLE_SIGNALS
Definition: editline.h:76
@ EC_EDITLINE_DEFAULT_SIGHANDLER
Definition: editline.h:103
@ EC_EDITLINE_DISABLE_HISTORY
Definition: editline.h:83
struct ec_node * ec_node(const char *typename, const char *id)
struct ec_pnode * ec_pnode(const struct ec_node *node)