add autoindent (-a) and chording.
clean up argument parsing.
This commit is contained in:
parent
4ac5f249ad
commit
17ab31aac6
8 changed files with 113 additions and 74 deletions
|
|
@ -253,10 +253,11 @@ fldelete(Flayer *l, long p0, long p1)
|
|||
int
|
||||
flselect(Flayer *l)
|
||||
{
|
||||
int ret = 0;
|
||||
int ret;
|
||||
if(l->visible!=All)
|
||||
flupfront(l);
|
||||
frselect(&l->f, mousectl);
|
||||
ret = 0;
|
||||
if(l->f.p0==l->f.p1){
|
||||
if(mousep->msec-l->click<Clicktime && l->f.p0+l->origin==l->p0){
|
||||
ret = 1;
|
||||
|
|
|
|||
|
|
@ -23,11 +23,13 @@ long modified = 0; /* strange lookahead for menus */
|
|||
char hostlock = 1;
|
||||
char hasunlocked = 0;
|
||||
int maxtab = 8;
|
||||
int chord;
|
||||
int autoindent;
|
||||
|
||||
void
|
||||
threadmain(int argc, char *argv[])
|
||||
{
|
||||
int i, got, scr;
|
||||
int i, got, scr, w;
|
||||
Text *t;
|
||||
Rectangle r;
|
||||
Flayer *nwhich;
|
||||
|
|
@ -98,7 +100,11 @@ dup(2, 1);
|
|||
scr = which && ptinrect(mousep->xy, which->scroll);
|
||||
if(mousep->buttons)
|
||||
flushtyping(1);
|
||||
if(mousep->buttons&1){
|
||||
if(chord==1 && !mousep->buttons)
|
||||
chord = 0;
|
||||
if(chord)
|
||||
chord |= mousep->buttons;
|
||||
else if(mousep->buttons&1){
|
||||
if(nwhich){
|
||||
if(nwhich!=which)
|
||||
current(nwhich);
|
||||
|
|
@ -111,6 +117,8 @@ dup(2, 1);
|
|||
t->lock++;
|
||||
}else if(t!=&cmd)
|
||||
outcmd();
|
||||
if(mousep->buttons&1)
|
||||
chord = mousep->buttons;
|
||||
}
|
||||
}
|
||||
}else if((mousep->buttons&2) && which){
|
||||
|
|
@ -126,10 +134,22 @@ dup(2, 1);
|
|||
}
|
||||
mouseunblock();
|
||||
}
|
||||
if(chord){
|
||||
t = (Text*)which->user1;
|
||||
if(!t->lock && !hostlock){
|
||||
w = which-t->l;
|
||||
if(chord&2){
|
||||
cut(t, w, 1, 1);
|
||||
chord &= ~2;
|
||||
}else if(chord&4){
|
||||
paste(t, w);
|
||||
chord &= ~4;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
resize(void)
|
||||
{
|
||||
|
|
@ -394,7 +414,7 @@ center(Flayer *l, long a)
|
|||
}
|
||||
|
||||
int
|
||||
onethird(Flayer *l, long a)
|
||||
thirds(Flayer *l, long a, int n)
|
||||
{
|
||||
Text *t;
|
||||
Rectangle s;
|
||||
|
|
@ -405,7 +425,7 @@ onethird(Flayer *l, long a)
|
|||
if(a > t->rasp.nrunes)
|
||||
a = t->rasp.nrunes;
|
||||
s = insetrect(l->scroll, 1);
|
||||
lines = ((s.max.y-s.min.y)/l->f.font->height+1)/3;
|
||||
lines = (n*(s.max.y-s.min.y)/l->f.font->height+1)/3;
|
||||
if (lines < 2)
|
||||
lines = 2;
|
||||
outTsll(Torigin, t->tag, a, lines);
|
||||
|
|
@ -414,6 +434,18 @@ onethird(Flayer *l, long a)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
onethird(Flayer *l, long a)
|
||||
{
|
||||
return thirds(l, a, 1);
|
||||
}
|
||||
|
||||
int
|
||||
twothirds(Flayer *l, long a)
|
||||
{
|
||||
return thirds(l, a, 2);
|
||||
}
|
||||
|
||||
void
|
||||
flushtyping(int clearesc)
|
||||
{
|
||||
|
|
@ -495,7 +527,20 @@ type(Flayer *l, int res) /* what a bloody mess this is */
|
|||
}
|
||||
}
|
||||
*p++ = c;
|
||||
if(c == '\n' || p >= buf+sizeof(buf)/sizeof(buf[0]))
|
||||
if(autoindent)
|
||||
if(c == '\n'){
|
||||
/* autoindent */
|
||||
int cursor, ch;
|
||||
cursor = ctlu(&t->rasp, 0, a+(p-buf)-1);
|
||||
while(p < buf+nelem(buf)){
|
||||
ch = raspc(&t->rasp, cursor++);
|
||||
if(ch == ' ' || ch == '\t')
|
||||
*p++ = ch;
|
||||
else
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(c == '\n' || p >= buf+nelem(buf))
|
||||
break;
|
||||
}
|
||||
if(p > buf){
|
||||
|
|
|
|||
|
|
@ -25,17 +25,28 @@ static char *exname;
|
|||
|
||||
#define STACK 16384
|
||||
|
||||
void
|
||||
usage(void)
|
||||
{
|
||||
fprint(2, "usage: samterm -a -W winsize\n");
|
||||
threadexitsall("usage");
|
||||
}
|
||||
|
||||
void
|
||||
getscreen(int argc, char **argv)
|
||||
{
|
||||
int i;
|
||||
char *t;
|
||||
|
||||
/* not exactly right */
|
||||
for(i=0; i<argc-1; i++){
|
||||
if(strcmp(argv[i], "-W") == 0)
|
||||
winsize = argv[i+1];
|
||||
}
|
||||
ARGBEGIN{
|
||||
case 'a':
|
||||
autoindent = 1;
|
||||
break;
|
||||
case 'W':
|
||||
winsize = EARGF(usage());
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
}ARGEND
|
||||
|
||||
if(initdraw(panic1, nil, "sam") < 0){
|
||||
fprint(2, "samterm: initdraw: %r\n");
|
||||
|
|
|
|||
|
|
@ -88,6 +88,7 @@ extern int hversion;
|
|||
extern int plumbfd;
|
||||
extern int hostfd[2];
|
||||
extern int exiting;
|
||||
extern int autoindent;
|
||||
|
||||
#define gettext sam_gettext /* stupid gcc built-in functions */
|
||||
Rune *gettext(Flayer*, long, ulong*);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue