mothra: fix alt display resizing, filter control characters in panel entries, use uslstr() instead of selection->fullname as fullname gets truncated in selurl()
This commit is contained in:
parent
e2ed2a0b7e
commit
b697e8655a
|
@ -19,6 +19,8 @@
|
|||
#include <event.h>
|
||||
#include <panel.h>
|
||||
#include "pldefs.h"
|
||||
#include <keyboard.h>
|
||||
|
||||
typedef struct Edit Edit;
|
||||
struct Edit{
|
||||
Point minsize;
|
||||
|
@ -122,15 +124,15 @@ void pl_typeedit(Panel *p, Rune c){
|
|||
t->b=p->b;
|
||||
twhilite(t, ep->sel0, ep->sel1, 0);
|
||||
switch(c){
|
||||
case '\b':
|
||||
case Kbs: /* ^H: erase character */
|
||||
if(ep->sel0!=0) --ep->sel0;
|
||||
twreplace(t, ep->sel0, ep->sel1, 0, 0);
|
||||
break;
|
||||
case '\025': /* ctrl-u */
|
||||
case Knack: /* ^U: erase line */
|
||||
while(ep->sel0!=0 && t->text[ep->sel0-1]!='\n') --ep->sel0;
|
||||
twreplace(t, ep->sel0, ep->sel1, 0, 0);
|
||||
break;
|
||||
case '\027': /* ctrl-w */
|
||||
case Ketb: /* ^W: erase word */
|
||||
while(ep->sel0!=0 && !pl_idchar(t->text[ep->sel0-1])) --ep->sel0;
|
||||
while(ep->sel0!=0 && pl_idchar(t->text[ep->sel0-1])) --ep->sel0;
|
||||
twreplace(t, ep->sel0, ep->sel1, 0, 0);
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
#include <event.h>
|
||||
#include <panel.h>
|
||||
#include "pldefs.h"
|
||||
#include <keyboard.h>
|
||||
|
||||
typedef struct Entry Entry;
|
||||
struct Entry{
|
||||
char *entry;
|
||||
|
@ -47,15 +49,15 @@ void pl_typeentry(Panel *p, Rune c){
|
|||
*ep->entp='\0';
|
||||
if(ep->hit) ep->hit(p, ep->entry);
|
||||
return;
|
||||
case 025: /* ctrl-u */
|
||||
case Knack: /* ^U: erase line */
|
||||
ep->entp=ep->entry;
|
||||
*ep->entp='\0';
|
||||
break;
|
||||
case '\b':
|
||||
case Kbs: /* ^H: erase character */
|
||||
while(ep->entp!=ep->entry && !pl_rune1st(ep->entp[-1])) *--ep->entp='\0';
|
||||
if(ep->entp!=ep->entry) *--ep->entp='\0';
|
||||
break;
|
||||
case 027: /* ctrl-w */
|
||||
case Ketb: /* ^W: erase word */
|
||||
while(ep->entp!=ep->entry && !pl_idchar(ep->entp[-1]))
|
||||
--ep->entp;
|
||||
while(ep->entp!=ep->entry && pl_idchar(ep->entp[-1]))
|
||||
|
@ -63,6 +65,8 @@ void pl_typeentry(Panel *p, Rune c){
|
|||
*ep->entp='\0';
|
||||
break;
|
||||
default:
|
||||
if(c < 0x20 || c == Kesc || c == Kdel || (c & 0xFF00) == KF || (c & 0xFF00) == Spec)
|
||||
break;
|
||||
ep->entp+=runetochar(ep->entp, &c);
|
||||
if(ep->entp>ep->eent){
|
||||
n=ep->entp-ep->entry;
|
||||
|
@ -77,8 +81,6 @@ void pl_typeentry(Panel *p, Rune c){
|
|||
break;
|
||||
}
|
||||
memset(ep->entp, 0, SLACK);
|
||||
|
||||
/* strcpy(ep->entp, "◀"); */
|
||||
pldraw(p, p->b);
|
||||
}
|
||||
Point pl_getsizeentry(Panel *p, Point children){
|
||||
|
|
|
@ -92,6 +92,7 @@ int logfile;
|
|||
int mothmode;
|
||||
void docmd(Panel *, char *);
|
||||
void doprev(Panel *, int, int);
|
||||
char *urlstr(Url *);
|
||||
void selurl(char *);
|
||||
void setcurrent(int, char *);
|
||||
char *genwww(Panel *, int);
|
||||
|
@ -449,6 +450,7 @@ void eresized(int new){
|
|||
plinitlabel(curttl, PACKE|EXPAND, "---");
|
||||
plinitlabel(cururl, PACKE|EXPAND, "---");
|
||||
plpack(root, r);
|
||||
plpack(alt, r);
|
||||
if(current){
|
||||
plinitlabel(curttl, PACKE|EXPAND, current->title);
|
||||
plinitlabel(cururl, PACKE|EXPAND, current->url->fullname);
|
||||
|
@ -611,10 +613,8 @@ char *urltofile(Url *url){
|
|||
char *name, *slash;
|
||||
if(url == nil)
|
||||
return nil;
|
||||
if(url->fullname[0])
|
||||
name = url->fullname;
|
||||
else if(url->reltext[0])
|
||||
name = url->reltext;
|
||||
if(url->fullname[0] || url->reltext[0])
|
||||
name = urlstr(url);
|
||||
else
|
||||
name = "/";
|
||||
if(slash = strrchr(name, '/'))
|
||||
|
@ -647,12 +647,13 @@ void docmd(Panel *p, char *s){
|
|||
case 'g':
|
||||
s = arg(s);
|
||||
if(*s=='\0'){
|
||||
case 'r':
|
||||
if(selection)
|
||||
geturl(selection->fullname, GET, 0, 0, 0);
|
||||
s = urlstr(selection);
|
||||
else
|
||||
message("no url selected");
|
||||
}
|
||||
else geturl(s, GET, 0, 0, 0);
|
||||
geturl(s, GET, 0, 0, 0);
|
||||
break;
|
||||
case 'j':
|
||||
s = arg(s);
|
||||
|
@ -661,11 +662,6 @@ void docmd(Panel *p, char *s){
|
|||
else
|
||||
message("Usage: j index");
|
||||
break;
|
||||
case 'r':
|
||||
s = arg(s);
|
||||
if(*s=='\0' && selection)
|
||||
geturl(selection->fullname, GET, 0, 0, 0);
|
||||
break;
|
||||
case 'W':
|
||||
s = arg(s);
|
||||
if(s=='\0'){
|
||||
|
@ -684,15 +680,17 @@ void docmd(Panel *p, char *s){
|
|||
break;
|
||||
case 's':
|
||||
s = arg(s);
|
||||
if(selection){
|
||||
if(s==0 || *s=='\0')
|
||||
s = urltofile(selection);
|
||||
if(s==0 || *s=='\0'){
|
||||
message("Usage: s file");
|
||||
break;
|
||||
}
|
||||
save(urlopen(selection, GET, 0), s);
|
||||
if(!selection){
|
||||
message("no url selected");
|
||||
break;
|
||||
}
|
||||
if(s==0 || *s=='\0')
|
||||
s = urltofile(selection);
|
||||
if(s==0 || *s=='\0'){
|
||||
message("Usage: s file");
|
||||
break;
|
||||
}
|
||||
save(urlopen(selection, GET, 0), s);
|
||||
break;
|
||||
case 'q':
|
||||
draw(screen, screen->r, display->white, 0, ZP);
|
||||
|
@ -927,16 +925,21 @@ Err:
|
|||
return pfd[1];
|
||||
}
|
||||
|
||||
/*
|
||||
* select the file at the given url
|
||||
*/
|
||||
char*
|
||||
urlstr(Url *url){
|
||||
if(url->fullname[0])
|
||||
return url->fullname;
|
||||
if(url->reltext[0])
|
||||
return url->reltext;
|
||||
return nil;
|
||||
}
|
||||
void selurl(char *urlname){
|
||||
static Url url;
|
||||
seturl(&url, urlname, current?
|
||||
current->url->fullname :
|
||||
defurl.fullname);
|
||||
selection=&url;
|
||||
message("selected: %s", selection->fullname[0] ? selection->fullname : selection->reltext);
|
||||
message("selected: %s", urlstr(selection));
|
||||
}
|
||||
void seturl(Url *url, char *urlname, char *base){
|
||||
strncpy(url->reltext, urlname, sizeof(url->reltext));
|
||||
|
@ -1126,7 +1129,7 @@ void snarf(Panel *p){
|
|||
int fd;
|
||||
fd=create("/dev/snarf", OWRITE, 0666);
|
||||
if(fd>=0){
|
||||
fprint(fd, "%s", selection->fullname[0] ? selection->fullname : selection->reltext);
|
||||
fprint(fd, "%s", urlstr(selection));
|
||||
close(fd);
|
||||
}
|
||||
}
|
||||
|
@ -1187,8 +1190,7 @@ void hit3(int button, int item){
|
|||
fprint(fd, "<body><h1>Hit list</h1>\n");
|
||||
}
|
||||
seek(fd, 0, 2);
|
||||
fprint(fd, "<p><a href=\"%s\">%s</a>\n",
|
||||
selection->fullname, selection->fullname);
|
||||
fprint(fd, "<p><a href=\"%s\">%s</a>\n", urlstr(selection), urlstr(selection));
|
||||
close(fd);
|
||||
break;
|
||||
case 5:
|
||||
|
|
Loading…
Reference in a new issue