mirror of
https://code.blicky.net/yorhel/ncdu.git
synced 2026-01-16 10:38:40 -09:00
List detected links in a separate tab in info window
This commit is contained in:
parent
88cd199d94
commit
93a97381bd
1 changed files with 124 additions and 33 deletions
157
src/browser.c
157
src/browser.c
|
|
@ -39,8 +39,9 @@
|
||||||
#define BF_INFO 0x80 /* show file information window */
|
#define BF_INFO 0x80 /* show file information window */
|
||||||
|
|
||||||
struct dir *browse_dir = NULL;
|
struct dir *browse_dir = NULL;
|
||||||
unsigned char graph = 0;
|
unsigned char graph = 0,
|
||||||
unsigned char flags = BF_SIZE | BF_DESC;
|
flags = BF_SIZE | BF_DESC,
|
||||||
|
info_page = 0, info_start = 0;
|
||||||
|
|
||||||
|
|
||||||
#define ishidden(x) (flags & BF_HIDE && (\
|
#define ishidden(x) (flags & BF_HIDE && (\
|
||||||
|
|
@ -129,22 +130,52 @@ struct dir *browse_sort(struct dir *list) {
|
||||||
|
|
||||||
|
|
||||||
void browse_draw_info(struct dir *dr) {
|
void browse_draw_info(struct dir *dr) {
|
||||||
|
struct dir *t;
|
||||||
|
int i,j;
|
||||||
|
|
||||||
nccreate(11, 60, "Item info");
|
nccreate(11, 60, "Item info");
|
||||||
|
|
||||||
attron(A_BOLD);
|
if(dr->hlnk) {
|
||||||
ncaddstr(2, 3, "Name:");
|
if(info_page == 0)
|
||||||
ncaddstr(3, 3, "Path:");
|
attron(A_REVERSE);
|
||||||
ncaddstr(4, 3, "Type:");
|
ncaddstr(0, 41, "1:Info");
|
||||||
ncaddstr(6, 3, " Disk usage:");
|
attroff(A_REVERSE);
|
||||||
ncaddstr(7, 3, "Apparent size:");
|
if(info_page == 1)
|
||||||
attroff(A_BOLD);
|
attron(A_REVERSE);
|
||||||
|
ncaddstr(0, 50, "2:Links");
|
||||||
|
attroff(A_REVERSE);
|
||||||
|
}
|
||||||
|
|
||||||
ncaddstr(2, 9, cropstr(dr->name, 49));
|
switch(info_page) {
|
||||||
ncaddstr(3, 9, cropstr(getpath(dr->parent), 49));
|
case 0:
|
||||||
ncaddstr(4, 9, dr->flags & FF_DIR ? "Directory"
|
attron(A_BOLD);
|
||||||
: dr->flags & FF_FILE ? "File" : "Other (link, device, socket, ..)");
|
ncaddstr(2, 3, "Name:");
|
||||||
ncprint(6, 18, "%s (%s B)", formatsize(dr->size), fullsize(dr->size));
|
ncaddstr(3, 3, "Path:");
|
||||||
ncprint(7, 18, "%s (%s B)", formatsize(dr->asize), fullsize(dr->asize));
|
ncaddstr(4, 3, "Type:");
|
||||||
|
ncaddstr(6, 3, " Disk usage:");
|
||||||
|
ncaddstr(7, 3, "Apparent size:");
|
||||||
|
attroff(A_BOLD);
|
||||||
|
|
||||||
|
ncaddstr(2, 9, cropstr(dr->name, 49));
|
||||||
|
ncaddstr(3, 9, cropstr(getpath(dr->parent), 49));
|
||||||
|
ncaddstr(4, 9, dr->flags & FF_DIR ? "Directory"
|
||||||
|
: dr->flags & FF_FILE ? "File" : "Other (link, device, socket, ..)");
|
||||||
|
ncprint(6, 18, "%s (%s B)", formatsize(dr->size), fullsize(dr->size));
|
||||||
|
ncprint(7, 18, "%s (%s B)", formatsize(dr->asize), fullsize(dr->asize));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
for(i=0,t=dr->hlnk; t!=dr; t=t->hlnk,i++) {
|
||||||
|
if(info_start > i)
|
||||||
|
continue;
|
||||||
|
if(i-info_start > 5)
|
||||||
|
break;
|
||||||
|
ncaddstr(2+i-info_start, 3, cropstr(getpath(t), 54));
|
||||||
|
}
|
||||||
|
if(t!=dr)
|
||||||
|
ncaddstr(8, 25, "-- more --");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
ncaddstr(9, 32, "Press i to hide this window");
|
ncaddstr(9, 32, "Press i to hide this window");
|
||||||
}
|
}
|
||||||
|
|
@ -341,31 +372,88 @@ void browse_key_sel(int change) {
|
||||||
#define toggle(x,y) if(x & y) x -=y; else x |= y
|
#define toggle(x,y) if(x & y) x -=y; else x |= y
|
||||||
|
|
||||||
int browse_key(int ch) {
|
int browse_key(int ch) {
|
||||||
char sort = 0, nonfo = 0;
|
char sort = 0, nonfo = 0, catch = 0;
|
||||||
struct dir *n, *r;
|
struct dir *r, *sel;
|
||||||
|
int i;
|
||||||
|
|
||||||
switch(ch) {
|
for(sel=browse_dir; sel!=NULL; sel=sel->next)
|
||||||
|
if(sel->flags & FF_BSEL)
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* info window overwrites a few keys */
|
||||||
|
if(flags & BF_INFO && sel)
|
||||||
|
switch(ch) {
|
||||||
|
case '1':
|
||||||
|
info_page = 0;
|
||||||
|
break;
|
||||||
|
case '2':
|
||||||
|
if(sel->hlnk)
|
||||||
|
info_page = 1;
|
||||||
|
break;
|
||||||
|
case KEY_RIGHT:
|
||||||
|
case 'l':
|
||||||
|
if(sel->hlnk) {
|
||||||
|
info_page = 1;
|
||||||
|
catch++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case KEY_LEFT:
|
||||||
|
case 'h':
|
||||||
|
if(sel->hlnk) {
|
||||||
|
info_page = 0;
|
||||||
|
catch++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case KEY_UP:
|
||||||
|
case 'k':
|
||||||
|
if(sel->hlnk && info_page == 1) {
|
||||||
|
if(info_start > 0)
|
||||||
|
info_start--;
|
||||||
|
catch++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case KEY_DOWN:
|
||||||
|
case 'j':
|
||||||
|
case ' ':
|
||||||
|
if(sel->hlnk && info_page == 1) {
|
||||||
|
for(i=0,r=sel->hlnk; r!=sel; r=r->hlnk)
|
||||||
|
i++;
|
||||||
|
if(i > info_start+6)
|
||||||
|
info_start++;
|
||||||
|
catch++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!catch)
|
||||||
|
switch(ch) {
|
||||||
/* selecting items */
|
/* selecting items */
|
||||||
case KEY_UP:
|
case KEY_UP:
|
||||||
case 'k':
|
case 'k':
|
||||||
browse_key_sel(-1);
|
browse_key_sel(-1);
|
||||||
|
info_start = 0;
|
||||||
break;
|
break;
|
||||||
case KEY_DOWN:
|
case KEY_DOWN:
|
||||||
case 'j':
|
case 'j':
|
||||||
browse_key_sel(1);
|
browse_key_sel(1);
|
||||||
|
info_start = 0;
|
||||||
break;
|
break;
|
||||||
case KEY_HOME:
|
case KEY_HOME:
|
||||||
browse_key_sel(-1*(1<<30));
|
browse_key_sel(-1*(1<<30));
|
||||||
|
info_start = 0;
|
||||||
break;
|
break;
|
||||||
case KEY_LL:
|
case KEY_LL:
|
||||||
case KEY_END:
|
case KEY_END:
|
||||||
browse_key_sel(1<<30);
|
browse_key_sel(1<<30);
|
||||||
|
info_start = 0;
|
||||||
break;
|
break;
|
||||||
case KEY_PPAGE:
|
case KEY_PPAGE:
|
||||||
browse_key_sel(-1*(winrows-3));
|
browse_key_sel(-1*(winrows-3));
|
||||||
|
info_start = 0;
|
||||||
break;
|
break;
|
||||||
case KEY_NPAGE:
|
case KEY_NPAGE:
|
||||||
browse_key_sel(winrows-3);
|
browse_key_sel(winrows-3);
|
||||||
|
info_start = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* sorting items */
|
/* sorting items */
|
||||||
|
|
@ -404,14 +492,11 @@ int browse_key(int ch) {
|
||||||
case 10:
|
case 10:
|
||||||
case KEY_RIGHT:
|
case KEY_RIGHT:
|
||||||
case 'l':
|
case 'l':
|
||||||
for(n=browse_dir; n!=NULL; n=n->next)
|
if(sel != NULL && sel->sub != NULL) {
|
||||||
if(n->flags & FF_BSEL)
|
browse_dir = sel->sub;
|
||||||
break;
|
|
||||||
if(n != NULL && n->sub != NULL) {
|
|
||||||
browse_dir = n->sub;
|
|
||||||
sort++;
|
sort++;
|
||||||
}
|
}
|
||||||
if(n == NULL && browse_dir != NULL && browse_dir->parent->parent) {
|
if(sel == NULL && browse_dir != NULL && browse_dir->parent->parent) {
|
||||||
browse_dir = browse_dir->parent->parent->sub;
|
browse_dir = browse_dir->parent->parent->sub;
|
||||||
sort++;
|
sort++;
|
||||||
}
|
}
|
||||||
|
|
@ -454,26 +539,32 @@ int browse_key(int ch) {
|
||||||
nonfo++;
|
nonfo++;
|
||||||
break;
|
break;
|
||||||
case 'd':
|
case 'd':
|
||||||
for(n=browse_dir; n!=NULL; n=n->next)
|
if(sel == NULL)
|
||||||
if(n->flags & FF_BSEL)
|
|
||||||
break;
|
|
||||||
if(n == NULL)
|
|
||||||
break;
|
break;
|
||||||
nonfo++;
|
nonfo++;
|
||||||
/* quirky method of getting the next selected dir without actually selecting it */
|
/* quirky method of getting the next selected dir without actually selecting it */
|
||||||
browse_key_sel(n->next ? 1 : -1);
|
browse_key_sel(sel->next ? 1 : -1);
|
||||||
for(r=browse_dir; r!=NULL; r=r->next)
|
for(r=browse_dir; r!=NULL; r=r->next)
|
||||||
if(r->flags & FF_BSEL)
|
if(r->flags & FF_BSEL)
|
||||||
break;
|
break;
|
||||||
browse_key_sel(n->next ? -1 : 1);
|
browse_key_sel(sel->next ? -1 : 1);
|
||||||
delete_init(n, r);
|
delete_init(sel, r);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(sort && browse_dir != NULL)
|
if(sort && browse_dir != NULL)
|
||||||
browse_dir = browse_sort(browse_dir);
|
browse_dir = browse_sort(browse_dir);
|
||||||
if(nonfo)
|
if(nonfo) {
|
||||||
flags &= ~BF_INFO;
|
flags &= ~BF_INFO;
|
||||||
|
info_start = 0;
|
||||||
|
}
|
||||||
|
if(flags & BF_INFO) {
|
||||||
|
for(sel=browse_dir; sel!=NULL; sel=sel->next)
|
||||||
|
if(sel->flags & FF_BSEL)
|
||||||
|
break;
|
||||||
|
if(sel && !sel->hlnk)
|
||||||
|
info_page = 0;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue