Browse Source

Add -l|--list option to list fonts in active directories

pull/12/head
gitlab.com/pepa65 2 years ago
parent
commit
d9c236ef51
4 changed files with 46 additions and 2 deletions
  1. +32
    -0
      src/figlet.c
  2. +11
    -2
      src/main.c
  3. +2
    -0
      src/render.h
  4. +1
    -0
      src/toilet.h

+ 32
- 0
src/figlet.c View File

@@ -22,6 +22,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <dirent.h>
#include <caca.h> #include <caca.h>


#include "toilet.h" #include "toilet.h"
@@ -34,6 +35,37 @@ static int feed_figlet(context_t *, uint32_t, uint32_t);
static int flush_figlet(context_t *); static int flush_figlet(context_t *);
static int end_figlet(context_t *); static int end_figlet(context_t *);


void list_dir_fonts(char const *dir)
{
DIR *d;
struct dirent *dr;
int n = 0;
d = opendir(dir);
while(d && (dr = readdir(d)) != NULL)
{
size_t len = strlen(dr->d_name);
if(len<5)
continue;
if(!strcmp(dr->d_name + len - 4, ".flf") || !strcmp(dr->d_name + len - 4, ".tlf"))
{
if(!n++)
printf("- %s:", dir);
printf(" %s", dr->d_name);
}
}
if(n)
printf("\n");
closedir(d);
}

int list_fonts(char const *dir)
{
list_dir_fonts(dir);
if(strcmp(dir, getenv("PWD")))
list_dir_fonts(getenv("PWD"));
return 0;
}

int init_figlet(context_t *cx) int init_figlet(context_t *cx)
{ {
char path[2048]; char path[2048];


+ 11
- 2
src/main.c View File

@@ -49,6 +49,7 @@ int main(int argc, char *argv[])
cx->term_width = 80; cx->term_width = 80;


cx->hmode = "default"; cx->hmode = "default";
cx->list = 0;


cx->filters = NULL; cx->filters = NULL;
cx->nfilters = 0; cx->nfilters = 0;
@@ -63,6 +64,7 @@ int main(int argc, char *argv[])
{ "font", 1, NULL, 'f' }, { "font", 1, NULL, 'f' },
{ "directory", 1, NULL, 'd' }, { "directory", 1, NULL, 'd' },
{ "width", 1, NULL, 'w' }, { "width", 1, NULL, 'w' },
{ "list", 0, NULL, 'l' },
{ "termwidth", 0, NULL, 't' }, { "termwidth", 0, NULL, 't' },
{ "filter", 1, NULL, 'F' }, { "filter", 1, NULL, 'F' },
{ "gay", 0, NULL, 130 }, { "gay", 0, NULL, 130 },
@@ -77,7 +79,7 @@ int main(int argc, char *argv[])
{ NULL, 0, NULL, 0 } { NULL, 0, NULL, 0 }
}; };


int c = caca_getopt(argc, argv, "f:d:w:tsSkWoF:E:hI:v",
int c = caca_getopt(argc, argv, "f:d:w:tsSkWolF:E:hI:v",
long_options, &option_index); long_options, &option_index);
if(c == -1) if(c == -1)
break; break;
@@ -144,6 +146,9 @@ int main(int argc, char *argv[])
case 'o': case 'o':
cx->hmode = "overlap"; cx->hmode = "overlap";
break; break;
case 'l':
cx->list = 1;
break;
case 'E': /* --export */ case 'E': /* --export */
if(!strcmp(caca_optarg, "list")) if(!strcmp(caca_optarg, "list"))
return export_list(); return export_list();
@@ -189,6 +194,9 @@ int main(int argc, char *argv[])
return 0; return 0;
} }


if(cx->list)
return list_fonts(cx->dir);

if(render_init(cx) < 0) if(render_init(cx) < 0)
return -1; return -1;


@@ -204,13 +212,14 @@ int main(int argc, char *argv[])
} }


#define USAGE \ #define USAGE \
"Usage: toilet [ -hkostvSW ] [ -d fontdirectory ]\n" \
"Usage: toilet [ -hklostvSW ] [ -d fontdirectory ]\n" \
" [ -f fontfile ] [ -F filter ] [ -w outputwidth ]\n" \ " [ -f fontfile ] [ -F filter ] [ -w outputwidth ]\n" \
" [ -I infocode ] [ -E format ] [ message ]\n" " [ -I infocode ] [ -E format ] [ message ]\n"


#define HELP \ #define HELP \
" -f, --font <name> select the font\n" \ " -f, --font <name> select the font\n" \
" -d, --directory <dir> specify font directory\n" \ " -d, --directory <dir> specify font directory\n" \
" -l, --list list available fonts in the active directories\n" \
" -s, -S, -k, -W, -o render mode (default, force smushing,\n" \ " -s, -S, -k, -W, -o render mode (default, force smushing,\n" \
" kerning, full width, overlap)\n" \ " kerning, full width, overlap)\n" \
" -w, --width <width> set output width\n" \ " -w, --width <width> set output width\n" \


+ 2
- 0
src/render.h View File

@@ -14,6 +14,8 @@
* This header defines text to canvas rendering functions. * This header defines text to canvas rendering functions.
*/ */


extern void list_dir_fonts(char const *);
extern int list_fonts(char const *);
extern int init_tiny(context_t *); extern int init_tiny(context_t *);
extern int init_figlet(context_t *); extern int init_figlet(context_t *);




+ 1
- 0
src/toilet.h View File

@@ -19,6 +19,7 @@ struct toilet_context
char const *export; char const *export;
char const *font; char const *font;
char const *dir; char const *dir;
char list;


unsigned int term_width; unsigned int term_width;




Loading…
Cancel
Save