170 lines · 4.8 KB · Text
RawDownload
diff -r 4f495f8070af src/cmd/acme/dat.h--- a/src/cmd/acme/dat.h	Mon Sep 12 12:36:30 2011 -0400+++ b/src/cmd/acme/dat.h	Wed Nov 23 16:26:45 2011 +0100@@ -271,6 +271,7 @@ 	int		taglines; 	Rectangle	tagtop; 	QLock	editoutlk;+	int		backwards; };  void	wininit(Window*, Window*, Rectangle);diff -r 4f495f8070af src/cmd/acme/exec.c--- a/src/cmd/acme/exec.c	Mon Sep 12 12:36:30 2011 -0400+++ b/src/cmd/acme/exec.c	Wed Nov 23 16:26:45 2011 +0100@@ -49,6 +49,7 @@ void	paste(Text*, Text*, Text*, int, int, Rune*, int); void	put(Text*, Text*, Text*, int, int, Rune*, int); void	putall(Text*, Text*, Text*, int, int, Rune*, int);+void	rev(Text*, Text*, Text*, int, int, Rune*, int); void	sendx(Text*, Text*, Text*, int, int, Rune*, int); void	sort(Text*, Text*, Text*, int, int, Rune*, int); void	tab(Text*, Text*, Text*, int, int, Rune*, int);@@ -87,6 +88,7 @@ static Rune LPut[] = { 'P', 'u', 't', 0 }; static Rune LPutall[] = { 'P', 'u', 't', 'a', 'l', 'l', 0 }; static Rune LRedo[] = { 'R', 'e', 'd', 'o', 0 };+static Rune LRev[] = { 'R', 'e', 'v', 0 }; static Rune LSend[] = { 'S', 'e', 'n', 'd', 0 }; static Rune LSnarf[] = { 'S', 'n', 'a', 'r', 'f', 0 }; static Rune LSort[] = { 'S', 'o', 'r', 't', 0 };@@ -118,6 +120,7 @@ 	{ LPut,		put,		FALSE,	XXX,		XXX		}, 	{ LPutall,		putall,	FALSE,	XXX,		XXX		}, 	{ LRedo,		undo,	FALSE,	FALSE,	XXX		},+	{ LRev,		rev,	FALSE,	FALSE,	XXX		}, 	{ LSend,		sendx,	TRUE,	XXX,		XXX		}, 	{ LSnarf,		cut,		FALSE,	TRUE,	FALSE	}, 	{ LSort,		sort,		FALSE,	XXX,		XXX		},@@ -402,6 +405,22 @@ }  void+rev(Text *et, Text *_1, Text *_2, int _3, int _4, Rune *_5, int _6)+{+	USED(_1);+	USED(_2);+	USED(_3);+	USED(_4);+	USED(_4);+	USED(_6);++	if (et->w->backwards) +		et->w->backwards = 0;+	else +		et->w->backwards = 1;+}++void sort(Text *et, Text *_0, Text *_1, int _2, int _3, Rune *_4, int _5) { 	USED(_0);diff -r 4f495f8070af src/cmd/acme/fns.h--- a/src/cmd/acme/fns.h	Mon Sep 12 12:36:30 2011 -0400+++ b/src/cmd/acme/fns.h	Wed Nov 23 16:26:45 2011 +0100@@ -83,6 +83,7 @@ void *erealloc(void*, uint); char	*estrdup(char*); Range		address(uint, Text*, Range, Range, void*, uint, uint, int (*)(void*, uint),  int*, uint*);+Range	regexp(uint showerr, Text *t, Range lim, Range r, Rune *pat, int dir, int *foundp); int		rxexecute(Text*, Rune*, uint, uint, Rangeset*); int		rxbexecute(Text*, uint, Rangeset*); Window*	makenewwindow(Text *t);diff -r 4f495f8070af src/cmd/acme/look.c--- a/src/cmd/acme/look.c	Mon Sep 12 12:36:30 2011 -0400+++ b/src/cmd/acme/look.c	Wed Nov 23 16:26:45 2011 +0100@@ -89,6 +89,10 @@ 	Plumbmsg *m; 	Runestr dir; 	char buf[32];+	// for backwards search+	int eval;+	Range ra;+	Rune *pat;  	ct = seltext; 	if(ct == nil)@@ -182,6 +186,12 @@ 		bufread(&t->file->b, q0, r, q1-q0); 		m->data = runetobyte(r, q1-q0); 		m->ndata = strlen(m->data);+		if (t->w != nil && t->w->backwards) {+			pat = runemalloc(q1-q0+1);+			for (eval = 0; eval < q1-q0; eval++)+				pat[eval] = r[eval];+			pat[q1-q0] = 0;+		} 		free(r); 		if(m->ndata<messagesize-1024 && plumbsendtofid(plumbsendfid, m) >= 0){ 			plumbfree(m);@@ -192,11 +202,27 @@ 	}  	/* interpret alphanumeric string ourselves */-	if(expanded == FALSE)+	if(expanded == FALSE) {+		if (t->w != nil && t->w->backwards) {+			free(pat);+		} 		return;+	} 	if(e.name || e.u.at) 		openfile(t, &e); 	else{+		if (t->w != nil && t->w->backwards) {+			ra = range(e.q0, e.q1);+			ra = regexp(TRUE, t, range(-1,-1), ra, pat, '-', &eval);+			if (ra.q0 < 0 || ra.q1 < 0) {+				goto Return;+			}		+			textshow(t, ra.q0, ra.q1, 1);+			winsettag(t->w);+			seltext = t;+			moveto(mousectl, addpt(frptofchar(&t->fr, t->fr.p0), Pt(4, font->height-4)));+			goto Return;+		} 		if(t->w == nil) 			return; 		ct = &t->w->body;@@ -215,6 +241,9 @@ 	}     Return:+	if (t->w != nil && t->w->backwards) {+		free(pat);+	} 	free(e.name); 	free(e.bname); }@@ -640,7 +669,7 @@ 			e->jump = FALSE; 	} -	if(expandfile(t, q0, q1, e))+	if(expandfile(t, q0, q1, e))  		return TRUE;  	if(q0 == q1){diff -r 4f495f8070af src/cmd/acme/wind.c--- a/src/cmd/acme/wind.c	Mon Sep 12 12:36:30 2011 -0400+++ b/src/cmd/acme/wind.c	Wed Nov 23 16:26:45 2011 +0100@@ -408,7 +408,7 @@ 	Rune *new, *old, *r; 	uint q0, q1; 	static Rune Ldelsnarf[] = { ' ', 'D', 'e', 'l', ' ',-		'S', 'n', 'a', 'r', 'f', 0 };+		'S', 'n', 'a', 'r', 'f', ' ', 'R', 'e', 'v', 0 }; 	static Rune Lundo[] = { ' ', 'U', 'n', 'd', 'o', 0 }; 	static Rune Lredo[] = { ' ', 'R', 'e', 'd', 'o', 0 }; 	static Rune Lget[] = { ' ', 'G', 'e', 't', 0 };@@ -439,8 +439,8 @@ 	i = 0; 	runemove(new+i, w->body.file->name, w->body.file->nname); 	i += w->body.file->nname;-	runemove(new+i, Ldelsnarf, 10);-	i += 10;+	runemove(new+i, Ldelsnarf, 14);+	i += 14; 	if(w->filemenu){ 		if(w->body.needundo || w->body.file->delta.nc>0 || w->body.ncache){ 			runemove(new+i, Lundo, 5);