From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-lj1-f178.google.com ([209.85.208.178]) by ewsd; Thu Apr 9 09:18:09 EDT 2020 Received: by mail-lj1-f178.google.com with SMTP id z26so7291183ljz.11 for <9front@9front.org>; Thu, 09 Apr 2020 06:18:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=fJcCi1xaflhj+EHUOeKzvBWHrY0o+1y2kvEbaMADLOQ=; b=Z4vi1G0xfPzHa82q70dPwXc/vtpAhdezZbjR1NO8CGTyi4Z4zetCloTOAyEeEyVN1m 8LXwQyo0nostxKtA6LqrhcBCXqNtKpIMACiXkcf7epmYZpmvNqlsaVgQhXjGvbokiIBK hmB653LjlWBP7Qp7C/K81fgbAeGh7CpRr4stLfckGJ50lC/ILIkxbriqIFDrJhs/eQnt wStMqf1sfnnCPvGR7tmvIdhBufUZhwifDJhtE0V4PNVBbddoK6bWsMA6bu0fq+Rrrv41 e6vyU6kEOlw4eW0aZIryF2dBr0sLASmkDKOTcIjtWCMBhNCFxP54Fd3Y6126mNBVE+9O mh4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=fJcCi1xaflhj+EHUOeKzvBWHrY0o+1y2kvEbaMADLOQ=; b=YnvCRyLExClor7CSxHqoh14/p/mnqdqgDkPwfvDGLjKwXxqBgU206hwRDm8p9ZW3zQ 70UG/SJNUPzSvKzhN63P65CWFC8saglWE+RSvR3u8tznws1eLha1B9+6wugC8g1yrDYs /qXbhAk5Nc6HTpdtDom+YM5mBNCPUOtSXqcppPvk8jJWKFnQtsbVJpRKdskWJAi4BtXE gHEewV5BErXUwSwKA4OKGm6T1fCdIDv+izxq6DWnJVn4T3uan5N/m3xHV1xpVUEXarWQ aNwvIaqfZLiZVN0GxXO3RWN+oIrfz2WYqN48lBdc+pd8RaKpjvQJTA0FTYhX/tn5kn1f 1ZRw== X-Gm-Message-State: AGi0Pub4nLLj8V5ZzosAM8/aSpOsNd8mJTxaBAYas8Q+OK9v5vQSyH8E 3X9rlS80tOIOibkDmEPMT+kRpIzMeEe3UmK5L+4OwiAR X-Google-Smtp-Source: APiQypIQjB8N3LXAF59CnsQyCXlGliGaCCdY1av8Md/KoCRVKKcftWuIOFkqgZoCYAmKJ4+gc9YXMw+Dc5Hltu36vCY= X-Received: by 2002:a2e:909a:: with SMTP id l26mr5723913ljg.177.1586438284526; Thu, 09 Apr 2020 06:18:04 -0700 (PDT) MIME-Version: 1.0 References: <9D7F8C1E1CC78D19A9F91B2878C1547C@eigenstate.org> In-Reply-To: <9D7F8C1E1CC78D19A9F91B2878C1547C@eigenstate.org> From: =?UTF-8?Q?Iruat=C3=A3_Souza?= Date: Thu, 9 Apr 2020 15:17:52 +0200 Message-ID: Subject: Re: [9front] vt plumbing: empty selection To: ori@eigenstate.org Cc: 9front@9front.org Content-Type: text/plain; charset="UTF-8" List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: rich-client information wrapper property controller why not if (x0 == x1) return nil; s = malloc((x1 - x0 + 1)*UTFmax); if (s == nil) return nil; On Thu, Apr 9, 2020 at 3:06 PM wrote: > > > sorry 1 * UTFmax > > > > That, plus some debug printing. > > Updated: > > diff -r 3bcb5998f222 sys/src/cmd/vt/main.c > --- a/sys/src/cmd/vt/main.c Wed Apr 08 23:48:09 2020 +0200 > +++ b/sys/src/cmd/vt/main.c Thu Apr 09 06:06:11 2020 -0700 > @@ -170,7 +170,7 @@ > void escapedump(int,uchar *,int); > void paste(void); > void snarfsel(void); > -void plumbsel(void); > +void plumbsel(Point); > > static Channel *pidchan; > > @@ -982,13 +982,44 @@ > free(s); > } > > +/* > + * Grabs the non-whitespace text around a character > + * cell, matching the behavior in rio for plumbing. > + * Does not modify the selection. > + */ > +char* > +surrounding(Point p) > +{ > + int c, x0, x1; > + char *s, *e; > + > + for(x0 = p.x; x0 > 0; x0--){ > + c = *onscreenr(x0 - 1, p.y); > + if(c == 0 || c == ' ' || c == '\t' || c == '\n') > + break; > + } > + for(x1 = p.x; x1 <= xmax; x1++){ > + c = *onscreenr(x1 + 1, p.y); > + if(c == 0 || c == ' ' || c == '\t' || c == '\n') > + break; > + } > + if(s == nil || x0 == x1) > + return nil; > + s = malloc((x1 - x0 + 1)*UTFmax); > + e = selrange(s, x0, p.y, x1, p.y); > + return s; > +} > + > void > -plumbsel(void) > +plumbsel(Point p) > { > char *s, wdir[1024]; > int plumb; > > - if((s = selection()) == nil) > + s = selection(); > + if(s == nil || *s == 0) > + s = surrounding(p); > + if(s == nil) > return; > if(getwd(wdir, sizeof wdir) == nil){ > free(s); > @@ -1116,6 +1147,9 @@ > void > readmenu(void) > { > + Point p; > + > + p = pos(mc->xy); > if(button3()) { > menu3.item[1] = ttystate[cs->raw].crnl ? "cr" : "crnl"; > menu3.item[2] = ttystate[cs->raw].nlcr ? "nl" : "nlcr"; > @@ -1173,7 +1207,7 @@ > return; > > case Mplumb: > - plumbsel(); > + plumbsel(p); > return; > > case Mpage: /* pause and clear at end of screen */ >