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