aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main.c16
-rw-r--r--vis.c22
-rw-r--r--vis.h11
3 files changed, 26 insertions, 23 deletions
diff --git a/main.c b/main.c
index 03a5918..953f6e4 100644
--- a/main.c
+++ b/main.c
@@ -21,6 +21,8 @@
#include "array.h"
#include "buffer.h"
+static Vis vis[1];
+
#define PAGE INT_MAX
#define PAGE_HALF (INT_MAX-1)
@@ -207,6 +209,10 @@
typedef enum { KEY_ACTION_LIST(ENUM) } VisActionKind;
#undef ENUM
+/* NOTE: must conform to the vis library signature, but we can rename the parameters */
+#undef KEY_ACTION_FN
+#define KEY_ACTION_FN(name) const char *name(Vis *_unused, const char *keys, const Arg *arg)
+
/** key bindings functions */
static KEY_ACTION_FN(ka_nop)
@@ -1271,8 +1277,6 @@ static KEY_ACTION_FN(ka_jumplist)
return keys;
}
-static Vis *vis;
-
static void signal_handler(int signum, siginfo_t *siginfo, void *context) {
vis_signal_handler(vis, signum, siginfo, context);
}
@@ -1283,7 +1287,8 @@ static const KeyAction vis_action[] = { KEY_ACTION_LIST(KEY_ACTION_STRUCT) };
#include "config.h"
-int main(int argc, char *argv[]) {
+int main(int argc, char *argv[])
+{
for (int i = 1; i < argc; i++) {
if (argv[i][0] != '-') {
continue;
@@ -1306,8 +1311,7 @@ int main(int argc, char *argv[]) {
}
}
- vis = vis_new();
- if (!vis)
+ if (!vis_init(vis))
return EXIT_FAILURE;
vis_event_emit(vis, VIS_EVENT_INIT);
@@ -1403,6 +1407,6 @@ int main(int argc, char *argv[]) {
}
int status = vis_run(vis);
- vis_free(vis);
+ vis_cleanup(vis);
return status;
}
diff --git a/vis.c b/vis.c
index 08ee6b2..30d88b0 100644
--- a/vis.c
+++ b/vis.c
@@ -564,15 +564,11 @@ void vis_window_close(Win *win) {
vis_draw(vis);
}
-Vis *vis_new(void) {
- Vis *vis = calloc(1, sizeof(Vis));
- if (!vis)
- return NULL;
+bool vis_init(Vis *vis)
+{
vis->exit_status = -1;
- if (!ui_terminal_init(&vis->ui)) {
- free(vis);
- return NULL;
- }
+ if (!ui_terminal_init(&vis->ui))
+ return false;
ui_init(&vis->ui, vis);
vis->change_colors = true;
for (size_t i = 0; i < LENGTH(vis->registers); i++)
@@ -611,13 +607,14 @@ Vis *vis_new(void) {
vis->mode_prev = vis->mode = &vis_modes[VIS_MODE_NORMAL];
vis_modes[VIS_MODE_INSERT].input = vis_event_mode_insert_input;
vis_modes[VIS_MODE_REPLACE].input = vis_event_mode_replace_input;
- return vis;
+ return true;
err:
- vis_free(vis);
- return NULL;
+ vis_cleanup(vis);
+ return false;
}
-void vis_free(Vis *vis) {
+void vis_cleanup(Vis *vis)
+{
if (!vis)
return;
while (vis->windows)
@@ -656,7 +653,6 @@ void vis_free(Vis *vis) {
vis_action_free(vis, array_get_ptr(&vis->actions_user, 0));
array_release(&vis->actions_user);
free(vis->shell);
- free(vis);
}
void vis_insert(Vis *vis, size_t pos, const char *data, size_t len) {
diff --git a/vis.h b/vis.h
index 2b5ce52..8e367ed 100644
--- a/vis.h
+++ b/vis.h
@@ -99,10 +99,13 @@ typedef struct {
* @defgroup vis_lifecycle Vis Lifecycle
* @{
*/
-/** Create a new editor instance. */
-Vis *vis_new(void);
-/** Free all resources associated with this editor instance, terminates UI. */
-void vis_free(Vis*);
+/**
+ * Initializes a new editor instance.
+ * @param vis The editor instance.
+ */
+bool vis_init(Vis*);
+/** Release all resources associated with this editor instance, terminates UI. */
+void vis_cleanup(Vis*);
/**
* Enter main loop, start processing user input.
* @param vis The editor instance.