A quick-and-dirty patch to acme that introduces 'edit', a new acme(4)
file, to which Edit commands can be written. With this,
echo -n ',d' >/mnt/acme/$winid/edit
would delete the window's content. I am planning to port this to Acme
SAC, so that I can write acme scripts that don't depend on sed/ed,
which are only partially implemented in Inferno.
Comments welcome.
Thanks.
Arvindh
acme-sources/dat.h:14,19 - acme/dat.h:14,20
QWbody,
QWctl,
QWdata,
+ QWedit,
QWeditout,
QWerrors,
QWevent,
diff -c acme-sources/fsys.c acme/fsys.c
acme-sources/fsys.c:80,85 - acme/fsys.c:80,86
{ "body", QTAPPEND, QWbody, 0600|DMAPPEND },
{ "ctl", QTFILE, QWctl, 0600 },
{ "data", QTFILE, QWdata, 0600 },
+ { "edit", QTFILE, QWedit, 0200 },
{ "editout", QTFILE, QWeditout, 0200 },
{ "errors", QTFILE, QWerrors, 0200 },
{ "event", QTFILE, QWevent, 0600 },
diff -c acme-sources/xfid.c acme/xfid.c
acme-sources/xfid.c:110,116 - acme/xfid.c:110,119
break;
case QWdata:
case QWxdata:
+ case QWedit:
w->nopen[q]++;
+ seq++;
+ filemark(t->file);
break;
case QWevent:
if(w->nopen[q]++ == 0){
acme-sources/xfid.c:215,226 - acme/xfid.c:218,230
break;
case QWdata:
case QWxdata:
+ case QWedit:
w->nomark = FALSE;
/* fall through */
case QWaddr:
case QWevent: /* BUG: do we need to shut down Xfid? */
if(--w->nopen[q] == 0){
- if(q == QWdata || q == QWxdata)
+ if(q == QWdata || q == QWxdata || q == QWedit)
w->nomark = FALSE;
if(q==QWevent && !w->isdir && w->col!=nil){
w->filemenu = TRUE;
acme-sources/xfid.c:423,428 - acme/xfid.c:427,445
break;
}
w->addr = a;
+ fc.count = x->count;
+ respond(x, &fc, nil);
+ break;
+
+ case QWedit:
+ x->data[x->count] = 0;
+ r = bytetorune(x->data, &nr);
+ t = &w->body;
+ wincommit(w, t);
+ if(w->nomark == FALSE)
+ seq++;
+ editcmd(t, r, nr);
+ free(r);
fc.count = x->count;
respond(x, &fc, nil);
break;