Fix command key handling. - sam - An updated version of the sam text editor. | |
git clone git://vernunftzentrum.de/sam.git | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit 7776eb1dd3c6958ae4f1b31b1b1c10cc66e8c8ac | |
parent acd47eb278b12d22ba95ee1b190f2e0d2f3112a0 | |
Author: Rob King <[email protected]> | |
Date: Thu, 11 Aug 2016 13:04:17 -0500 | |
Fix command key handling. | |
Diffstat: | |
config.h | 3 +-- | |
samterm/main.c | 136 +++++++++++++++---------------- | |
2 files changed, 65 insertions(+), 74 deletions(-) | |
--- | |
diff --git a/config.h b/config.h | |
@@ -12,8 +12,7 @@ | |
#define USE64BITS 1 | |
/* Command key definitions. These should generally be ASCII control codes. | |
- * They should be unique. Set them to (still unique) negative values to | |
- * disable them. | |
+ * Define them to 0 to disable a key. | |
*/ | |
#define LINEUP 0x05 /* Ctrl-E */ | |
#define LINEDOWN 0x18 /* Ctrl-X */ | |
diff --git a/samterm/main.c b/samterm/main.c | |
@@ -560,78 +560,70 @@ type(Flayer *l, int res) /* what a bloody mess thi… | |
outTsll(Torigin, t->tag, l->origin, l->f.maxlines+1); | |
/* backspacing immediately after outcmd(): sorry */ | |
} else if (moving){ | |
- switch(c){ | |
- case CHARLEFT: /* ctrl-s */ | |
- flsetselect(l, a, a); | |
- flushtyping(0); | |
- if (a > 0) | |
- a--; | |
- flsetselect(l, a, a); | |
- center(l, a); | |
- break; | |
- | |
- case CHARRIGHT: /* ctrl-d */ | |
- flsetselect(l, a, a); | |
- flushtyping(0); | |
- if (a < t->rasp.nrunes) | |
- a++; | |
- flsetselect(l, a, a); | |
- center(l, a); | |
- break; | |
- | |
- case LINEUP: /* ctrl-e */ | |
- flsetselect(l, a, a); | |
- flushtyping(1); | |
- if (a > 0){ | |
- long n0, n1, count = 0; | |
- while (a > 0 && raspc(&t->rasp, a - 1) != … | |
- a--; | |
- count++; | |
- } | |
- if (a > 0){ | |
- n1 = a; | |
- a--; | |
- while (a > 0 && raspc(&t->rasp, a - 1)… | |
- a--; | |
- | |
- n0 = a; | |
- a = (n0 + count >= n1) ? n1 - 1 : n0 +… | |
- flsetselect(l, a, a); | |
- center(l, a); | |
- } | |
- } | |
- break; | |
- | |
- case LINEDOWN: /* ctrl-x */ | |
- flsetselect(l, a, a); | |
- flushtyping(1); | |
- if (a < t->rasp.nrunes){ | |
- long p0, count = 0; | |
- | |
- p0 = a; | |
- while (a > 0 && raspc(&t->rasp, a - 1)… | |
- a--; | |
- count++; | |
- } | |
- | |
- a = p0; | |
- while (a < t->rasp.nrunes && raspc(&t-… | |
- a++; | |
- | |
- if (a < t->rasp.nrunes){ | |
- a++; | |
- while (a < t->rasp.nru… | |
- a++; | |
- count--; | |
- } | |
- if (a != p0){ | |
- flsetselect(l, a, a); | |
- center(l, a); | |
- } | |
- } | |
- } | |
- break; | |
- } | |
+ if (c == CHARLEFT){ | |
+ flsetselect(l, a, a); | |
+ flushtyping(0); | |
+ if (a > 0) | |
+ a--; | |
+ flsetselect(l, a, a); | |
+ center(l, a); | |
+ } else if (c == CHARRIGHT){ | |
+ flsetselect(l, a, a); | |
+ flushtyping(0); | |
+ if (a < t->rasp.nrunes) | |
+ a++; | |
+ flsetselect(l, a, a); | |
+ center(l, a); | |
+ } else if (c == LINEUP){ | |
+ flsetselect(l, a, a); | |
+ flushtyping(1); | |
+ if (a > 0){ | |
+ long n0, n1, count = 0; | |
+ while (a > 0 && raspc(&t->rasp, a - 1) != '\n'){ | |
+ a--; | |
+ count++; | |
+ } | |
+ if (a > 0){ | |
+ n1 = a; | |
+ a--; | |
+ while (a > 0 && raspc(&t->rasp, a - 1) != '\n') | |
+ a--; | |
+ | |
+ n0 = a; | |
+ a = (n0 + count >= n1) ? n1 - 1 : n0 + count; | |
+ flsetselect(l, a, a); | |
+ center(l, a); | |
+ } | |
+ } | |
+ } else if (c == LINEDOWN){ | |
+ flsetselect(l, a, a); | |
+ flushtyping(1); | |
+ if (a < t->rasp.nrunes){ | |
+ long p0, count = 0; | |
+ | |
+ p0 = a; | |
+ while (a > 0 && raspc(&t->rasp, a - 1) != '\n'){ | |
+ a--; | |
+ count++; | |
+ } | |
+ | |
+ a = p0; | |
+ while (a < t->rasp.nrunes && raspc(&t->rasp, a) != '\n') | |
+ a++; | |
+ | |
+ if (a < t->rasp.nrunes){ | |
+ a++; | |
+ while (a < t->rasp.nrunes && count > 0 && raspc(&t->rasp, … | |
+ a++; | |
+ count--; | |
+ } | |
+ if (a != p0){ | |
+ flsetselect(l, a, a); | |
+ center(l, a); | |
+ } | |
+ } | |
+ } | |
+ } | |
}else if(backspacing && !lock){ | |
if(l->f.p0>0 && a>0){ | |
switch(c){ |