mirror of
https://github.com/NikitaIvanovV/ctpv.git
synced 2024-11-24 05:43:08 +01:00
Add ability to change previews priority in config
This commit is contained in:
parent
8f2b3a403b
commit
0d5c32baf5
@ -10,7 +10,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define PNAME(n) prev_scr_##n##_sh
|
#define PNAME(n) prev_scr_##n##_sh
|
||||||
#define PP(e, t, s, n, p) { #n, e, t, s, PNAME(n), p, LEN(PNAME(n)) }
|
#define PP(e, t, s, n, o) { #n, e, t, s, PNAME(n), o, 0, LEN(PNAME(n)) }
|
||||||
#define PR(e, t, s, n) PP(e, t, s, n, 0)
|
#define PR(e, t, s, n) PP(e, t, s, n, 0)
|
||||||
|
|
||||||
Preview b_previews[] = {
|
Preview b_previews[] = {
|
||||||
|
23
src/config.c
23
src/config.c
@ -50,12 +50,22 @@ static void add_preview(char *name, char *script, char *type, char *subtype,
|
|||||||
.type = type,
|
.type = type,
|
||||||
.subtype = subtype,
|
.subtype = subtype,
|
||||||
.ext = ext,
|
.ext = ext,
|
||||||
.priority = 1 /* custom previews are always prioritized */
|
.order = 1 /* custom previews are always prioritized */
|
||||||
};
|
};
|
||||||
|
|
||||||
vectorPreview_append(previews, p);
|
vectorPreview_append(previews, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void add_priority(char *name, int priority)
|
||||||
|
{
|
||||||
|
for (size_t i = 0; i < previews->len; i++) {
|
||||||
|
if (strcmp(previews->buf[i].name, name) != 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
previews->buf[i].priority = priority;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static inline void next_token(void)
|
static inline void next_token(void)
|
||||||
{
|
{
|
||||||
token = lexer_get_token(lexer);
|
token = lexer_get_token(lexer);
|
||||||
@ -151,8 +161,15 @@ static int new_preview(void)
|
|||||||
|
|
||||||
static int priority(Token tok)
|
static int priority(Token tok)
|
||||||
{
|
{
|
||||||
PARSEERROR(tok, "priority is not supported yet");
|
Token name = token;
|
||||||
return STAT_ERR;
|
EXPECT(TOK_STR);
|
||||||
|
|
||||||
|
Token number = token;
|
||||||
|
EXPECT(TOK_INT);
|
||||||
|
|
||||||
|
add_priority(get_str(name), number.val.i);
|
||||||
|
|
||||||
|
return STAT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int command(void)
|
static int command(void)
|
||||||
|
23
src/lexer.c
23
src/lexer.c
@ -234,6 +234,11 @@ static inline Token read_new_line(Lexer *ctx)
|
|||||||
return tok;
|
return tok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int issymbol(int c)
|
||||||
|
{
|
||||||
|
return isalnum(c) || c == '_' || c == '-';
|
||||||
|
}
|
||||||
|
|
||||||
static inline Token read_symbol(Lexer *ctx)
|
static inline Token read_symbol(Lexer *ctx)
|
||||||
{
|
{
|
||||||
char c = peek_char(ctx);
|
char c = peek_char(ctx);
|
||||||
@ -242,7 +247,7 @@ static inline Token read_symbol(Lexer *ctx)
|
|||||||
return get_tok(ctx, TOK_NULL);
|
return get_tok(ctx, TOK_NULL);
|
||||||
|
|
||||||
size_t p = get_text_buf_len(ctx);
|
size_t p = get_text_buf_len(ctx);
|
||||||
read_while(ctx, isalnum, 1);
|
read_while(ctx, issymbol, 1);
|
||||||
|
|
||||||
Token tok = get_tok(ctx, TOK_STR);
|
Token tok = get_tok(ctx, TOK_STR);
|
||||||
tok.val.sp = p;
|
tok.val.sp = p;
|
||||||
@ -250,11 +255,16 @@ static inline Token read_symbol(Lexer *ctx)
|
|||||||
return tok;
|
return tok;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline Token read_digit(Lexer *ctx)
|
static inline Token read_int(Lexer *ctx)
|
||||||
{
|
{
|
||||||
char c = peek_char(ctx);
|
int positive = 1;
|
||||||
|
|
||||||
if (!isdigit(c))
|
if (peek_char(ctx) == '-') {
|
||||||
|
positive = 0;
|
||||||
|
next_char(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isdigit(peek_char(ctx)))
|
||||||
return get_tok(ctx, TOK_NULL);
|
return get_tok(ctx, TOK_NULL);
|
||||||
|
|
||||||
size_t len = get_text_buf_len(ctx);
|
size_t len = get_text_buf_len(ctx);
|
||||||
@ -263,6 +273,9 @@ static inline Token read_digit(Lexer *ctx)
|
|||||||
int i = atoi(get_text_buf_at(ctx, len));
|
int i = atoi(get_text_buf_at(ctx, len));
|
||||||
set_text_buf_len(ctx, len);
|
set_text_buf_len(ctx, len);
|
||||||
|
|
||||||
|
if (!positive)
|
||||||
|
i *= -1;
|
||||||
|
|
||||||
Token tok = get_tok(ctx, TOK_INT);
|
Token tok = get_tok(ctx, TOK_INT);
|
||||||
tok.val.i = i;
|
tok.val.i = i;
|
||||||
|
|
||||||
@ -366,7 +379,7 @@ Token lexer_get_token(Lexer *ctx)
|
|||||||
|
|
||||||
ATTEMPT_READ(ctx, read_new_line);
|
ATTEMPT_READ(ctx, read_new_line);
|
||||||
ATTEMPT_READ(ctx, read_symbol);
|
ATTEMPT_READ(ctx, read_symbol);
|
||||||
ATTEMPT_READ(ctx, read_digit);
|
ATTEMPT_READ(ctx, read_int);
|
||||||
ATTEMPT_READ(ctx, read_block);
|
ATTEMPT_READ(ctx, read_block);
|
||||||
|
|
||||||
PARSEERROR((*ctx), "cannot handle character: %c", peek_char(ctx));
|
PARSEERROR((*ctx), "cannot handle character: %c", peek_char(ctx));
|
||||||
|
@ -25,7 +25,7 @@ static int cmp_previews(const void *p1, const void *p2)
|
|||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if ((i = pr2->priority - pr1->priority) != 0)
|
if ((i = pr2->order - pr1->order) != 0)
|
||||||
return i;
|
return i;
|
||||||
|
|
||||||
if ((i = strcmpnull(pr1->ext, pr2->ext)) != 0)
|
if ((i = strcmpnull(pr1->ext, pr2->ext)) != 0)
|
||||||
@ -37,6 +37,9 @@ static int cmp_previews(const void *p1, const void *p2)
|
|||||||
if ((i = strcmpnull(pr1->subtype, pr2->subtype)) != 0)
|
if ((i = strcmpnull(pr1->subtype, pr2->subtype)) != 0)
|
||||||
return i;
|
return i;
|
||||||
|
|
||||||
|
if ((i = pr2->priority - pr1->priority) != 0)
|
||||||
|
return i;
|
||||||
|
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char *name, *ext, *type, *subtype, *script;
|
char *name, *ext, *type, *subtype, *script;
|
||||||
int priority;
|
int order, priority;
|
||||||
size_t script_len;
|
size_t script_len;
|
||||||
} Preview;
|
} Preview;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user