commit - ecc6fa05e1c8a3082eb9612873a27f1ebf8ffcce
commit + 13cc0916743705e32211da7fcf5499197e36e883
blob - 4e5955af2fe1ed655c3bba62b1fc22931d2df5d4
blob + 943a39c29b407715da6bf55e5a0d43d66ee83837
--- lex.l
+++ lex.l
<KEY>"\"" {
BEGIN(INITIAL);
- if (key == NoSymbol)
- return TERR;
-
yylval.key = (struct key){ state, key };
state = 0;
key = 0;
<KEY>M- { state |= Mod1Mask; }
<KEY>s- { state |= Mod4Mask; }
-<KEY><[_a-zA-Z]+> {
+<KEY><[^>]+> {
char *c;
if ((c = strdup(yytext)) == NULL)
c++; /* skip the < */
c[strlen(c)-1] = '\0'; /* trim the > */
- key = XStringToKeysym(c);
+ if ((key = XStringToKeysym(c)) == NoSymbol)
+ yyerror("invalid keysym %s", c);
free(--c);
}
<KEY>"(" { key = XK_parenleft; }
<KEY>")" { key = XK_parenright; }
-<KEY>. { key = XStringToKeysym(yytext); }
+<KEY>. {
+ if ((key = XStringToKeysym(yytext)) == NoSymbol)
+ yyerror("invalid key %s", yytext);
+ }
%%
blob - 38d035c9d29844ffb29ddd28df94616f0668778f
blob + ed7bd95c1204a39113a29c6b727504fe3c8a9cc5
--- parse.y
+++ parse.y
#include <stdio.h>
-#include <X11/Xlib.h>
-
#include "star-platinum.h"
-void yyerror(const char*);
-
/*
* #define YYDEBUG 1
* int yydebug = 1;
blob - 5c6cd545dc077b1bb4937d047c90389712674942
blob + 232d734c950fdfca53cb00a1cac2b6ed52927914
--- star-platinum.c
+++ star-platinum.c
#include "star-platinum.h"
#include <err.h>
+#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#define IGNORE_MODIFIERS (LockMask | Mod2Mask | Mod3Mask | Mod5Mask)
+__attribute__((__format__ (__printf__, 1, 2)))
void
-yyerror(const char *e)
+yyerror(const char *fmt, ...)
{
+ va_list ap;
+ size_t l;
+
+ va_start(ap, fmt);
+
goterror = 1;
- fprintf(stderr, "%s:%d %s\n", fname, yylineno, e);
+ fprintf(stderr, "%s:%d ", fname, yylineno);
+ vfprintf(stderr, fmt, ap);
+
+ l = strlen(fmt);
+ if (l > 0 && fmt[l-1] != '\n')
+ fprintf(stderr, "\n");
+
+ va_end(ap);
}
char *
blob - 4ed031b1a95ecbcdd4753c4ea0b3a6a416ac9298
blob + 88db9ef46ddebea1d3579a804908d39b992ff23c
--- star-platinum.h
+++ star-platinum.h
#include <err.h>
#include <stdlib.h>
+void yyerror(const char*, ...);
+
struct key {
unsigned int modifier;
KeySym key;