summaryrefslogtreecommitdiffstats
path: root/src/utils/include/mbsedit.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils/include/mbsedit.h')
-rw-r--r--src/utils/include/mbsedit.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/utils/include/mbsedit.h b/src/utils/include/mbsedit.h
new file mode 100644
index 0000000..8d1c6c2
--- /dev/null
+++ b/src/utils/include/mbsedit.h
@@ -0,0 +1,32 @@
+#ifndef UTIL_LINUX_MBSEDIT_H
+# define UTIL_LINUX_MBSEDIT_H
+
+#include "mbsalign.h"
+#include "widechar.h"
+
+struct mbs_editor {
+ char *buf; /* buffer */
+ size_t max_bytes; /* size of the buffer */
+ size_t max_cells; /* maximal allowed number of cells */
+ size_t cur_cells; /* number of cells to print the buffer */
+ size_t cur_bytes; /* number of chars in bytes */
+ size_t cursor; /* cursor position in bytes */
+ size_t cursor_cells; /* cursor position in cells */
+};
+
+enum {
+ MBS_EDIT_LEFT,
+ MBS_EDIT_RIGHT,
+ MBS_EDIT_END,
+ MBS_EDIT_HOME
+};
+
+struct mbs_editor *mbs_new_edit(char *buf, size_t bufsz, size_t ncells);
+char *mbs_free_edit(struct mbs_editor *edit);
+
+int mbs_edit_goto(struct mbs_editor *edit, int where);
+int mbs_edit_delete(struct mbs_editor *edit);
+int mbs_edit_backspace(struct mbs_editor *edit);
+int mbs_edit_insert(struct mbs_editor *edit, wint_t c);
+
+#endif /* UTIL_LINUX_MBSEDIT_H */