Introduction
Introduction Statistics Contact Development Disclaimer Help
tex: represent each keymap with its index in kmaps[] - neatvi - [fork] simple v…
git clone git://src.adamsgaard.dk/neatvi
Log
Files
Refs
README
---
commit 9e76a7c658e3ea68a1d5de81cb4f1cf1a0f4f6d9
parent 53f1da76a6d4918209eecc5251437407e8c7cf41
Author: Ali Gholami Rudi <[email protected]>
Date: Thu, 4 May 2017 18:08:14 +0430
ex: represent each keymap with its index in kmaps[]
Diffstat:
M conf.c | 11 ++++++++---
M ex.c | 20 +++++---------------
M led.c | 22 +++++++++++-----------
M vi.c | 14 +++++++-------
M vi.h | 13 +++++++------
5 files changed, 38 insertions(+), 42 deletions(-)
---
diff --git a/conf.c b/conf.c
t@@ -75,13 +75,18 @@ int conf_highlight_revdir(int *att)
return 0;
}
-char **conf_kmap(char *name)
+char **conf_kmap(int id)
+{
+ return kmaps[id];
+}
+
+int conf_kmapfind(char *name)
{
int i;
for (i = 0; i < LEN(kmaps); i++)
if (name && kmaps[i][0] && !strcmp(name, kmaps[i][0]))
- return kmaps[i];
- return kmap_en;
+ return i;
+ return 0;
}
char *conf_digraph(int c1, int c2)
diff --git a/ex.c b/ex.c
t@@ -19,11 +19,11 @@ int xled = 1; /* use the line edito…
int xtd = +1; /* current text direction */
int xshape = 1; /* perform letter shaping */
int xorder = 1; /* change the order of characters */
+int xkmap = 0; /* the current keymap */
+int xkmap_alt = 1; /* the alternate keymap */
static char xkwd[EXLEN]; /* the last searched keyword */
static char xrep[EXLEN]; /* the last replacement */
static int xkwddir; /* the last search direction */
-static char *xkmap = "en"; /* the current keymap */
-static char xkmap2[8] = "fa"; /* the alternate keymap */
static struct buf {
char ft[32];
t@@ -111,16 +111,6 @@ char *ex_filetype(void)
return xhl ? bufs[0].ft : "";
}
-char **ex_kmap(void)
-{
- return &xkmap;
-}
-
-char *ex_kmapalt(void)
-{
- return xkmap2;
-}
-
/* read ex command location */
static char *ex_loc(char *s, char *loc)
{
t@@ -784,11 +774,11 @@ static int ec_cmap(char *ec)
ex_cmd(ec, cmd);
ex_arg(ec, arg);
if (arg[0])
- snprintf(xkmap2, sizeof(xkmap2), arg);
+ xkmap_alt = conf_kmapfind(arg);
else
- ex_print(xkmap);
+ ex_print(conf_kmap(xkmap)[0]);
if (arg[0] && !strchr(cmd, '!'))
- xkmap = xkmap2;
+ xkmap = xkmap_alt;
return 0;
}
diff --git a/led.c b/led.c
t@@ -6,7 +6,7 @@
#include <unistd.h>
#include "vi.h"
-static char *kmap_map(char *kmap, int c)
+static char *kmap_map(int kmap, int c)
{
static char cs[4];
char **keymap = conf_kmap(kmap);
t@@ -160,7 +160,7 @@ static int led_lastword(char *s)
return r - s;
}
-static void led_printparts(char *ai, char *pref, char *main, char *post, char …
+static void led_printparts(char *ai, char *pref, char *main, char *post, int k…
{
struct sbuf *ln;
int off, pos;
t@@ -193,7 +193,7 @@ static void led_printparts(char *ai, char *pref, char *mai…
}
/* continue reading the character starting with c */
-static char *led_readchar(int c, char *kmap)
+static char *led_readchar(int c, int kmap)
{
static char buf[8];
int c1, c2;
t@@ -224,16 +224,16 @@ static char *led_readchar(int c, char *kmap)
}
/* read a character from the terminal */
-char *led_read(char **kmap)
+char *led_read(int *kmap)
{
int c = term_read();
while (!TK_INT(c)) {
switch (c) {
case TK_CTL('f'):
- *kmap = ex_kmapalt();
+ *kmap = xkmap_alt;
break;
case TK_CTL('e'):
- *kmap = "en";
+ *kmap = 0;
break;
default:
return led_readchar(c, *kmap);
t@@ -244,7 +244,7 @@ char *led_read(char **kmap)
}
/* read a line from the terminal */
-static char *led_line(char *pref, char *post, char *ai, int ai_max, int *key, …
+static char *led_line(char *pref, char *post, char *ai, int ai_max, int *key, …
{
struct sbuf *sb;
int ai_len = strlen(ai);
t@@ -260,10 +260,10 @@ static char *led_line(char *pref, char *post, char *ai, …
c = term_read();
switch (c) {
case TK_CTL('f'):
- *kmap = ex_kmapalt();
+ *kmap = xkmap_alt;
continue;
case TK_CTL('e'):
- *kmap = "en";
+ *kmap = 0;
continue;
case TK_CTL('h'):
case 127:
t@@ -304,7 +304,7 @@ static char *led_line(char *pref, char *post, char *ai, in…
}
/* read an ex command */
-char *led_prompt(char *pref, char *post, char **kmap)
+char *led_prompt(char *pref, char *post, int *kmap)
{
int key;
int td = td_set(+2);
t@@ -325,7 +325,7 @@ char *led_prompt(char *pref, char *post, char **kmap)
}
/* read visual command input */
-char *led_input(char *pref, char *post, char **kmap)
+char *led_input(char *pref, char *post, int *kmap)
{
struct sbuf *sb = sbuf_make();
char ai[128];
diff --git a/vi.c b/vi.c
t@@ -118,10 +118,10 @@ static void vi_back(int c)
static char *vi_char(void)
{
- return led_read(ex_kmap());
+ return led_read(&xkmap);
}
-static char *vi_prompt(char *msg, char **kmap)
+static char *vi_prompt(char *msg, int *kmap)
{
char *r, *s;
term_pos(xrows, led_pos(msg, 0));
t@@ -140,7 +140,7 @@ char *ex_read(char *msg)
struct sbuf *sb;
char c;
if (xled) {
- char *s = led_prompt(msg, "", ex_kmap());
+ char *s = led_prompt(msg, "", &xkmap);
if (s)
term_chr('\n');
return s;
t@@ -257,7 +257,7 @@ static int vi_search(int cmd, int cnt, int *row, int *off)
if (cmd == '/' || cmd == '?') {
char sign[4] = {cmd};
struct sbuf *sb;
- char *kw = vi_prompt(sign, ex_kmap());
+ char *kw = vi_prompt(sign, &xkmap);
char *re;
if (!kw)
return 1;
t@@ -655,7 +655,7 @@ static int charcount(char *text, char *post)
static char *vi_input(char *pref, char *post, int *row, int *off)
{
- char *rep = led_input(pref, post, ex_kmap());
+ char *rep = led_input(pref, post, &xkmap);
if (!rep)
return NULL;
*row = linecount(rep) - 1;
t@@ -737,7 +737,7 @@ static void vi_pipe(int r1, int r2)
{
char *text;
char *rep;
- char *kmap = NULL;
+ int kmap = 0;
char *cmd = vi_prompt("!", &kmap);
if (!cmd)
return;
t@@ -1042,7 +1042,7 @@ static void vi(void)
int xcol;
int mark;
char *ln;
- char *kmap = NULL;
+ int kmap = 0;
xtop = MAX(0, xrow - xrows / 2);
xoff = 0;
xcol = vi_off2col(xb, xrow, xoff);
diff --git a/vi.h b/vi.h
t@@ -129,9 +129,9 @@ char *term_cmd(int *n);
#define TK_ESC (TK_CTL('['))
/* line-oriented input and output */
-char *led_prompt(char *pref, char *post, char **kmap);
-char *led_input(char *pref, char *post, char **kmap);
-char *led_read(char **kmap);
+char *led_prompt(char *pref, char *post, int *kmap);
+char *led_input(char *pref, char *post, int *kmap);
+char *led_read(int *kmap);
void led_print(char *msg, int row);
void led_printmsg(char *s, int row);
int led_pos(char *s, int pos);
t@@ -146,8 +146,6 @@ int ex_init(char **files);
void ex_done(void);
char *ex_path(void);
char *ex_filetype(void);
-char **ex_kmap(void);
-char *ex_kmapalt(void);
struct lbuf *ex_lbuf(void);
int ex_kwd(char **kwd, int *dir);
void ex_kwdset(char *kwd, int dir);
t@@ -185,7 +183,8 @@ int conf_placeholder(int idx, char **s, char **d, int *wid…
int conf_highlight(int idx, char **ft, int **att, char **pat, int *end);
int conf_filetype(int idx, char **ft, char **pat);
int conf_highlight_revdir(int *att);
-char **conf_kmap(char *name);
+char **conf_kmap(int id);
+int conf_kmapfind(char *name);
char *conf_digraph(int c1, int c2);
/* global variables */
t@@ -202,3 +201,5 @@ extern int xtd;
extern int xshape;
extern int xorder;
extern int xhl;
+extern int xkmap;
+extern int xkmap_alt;
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.