ledit

Text editor (WIP)
git clone git://lumidify.org/ledit.git (fast, but not encrypted)
git clone https://lumidify.org/git/ledit.git (encrypted, but very slow)
Log | Files | Refs | README | LICENSE

commit 82723082181a863b7bc7c7cbbcc92da5c30caf6d
parent 7a64b99342bd37248395655399b5a4ef2334b4fe
Author: lumidify <nobody@lumidify.org>
Date:   Fri,  3 Dec 2021 23:02:10 +0100

Add some more documentation

Diffstat:
Daction.h | 9---------
Mkeys.h | 7+++++++
Mkeys_basic.c | 1+
Mkeys_basic.h | 1+
Mkeys_basic_config.h | 5+++++
Mkeys_command_config.h | 6++++++
Mmemory.h | 8++++++++
Mtheme_config.h | 1+
Mtxtbuf.h | 29+++++++++++++++++++++++++++++
Mutil.h | 15+++++++++++++++
10 files changed, 73 insertions(+), 9 deletions(-)

diff --git a/action.h b/action.h @@ -1,9 +0,0 @@ -enum action_type { - ACTION_NONE, /* pass next key to basic key handler */ - ACTION_GRABKEY /* pass next key to given callback */ -}; - -struct action { - enum action_type type; - struct action (*callback)(ledit_buffer *buffer, XEvent *event, int lang_index); -}; diff --git a/keys.h b/keys.h @@ -1,5 +1,9 @@ #define LENGTH(X) (sizeof(X) / sizeof(X[0])) +/* + * These are the language strings compared with the language strings that + * xkb gives in order to change the key mapping on layout change events. + */ #define KEY_LANGS \ static char *key_langs[] = { \ "English (US)", \ @@ -21,8 +25,11 @@ static struct { \ #define LANG_KEYS(index) &keys[index] +/* get the index of a language with the given name, or -1 if none exists */ int get_language_index(char *lang); +/* match a modifier key mask with a key state, ignoring some unimportant parts */ int match_key(unsigned int mask, unsigned int state); +/* preprocess key, i.e. get the KeySym and text corresponding to it */ void preprocess_key( ledit_window *window, XEvent *event, KeySym *sym_ret, char *buf_ret, int buf_size, int *buf_len_ret diff --git a/keys_basic.c b/keys_basic.c @@ -430,6 +430,7 @@ delete_range( txtbuf_destroy(buf); } +/* FIXME: better interface for this; documentation */ static void insert_text( ledit_view *view, diff --git a/keys_basic.h b/keys_basic.h @@ -1,2 +1,3 @@ +/* perform cleanup of global data */ void basic_key_cleanup(void); struct action basic_key_handler(ledit_view *view, XEvent *event, int lang_index); diff --git a/keys_basic_config.h b/keys_basic_config.h @@ -1,3 +1,7 @@ +/* + * These are all the regular keys used in normal, visual, and insert mode. + */ + /* FIXME: these aren't really used properly */ enum key_type { KEY_NONE = 0, @@ -98,6 +102,7 @@ static struct action toggle_hard_line_based(ledit_view *view, char *text, size_t /* FIXME: maybe sort these and use binary search -> but that would mess with the catch-all keys */ +/* FIXME: sort out the key types */ static struct key keys_en[] = { {NULL, 0, XK_BackSpace, INSERT, KEY_ANY, KEY_ANY, &backspace}, {NULL, 0, XK_Left, VISUAL|INSERT|NORMAL, KEY_ANY, KEY_ANY, &cursor_left}, diff --git a/keys_command_config.h b/keys_command_config.h @@ -1,3 +1,9 @@ +/* + * These are the keys used by special commands that require a special key + * handler. This includes keys used to edit the line entry at the bottom + * and keys used for confirmation (e.g. when substituting). + */ + static int substitute_yes(ledit_view *view, char *key_text, size_t len); static int substitute_yes_all(ledit_view *view, char *key_text, size_t len); static int substitute_no(ledit_view *view, char *key_text, size_t len); diff --git a/memory.h b/memory.h @@ -1,8 +1,16 @@ +/* + * These functions all wrap the regular functions but exit on error. + */ + char *ledit_strdup(const char *s); char *ledit_strndup(const char *s, size_t n); void *ledit_malloc(size_t size); void *ledit_calloc(size_t nmemb, size_t size); void *ledit_realloc(void *ptr, size_t size); +/* + * This is different than the normal strcat - it allocates memory for + * a new string to hold the concatenation of str1 and str2. + */ char *ledit_strcat(const char *str1, const char *str2); void *ledit_reallocarray(void *optr, size_t nmemb, size_t size); diff --git a/theme_config.h b/theme_config.h @@ -1,3 +1,4 @@ +/* FIXME: configure font here */ static const int TEXT_SIZE = 12; static const char *TEXT_FG = "#000000"; static const char *TEXT_BG = "#FFFFFF"; diff --git a/txtbuf.h b/txtbuf.h @@ -1,11 +1,40 @@ +/* + * txtbuf is really just a string data type that is badly named. + */ + typedef struct { size_t len, cap; char *text; } txtbuf; +/* + * Create an empty txtbuf. + */ txtbuf *txtbuf_new(void); + +/* + * Make sure the txtbuf has space for at least the given size, + * plus '\0' at the end. + */ void txtbuf_grow(txtbuf *buf, size_t sz); + +/* + * Shrink a textbuf, if the allocated space is much larger than the text. + */ +/* FIXME: actually use this */ void txtbuf_shrink(txtbuf *buf); + +/* + * Destroy a txtbuf. + */ void txtbuf_destroy(txtbuf *buf); + +/* + * Copy txtbuf 'src' to txtbuf 'dst'. + */ void txtbuf_copy(txtbuf *dst, txtbuf *src); + +/* + * Duplicate txtbuf 'src'. + */ txtbuf *txtbuf_dup(txtbuf *src); diff --git a/util.h b/util.h @@ -1,11 +1,26 @@ /* FIXME: rename this to draw_util.h and rename macros.h to util.h */ +/* + * This is just a basic wrapper for XftDraws and Pixmaps + * that is used by the window for its text display at the bottom. + */ typedef struct { XftDraw *xftdraw; Pixmap pixmap; int w, h; } ledit_draw; +/* + * Create a draw with the specified width and height. + */ ledit_draw *draw_create(ledit_window *window, int w, int h); + +/* + * Make sure the size of the draw is at least the given width and height. + */ void draw_grow(ledit_window *window, ledit_draw *draw, int w, int h); + +/* + * Destroy a draw. + */ void draw_destroy(ledit_window *window, ledit_draw *draw);