aboutsummaryrefslogtreecommitdiff
path: root/vis.c
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2014-08-31 11:07:42 +0200
committerMarc André Tanner <mat@brain-dump.org>2014-08-31 11:07:42 +0200
commitc72fe77e5d3cf4ecb3b691a5fa582d0e96b5ec1e (patch)
tree6b5487c3384e8c35c5b531fffca1f2b2bacc193d /vis.c
parentfbaeffb469d2fd6833a1301255f1ac73c7226a83 (diff)
downloadvis-c72fe77e5d3cf4ecb3b691a5fa582d0e96b5ec1e.tar.gz
vis-c72fe77e5d3cf4ecb3b691a5fa582d0e96b5ec1e.tar.xz
First part of a vi like frontend
Still very incomplete
Diffstat (limited to 'vis.c')
-rw-r--r--vis.c36
1 files changed, 3 insertions, 33 deletions
diff --git a/vis.c b/vis.c
index 67483c5..00b6582 100644
--- a/vis.c
+++ b/vis.c
@@ -9,6 +9,7 @@
#include <sys/ioctl.h>
#include "editor.h"
+#include "vis.h"
#include "util.h"
#ifdef PDCURSES
@@ -18,39 +19,6 @@ int ESCDELAY;
# define set_escdelay(d) (ESCDELAY = (d))
#endif
-typedef union {
- size_t i;
- const char *s;
- size_t (*m)(Editor*);
- void (*f)(Editor*);
-} Arg;
-
-typedef struct {
- char str[6];
- int code;
-} Key;
-
-typedef struct {
- Key key[2];
- void (*func)(const Arg *arg);
- const Arg arg;
-} KeyBinding;
-
-typedef struct Mode Mode;
-struct Mode {
- Mode *parent;
- KeyBinding *bindings;
- const char *name;
- void (*enter)(void);
- void (*leave)(void);
- bool (*input)(const char *str, size_t len);
-};
-
-typedef struct {
- char *name;
- Mode *mode;
-} Config;
-
static void cursor(const Arg *arg);
static void call(const Arg *arg);
static void insert(const Arg *arg);
@@ -152,6 +120,8 @@ static KeyBinding *keybinding(Mode *mode, Key *key0, Key *key1) {
if (keymatch(key0, &kb->key[0]) && (!key1 || keymatch(key1, &kb->key[1])))
return kb;
}
+ if (mode->unknown && !mode->unknown(key0, key1))
+ break;
}
return NULL;
}