Add the look, search, and write commands. - sam - An updated version of the sam… | |
git clone git://vernunftzentrum.de/sam.git | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit e3c7cd4d198971a71e0cff17613c17248d58a76b | |
parent 3f2c8e96b3233b85916aaca81d4f414a8e90887f | |
Author: Rob King <[email protected]> | |
Date: Fri, 23 Sep 2016 21:57:21 -0500 | |
Add the look, search, and write commands. | |
Diffstat: | |
doc/samrc | 6 +++++- | |
doc/samrc.5 | 3 +++ | |
samterm/main.c | 36 ++++++++++++++++++++++++++++++- | |
samterm/menu.c | 6 ++++++ | |
samterm/samrc.c | 3 +++ | |
samterm/samterm.h | 5 ++++- | |
6 files changed, 56 insertions(+), 3 deletions(-) | |
--- | |
diff --git a/doc/samrc b/doc/samrc | |
@@ -49,9 +49,13 @@ bind C z command send u | |
bind C Enter command send +-a/\n/ | |
# Control-S writes the file, Control-Shift-S writes all files. | |
-bind C s command send w | |
+bind C s command write | |
bind CS s command send X w | |
+# Control-N does a search, Control-Shift-N does a look | |
+bind C n command search | |
+bind CS n command look | |
+ | |
# I like 13pt Inconsolata (I need new glasses) | |
font Inconsolata:size=13 | |
diff --git a/doc/samrc.5 b/doc/samrc.5 | |
@@ -260,6 +260,9 @@ eol Move to end of line None | |
bol Move to beginning of line None | |
tab Insert a (possibly expanded) tab Tab | |
send Append argument to command window None | |
+write Write the current file to disk None | |
+look Find the next occurance of the string in dot None | |
+search Find the next occurance of the last regex None | |
.TE | |
.Pp | |
Additionally, | |
diff --git a/samterm/main.c b/samterm/main.c | |
@@ -670,6 +670,37 @@ cmdjump(Flayer *l, long a, Text *u, const char *arg) | |
} | |
static long | |
+cmdlook(Flayer *l, long a, Text *t, const char *arg) | |
+{ | |
+ outTsll(Tlook, t->tag, which->p0, which->p1); | |
+ setlock(); | |
+ return a; | |
+} | |
+ | |
+static long | |
+cmdsearch(Flayer *l, long a, Text *t, const char *arg) | |
+{ | |
+ if (t != &cmd && haspat()){ | |
+ outcmd(); | |
+ outT0(Tsearch); | |
+ setlock(); | |
+ } | |
+ return a; | |
+} | |
+ | |
+static long | |
+cmdwrite(Flayer *l, long a, Text *t, const char *arg) | |
+{ | |
+ cursorswitch(BullseyeCursor); | |
+ if (t != &cmd){ | |
+ outTs(Twrite, t->tag); | |
+ setlock(); | |
+ } | |
+ cursorswitch(cursor); | |
+ return a; | |
+} | |
+ | |
+static long | |
cmdescape(Flayer *l, long a, Text *t, const char *arg) | |
{ | |
if (typeesc >= 0){ | |
@@ -914,7 +945,10 @@ CommandEntry commands[Cmax] ={ | |
[Ceol] = {cmdeol, false, false}, | |
[Cbol] = {cmdbol, false, false}, | |
[Ctab] = {cmdtab, false, false}, | |
- [Csend] = {cmdsend, false, false} | |
+ [Csend] = {cmdsend, false, false}, | |
+ [Clook] = {cmdlook, false, false}, | |
+ [Csearch] = {cmdsearch, false, false}, | |
+ [Cwrite] = {cmdwrite, false, false} | |
}; | |
diff --git a/samterm/menu.c b/samterm/menu.c | |
@@ -265,6 +265,12 @@ setpat(char *s) | |
menu2str[Search] = pat; | |
} | |
+bool | |
+haspat(void) | |
+{ | |
+ return (bool)(menu2str[Search]); | |
+} | |
+ | |
#define NBUF 64 | |
static uchar buf[NBUF*UTFmax]={' ', ' ', ' ', ' '}; | |
diff --git a/samterm/samrc.c b/samterm/samrc.c | |
@@ -45,6 +45,9 @@ static Namemapping commandmapping[] ={ | |
{"bol", Cbol}, | |
{"tab", Ctab}, | |
{"send", Csend}, | |
+ {"look", Clook}, | |
+ {"search", Csearch}, | |
+ {"write", Cwrite}, | |
{NULL, 0} | |
}; | |
diff --git a/samterm/samterm.h b/samterm/samterm.h | |
@@ -6,7 +6,6 @@ | |
#define NL 5 | |
enum{ | |
- | |
Cescape = Csysmax + 1, /* highlight recently typed text */ | |
Cscrolldown, /* scroll file down by screen */ | |
Cscrollup, /* scroll file up by screen */ | |
@@ -29,6 +28,9 @@ enum{ | |
Cbol, /* move to end of line */ | |
Ctab, /* insert a possibly expanded tab */ | |
Csend, /* send a command to the editor */ | |
+ Cwrite, /* write the current file */ | |
+ Clook, /* literal search */ | |
+ Csearch, /* search for regex again */ | |
Cmax /* invalid command */ | |
}; | |
@@ -148,6 +150,7 @@ void menuins(int, uchar*, Text*, int, int); | |
void menudel(int); | |
Text *sweeptext(int, int); | |
void setpat(char*); | |
+bool haspat(void); | |
void scrdraw(Flayer*, long tot); | |
int rcontig(Rasp*, ulong, ulong, int); | |
int rmissing(Rasp*, ulong, ulong); |