forked from enlightenment/terminology
tyls - allow ls *.png or *.jpg and so on to work as you expect
This commit is contained in:
parent
a617e9043b
commit
73a538433e
169
src/bin/tyls.c
169
src/bin/tyls.c
|
@ -725,6 +725,162 @@ list_dir(const char *dir, Tyls_Options *options)
|
||||||
EINA_LIST_FREE(files, s) free(s);
|
EINA_LIST_FREE(files, s) free(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Eina_List *files_list = NULL;
|
||||||
|
|
||||||
|
static void
|
||||||
|
list_file(const char *dir, Tyls_Options *options EINA_UNUSED)
|
||||||
|
{
|
||||||
|
char *file = strdup(dir);
|
||||||
|
files_list = eina_list_append(files_list, file);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
flush_file(Tyls_Options *options)
|
||||||
|
{
|
||||||
|
Eina_List *l;
|
||||||
|
char *s, **names, *s2;
|
||||||
|
int maxlen = 0, i, num, stuff;
|
||||||
|
|
||||||
|
if (!files_list) return;
|
||||||
|
names = calloc(eina_list_count(files_list) * 2, sizeof(char *));
|
||||||
|
if (!names) return;
|
||||||
|
i = 0;
|
||||||
|
EINA_LIST_FOREACH(files_list, l, s)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
|
||||||
|
s2 = strrchr(s, '/');
|
||||||
|
if (!s2) continue;
|
||||||
|
s2++;
|
||||||
|
len = eina_unicode_utf8_get_len(s2);
|
||||||
|
if (len > maxlen) maxlen = len;
|
||||||
|
names[i] = s;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
num = i;
|
||||||
|
stuff = 0;
|
||||||
|
if (options->mode == SMALL) stuff += 2;
|
||||||
|
else if (options->mode == MEDIUM) stuff += 4;
|
||||||
|
stuff += 5; // xxxx[ /K/M/G/T/P...]
|
||||||
|
stuff += 1; // spacer at start
|
||||||
|
// name
|
||||||
|
stuff += 1; // type [@/*/|/=...]
|
||||||
|
stuff += 1; // spacer
|
||||||
|
maxlen += stuff;
|
||||||
|
if (maxlen > 0)
|
||||||
|
{
|
||||||
|
int rows;
|
||||||
|
int cols = tw / maxlen;
|
||||||
|
|
||||||
|
if (cols < 1) cols = 1;
|
||||||
|
if (cols == 1)
|
||||||
|
{
|
||||||
|
maxlen--;
|
||||||
|
stuff--;
|
||||||
|
}
|
||||||
|
if (cols > num) cols = num;
|
||||||
|
if (cols == 0) cols = 1;
|
||||||
|
rows = ((num + (cols - 1)) / cols);
|
||||||
|
for (i = 0; i < rows; i++)
|
||||||
|
{
|
||||||
|
const char *icon;
|
||||||
|
int c, j, cw;
|
||||||
|
|
||||||
|
if (options->mode == SMALL)
|
||||||
|
{
|
||||||
|
for (c = 0; c < cols; c++)
|
||||||
|
{
|
||||||
|
char sz[6], szch = ' ';
|
||||||
|
long long size;
|
||||||
|
|
||||||
|
s = names[(c * rows) + i];
|
||||||
|
if (!s) continue;
|
||||||
|
s2 = strrchr(s, '/');
|
||||||
|
if (!s2) continue;
|
||||||
|
s2++;
|
||||||
|
int len = eina_unicode_utf8_get_len(s2);
|
||||||
|
icon = fileicon(s);
|
||||||
|
cw = tw / cols;
|
||||||
|
size = ecore_file_size(s);
|
||||||
|
size_print(sz, sizeof(sz), &szch, size);
|
||||||
|
len += stuff;
|
||||||
|
if (icon)
|
||||||
|
printf("%c}it#%i;%i;%s\n%s%c", 0x1b, 2, 1, s, icon, 0);
|
||||||
|
else
|
||||||
|
printf("%c}it#%i;%i;%s%c", 0x1b, 2, 1, s, 0);
|
||||||
|
printf("%c}ib%c", 0x1b, 0);
|
||||||
|
printf("##");
|
||||||
|
printf("%c}ie%c", 0x1b, 0);
|
||||||
|
sizeprint(sz, szch);
|
||||||
|
printf(" ");
|
||||||
|
fileprint(s, s2, EINA_TRUE);
|
||||||
|
for (j = 0; j < (cw - len); j++) printf(" ");
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
else if (options->mode == MEDIUM)
|
||||||
|
{
|
||||||
|
for (c = 0; c < cols; c++)
|
||||||
|
{
|
||||||
|
s = names[(c * rows) + i];
|
||||||
|
if (!s) continue;
|
||||||
|
s2 = strrchr(s, '/');
|
||||||
|
if (!s2) continue;
|
||||||
|
s2++;
|
||||||
|
int len = eina_unicode_utf8_get_len(s2);
|
||||||
|
icon = fileicon(s);
|
||||||
|
cw = tw / cols;
|
||||||
|
len += 3;
|
||||||
|
if (cols > 1) len += 1;
|
||||||
|
if (icon)
|
||||||
|
printf("%c}it%c%i;%i;%s\n%s%c", 0x1b, 33 + c, 4, 2, s, icon, 0);
|
||||||
|
else
|
||||||
|
printf("%c}it%c%i;%i;%s%c", 0x1b, 33 + c, 4, 2, s, 0);
|
||||||
|
printf("%c}ib%c", 0x1b, 0);
|
||||||
|
printf("%c%c%c%c", 33 + c, 33 + c, 33 + c, 33 + c);
|
||||||
|
printf("%c}ie%c", 0x1b, 0);
|
||||||
|
fileprint(s, s2, EINA_FALSE);
|
||||||
|
if (c < (cols - 1))
|
||||||
|
{
|
||||||
|
for (j = 0; j < (cw - len); j++) printf(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
for (c = 0; c < cols; c++)
|
||||||
|
{
|
||||||
|
char sz[6], szch = ' ';
|
||||||
|
long long size;
|
||||||
|
int len;
|
||||||
|
|
||||||
|
s = names[(c * rows) + i];
|
||||||
|
if (!s) continue;
|
||||||
|
cw = tw / cols;
|
||||||
|
s2 = strrchr(s, '/');
|
||||||
|
if (!s2) continue;
|
||||||
|
s2++;
|
||||||
|
size = ecore_file_size(s);
|
||||||
|
size_print(sz, sizeof(sz), &szch, size);
|
||||||
|
len = eina_unicode_utf8_get_len(sz) + 2 + 4;
|
||||||
|
if (cols > 1) len += 1;
|
||||||
|
printf("%c}ib%c", 0x1b, 0);
|
||||||
|
printf("%c%c%c%c", 33 + c, 33 + c, 33 + c, 33 + c);
|
||||||
|
printf("%c}ie%c", 0x1b, 0);
|
||||||
|
sizeprint(sz, szch);
|
||||||
|
printf(" ");
|
||||||
|
fileprint(s, NULL, EINA_TRUE);
|
||||||
|
if (c < (cols - 1))
|
||||||
|
{
|
||||||
|
for (j = 0; j < (cw - len); j++) printf(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(names);
|
||||||
|
EINA_LIST_FREE(files_list, s) free(s);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
print_usage(const char *argv0)
|
print_usage(const char *argv0)
|
||||||
{
|
{
|
||||||
|
@ -810,13 +966,20 @@ main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
char *rp;
|
char *rp;
|
||||||
|
|
||||||
if ((rp = ecore_file_realpath(path))
|
rp = ecore_file_realpath(path);
|
||||||
&& ecore_file_is_dir(rp))
|
if (rp)
|
||||||
{
|
{
|
||||||
list_dir(rp, &options);
|
if (ecore_file_is_dir(rp))
|
||||||
|
{
|
||||||
|
flush_file(&options);
|
||||||
|
list_dir(rp, &options);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
list_file(rp, &options);
|
||||||
free(rp);
|
free(rp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
flush_file(&options);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
ecore_evas_free(ee);
|
ecore_evas_free(ee);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue