mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-27 11:52:03 +00:00
fix acme Snarf bug; change Indent to apply to all windows
This commit is contained in:
parent
be81682daa
commit
9952c0eb9f
2 changed files with 38 additions and 17 deletions
|
@ -371,7 +371,7 @@ set the mode for the current window;
|
||||||
.B ON
|
.B ON
|
||||||
and
|
and
|
||||||
.B OFF
|
.B OFF
|
||||||
set the mode for the current window and all future windows.
|
set the mode for all existing and future windows.
|
||||||
.TP
|
.TP
|
||||||
.B Kill
|
.B Kill
|
||||||
Send a
|
Send a
|
||||||
|
|
|
@ -14,6 +14,22 @@
|
||||||
|
|
||||||
Buffer snarfbuf;
|
Buffer snarfbuf;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* These functions get called as:
|
||||||
|
*
|
||||||
|
* fn(et, t, argt, flag1, flag1, flag2, s, n);
|
||||||
|
*
|
||||||
|
* Where the arguments are:
|
||||||
|
*
|
||||||
|
* et: the Text* in which the executing event (click) occurred
|
||||||
|
* t: the Text* containing the current selection (Edit, Cut, Snarf, Paste)
|
||||||
|
* argt: the Text* containing the argument for a 2-1 click.
|
||||||
|
* e->flag1: from Exectab entry
|
||||||
|
* e->flag2: from Exectab entry
|
||||||
|
* s: the command line remainder (e.g., "x" if executing "Dump x")
|
||||||
|
* n: length of s (s is *not* NUL-terminated)
|
||||||
|
*/
|
||||||
|
|
||||||
void doabort(Text*, Text*, Text*, int, int, Rune*, int);
|
void doabort(Text*, Text*, Text*, int, int, Rune*, int);
|
||||||
void del(Text*, Text*, Text*, int, int, Rune*, int);
|
void del(Text*, Text*, Text*, int, int, Rune*, int);
|
||||||
void delcol(Text*, Text*, Text*, int, int, Rune*, int);
|
void delcol(Text*, Text*, Text*, int, int, Rune*, int);
|
||||||
|
@ -766,7 +782,12 @@ cut(Text *et, Text *t, Text *_0, int dosnarf, int docut, Rune *_2, int _3)
|
||||||
USED(_2);
|
USED(_2);
|
||||||
USED(_3);
|
USED(_3);
|
||||||
|
|
||||||
/* use current window if snarfing and its selection is non-null */
|
/*
|
||||||
|
* if not executing a mouse chord (et != t) and snarfing (dosnarf)
|
||||||
|
* and executed Cut or Snarf in window tag (et->w != nil),
|
||||||
|
* then use the window body selection or the tag selection
|
||||||
|
* or do nothing at all.
|
||||||
|
*/
|
||||||
if(et!=t && dosnarf && et->w!=nil){
|
if(et!=t && dosnarf && et->w!=nil){
|
||||||
if(et->w->body.q1>et->w->body.q0){
|
if(et->w->body.q1>et->w->body.q0){
|
||||||
t = &et->w->body;
|
t = &et->w->body;
|
||||||
|
@ -774,11 +795,12 @@ cut(Text *et, Text *t, Text *_0, int dosnarf, int docut, Rune *_2, int _3)
|
||||||
filemark(t->file); /* seq has been incremented by execute */
|
filemark(t->file); /* seq has been incremented by execute */
|
||||||
}else if(et->w->tag.q1>et->w->tag.q0)
|
}else if(et->w->tag.q1>et->w->tag.q0)
|
||||||
t = &et->w->tag;
|
t = &et->w->tag;
|
||||||
|
else
|
||||||
|
t = nil;
|
||||||
}
|
}
|
||||||
if(t == nil){
|
if(t == nil) /* no selection */
|
||||||
/* can only happen if seltext == nil */
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
locked = FALSE;
|
locked = FALSE;
|
||||||
if(t->w!=nil && et->w!=t->w){
|
if(t->w!=nil && et->w!=t->w){
|
||||||
locked = TRUE;
|
locked = TRUE;
|
||||||
|
@ -1008,7 +1030,6 @@ putall(Text *et, Text *_0, Text *_1, int _2, int _3, Rune *_4, int _5)
|
||||||
void
|
void
|
||||||
id(Text *et, Text *_0, Text *_1, int _2, int _3, Rune *_4, int _5)
|
id(Text *et, Text *_0, Text *_1, int _2, int _3, Rune *_4, int _5)
|
||||||
{
|
{
|
||||||
USED(et);
|
|
||||||
USED(_0);
|
USED(_0);
|
||||||
USED(_1);
|
USED(_1);
|
||||||
USED(_2);
|
USED(_2);
|
||||||
|
@ -1219,6 +1240,13 @@ indentval(Rune *s, int n)
|
||||||
return runestrncmp(s, Lon, n) == 0;
|
return runestrncmp(s, Lon, n) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
fixindent(Window *w, void *arg)
|
||||||
|
{
|
||||||
|
USED(arg);
|
||||||
|
w->autoindent = globalautoindent;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
indent(Text *et, Text *_0, Text *argt, int _1, int _2, Rune *arg, int narg)
|
indent(Text *et, Text *_0, Text *argt, int _1, int _2, Rune *arg, int narg)
|
||||||
{
|
{
|
||||||
|
@ -1242,17 +1270,10 @@ indent(Text *et, Text *_0, Text *argt, int _1, int _2, Rune *arg, int narg)
|
||||||
if(a != arg)
|
if(a != arg)
|
||||||
autoindent = indentval(arg, narg-na);
|
autoindent = indentval(arg, narg-na);
|
||||||
}
|
}
|
||||||
if(w != nil){
|
if(autoindent == IGlobal)
|
||||||
switch(autoindent){
|
allwindows(fixindent, nil);
|
||||||
case Ion:
|
else if(w != nil && autoindent >= 0)
|
||||||
case Ioff:
|
w->autoindent = autoindent;
|
||||||
w->autoindent = autoindent;
|
|
||||||
break;
|
|
||||||
case IGlobal:
|
|
||||||
w->autoindent = globalautoindent;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
Loading…
Reference in a new issue