loadkeys: Add LOADKEYS_KEYMAP_PATH env variable
authorAlexey Gladkov <gladkov.alexey@gmail.com>
Tue, 15 Mar 2011 01:12:42 +0000 (04:12 +0300)
committerAlexey Gladkov <gladkov.alexey@gmail.com>
Tue, 15 Mar 2011 01:12:42 +0000 (04:12 +0300)
Signed-off-by: Alexey Gladkov <gladkov.alexey@gmail.com>
src/loadkeys.analyze.c
src/loadkeys.c
src/loadkeys.y

index d304292..6597e86 100644 (file)
@@ -827,11 +827,10 @@ void stack_push(FILE *fd, int is_pipe, char *fname);
 #define MAX_INCLUDE_DEPTH 20
 static struct infile {
        FILE *fd;
-       int  pipe;
        char *filename;
+       int  pipe;
        int  linenr;
        YY_BUFFER_STATE buffer;
-
 } infile_stack[MAX_INCLUDE_DEPTH];
 
 char *filename = NULL;
@@ -1046,7 +1045,7 @@ static void open_include(char *s)
 
 
 
-#line 1050 "loadkeys.analyze.c"
+#line 1049 "loadkeys.analyze.c"
 
 #define INITIAL 0
 #define RVALUE 1
@@ -1229,7 +1228,7 @@ YY_DECL
        register char *yy_cp, *yy_bp;
        register int yy_act;
     
-#line 289 "loadkeys.analyze.l"
+#line 288 "loadkeys.analyze.l"
 
 
 /* To protect from wrong code in the higher level parser (loadkeys.y), 
@@ -1245,7 +1244,7 @@ YY_DECL
   yylval = YYLVAL_UNDEF;
 
 
-#line 1249 "loadkeys.analyze.c"
+#line 1248 "loadkeys.analyze.c"
 
        if ( !(yy_init) )
                {
@@ -1330,14 +1329,14 @@ do_action:      /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 304 "loadkeys.analyze.l"
+#line 303 "loadkeys.analyze.l"
 {
                                BEGIN(INCLSTR);
                        }
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 307 "loadkeys.analyze.l"
+#line 306 "loadkeys.analyze.l"
 {
                                char *s = xstrndup(yytext+1, strlen(yytext)-2);
                                /* use static pathname to store *s ? */
@@ -1348,7 +1347,7 @@ YY_RULE_SETUP
 case 3:
 /* rule 3 can match eol */
 YY_RULE_SETUP
-#line 313 "loadkeys.analyze.l"
+#line 312 "loadkeys.analyze.l"
 {
                                yyerror(_("expected filename between quotes"));
                                BEGIN(0);
@@ -1358,7 +1357,7 @@ case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(RVALUE):
 case YY_STATE_EOF(STR):
 case YY_STATE_EOF(INCLSTR):
-#line 317 "loadkeys.analyze.l"
+#line 316 "loadkeys.analyze.l"
 {
                                stack_pop();
                                if (!YY_CURRENT_BUFFER)
@@ -1368,7 +1367,7 @@ case YY_STATE_EOF(INCLSTR):
 case 4:
 /* rule 4 can match eol */
 YY_RULE_SETUP
-#line 322 "loadkeys.analyze.l"
+#line 321 "loadkeys.analyze.l"
 {
                                line_nr++;
                        }
@@ -1376,7 +1375,7 @@ YY_RULE_SETUP
 case 5:
 /* rule 5 can match eol */
 YY_RULE_SETUP
-#line 325 "loadkeys.analyze.l"
+#line 324 "loadkeys.analyze.l"
 {
                                line_nr++;
                                BEGIN(0);
@@ -1385,7 +1384,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 330 "loadkeys.analyze.l"
+#line 329 "loadkeys.analyze.l"
 ; /* do nothing */
        YY_BREAK
 case 7:
@@ -1394,12 +1393,12 @@ case 7:
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 331 "loadkeys.analyze.l"
+#line 330 "loadkeys.analyze.l"
 ; /* do nothing */
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 332 "loadkeys.analyze.l"
+#line 331 "loadkeys.analyze.l"
 {
                                BEGIN(RVALUE);
                                rvalct = 0;
@@ -1408,7 +1407,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 337 "loadkeys.analyze.l"
+#line 336 "loadkeys.analyze.l"
 {
                                BEGIN(RVALUE);
                                return(STRING);
@@ -1416,7 +1415,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 341 "loadkeys.analyze.l"
+#line 340 "loadkeys.analyze.l"
 {
                                BEGIN(RVALUE);
                                return(TO);
@@ -1424,7 +1423,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 345 "loadkeys.analyze.l"
+#line 344 "loadkeys.analyze.l"
 {
                                yylval = strtol(yytext + 1, NULL, 16);
                                if (yylval >= 0xf000)
@@ -1434,7 +1433,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 351 "loadkeys.analyze.l"
+#line 350 "loadkeys.analyze.l"
 {
                                yylval = strtol(yytext, NULL, 0);
                                return(NUMBER);
@@ -1442,127 +1441,127 @@ YY_RULE_SETUP
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 355 "loadkeys.analyze.l"
+#line 354 "loadkeys.analyze.l"
 {      return((yylval = ksymtocode(yytext, TO_AUTO)) == -1 ? ERROR : LITERAL); }
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 356 "loadkeys.analyze.l"
+#line 355 "loadkeys.analyze.l"
 {      return(DASH);           }
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 357 "loadkeys.analyze.l"
+#line 356 "loadkeys.analyze.l"
 {      return(COMMA);          }
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 358 "loadkeys.analyze.l"
+#line 357 "loadkeys.analyze.l"
 {      return(PLUS);           }
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 359 "loadkeys.analyze.l"
+#line 358 "loadkeys.analyze.l"
 {      return(CHARSET);        }
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 360 "loadkeys.analyze.l"
+#line 359 "loadkeys.analyze.l"
 {      return(KEYMAPS);        }
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 361 "loadkeys.analyze.l"
+#line 360 "loadkeys.analyze.l"
 {      return(KEYCODE);        }
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 362 "loadkeys.analyze.l"
+#line 361 "loadkeys.analyze.l"
 {      return(PLAIN);          }
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 363 "loadkeys.analyze.l"
+#line 362 "loadkeys.analyze.l"
 {      return(SHIFT);          }
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 364 "loadkeys.analyze.l"
+#line 363 "loadkeys.analyze.l"
 {      return(CONTROL);        }
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 365 "loadkeys.analyze.l"
+#line 364 "loadkeys.analyze.l"
 {      return(ALT);            }
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 366 "loadkeys.analyze.l"
+#line 365 "loadkeys.analyze.l"
 {      return(ALTGR);          }
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 367 "loadkeys.analyze.l"
+#line 366 "loadkeys.analyze.l"
 {      return(SHIFTL);         }
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 368 "loadkeys.analyze.l"
+#line 367 "loadkeys.analyze.l"
 {      return(SHIFTR);         }
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 369 "loadkeys.analyze.l"
+#line 368 "loadkeys.analyze.l"
 {      return(CTRLL);          }
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 370 "loadkeys.analyze.l"
+#line 369 "loadkeys.analyze.l"
 {      return(CTRLR);          }
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 371 "loadkeys.analyze.l"
+#line 370 "loadkeys.analyze.l"
 {      return(CAPSSHIFT);      }
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 372 "loadkeys.analyze.l"
+#line 371 "loadkeys.analyze.l"
 {      return(ALT_IS_META);    }
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 373 "loadkeys.analyze.l"
+#line 372 "loadkeys.analyze.l"
 {      return(STRINGS);        }
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 374 "loadkeys.analyze.l"
+#line 373 "loadkeys.analyze.l"
 {      return(COMPOSE);        }
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 375 "loadkeys.analyze.l"
+#line 374 "loadkeys.analyze.l"
 {      return(AS);             }
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 376 "loadkeys.analyze.l"
+#line 375 "loadkeys.analyze.l"
 {      return(USUAL);          }
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 377 "loadkeys.analyze.l"
+#line 376 "loadkeys.analyze.l"
 {      return(ON);             }
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 378 "loadkeys.analyze.l"
+#line 377 "loadkeys.analyze.l"
 {      return(FOR);            }
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 379 "loadkeys.analyze.l"
+#line 378 "loadkeys.analyze.l"
 {
                                yylval = strtol(yytext + 2, NULL, 8);
                                return(CCHAR);
@@ -1570,7 +1569,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 383 "loadkeys.analyze.l"
+#line 382 "loadkeys.analyze.l"
 {
                                yylval = (unsigned char) yytext[2];
                                return(CCHAR);
@@ -1578,7 +1577,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 387 "loadkeys.analyze.l"
+#line 386 "loadkeys.analyze.l"
 {
                                yylval = (unsigned char) yytext[1];
                                return(CCHAR);
@@ -1586,7 +1585,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 391 "loadkeys.analyze.l"
+#line 390 "loadkeys.analyze.l"
 {
                                p = (char *) kbs_buf.kb_string;
                                pmax = p + sizeof(kbs_buf.kb_string) - 1;
@@ -1595,7 +1594,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 396 "loadkeys.analyze.l"
+#line 395 "loadkeys.analyze.l"
 {
                                if (p >= pmax)
                                        lkfatal(_("string too long"));
@@ -1604,7 +1603,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 401 "loadkeys.analyze.l"
+#line 400 "loadkeys.analyze.l"
 {
                                if (p >= pmax)
                                        lkfatal(_("string too long"));
@@ -1613,7 +1612,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 406 "loadkeys.analyze.l"
+#line 405 "loadkeys.analyze.l"
 {
                                if (p >= pmax)
                                        lkfatal(_("string too long"));
@@ -1622,7 +1621,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 411 "loadkeys.analyze.l"
+#line 410 "loadkeys.analyze.l"
 {
                                if (p >= pmax)
                                        lkfatal(_("string too long"));
@@ -1632,10 +1631,10 @@ YY_RULE_SETUP
 case 45:
 /* rule 45 can match eol */
 YY_RULE_SETUP
-#line 416 "loadkeys.analyze.l"
+#line 415 "loadkeys.analyze.l"
 {
                                char *ptmp = p;
-                               p += strlen(yytext); 
+                               p += strlen(yytext);
                                if (p > pmax)
                                        lkfatal(_("string too long"));
                                strcpy(ptmp, yytext);
@@ -1643,7 +1642,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 423 "loadkeys.analyze.l"
+#line 422 "loadkeys.analyze.l"
 {
                                *p = '\0';
                                BEGIN(0);
@@ -1652,17 +1651,17 @@ YY_RULE_SETUP
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 428 "loadkeys.analyze.l"
+#line 427 "loadkeys.analyze.l"
 {
                                return(ERROR); /* report any unknown characters */
                        }
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 431 "loadkeys.analyze.l"
+#line 430 "loadkeys.analyze.l"
 ECHO;
        YY_BREAK
-#line 1666 "loadkeys.analyze.c"
+#line 1665 "loadkeys.analyze.c"
 
        case YY_END_OF_BUFFER:
                {
@@ -2621,7 +2620,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 431 "loadkeys.analyze.l"
+#line 430 "loadkeys.analyze.l"
 
 
 
index b38a3c9..f9623cd 100644 (file)
@@ -139,7 +139,6 @@ extern char *filename;
 extern int line_nr;
 
 extern void stack_push(FILE *fd, int ispipe, char *filename);
-//extern int set_charset(const char *charset);
 extern int prefer_unicode;
 
 #include "ksyms.h"
@@ -169,7 +168,9 @@ static void attr_noreturn usage(void)
        exit(EXIT_FAILURE);
 }
 
-char *dirpath[]  = { "", DATADIR "/" KEYMAPDIR "/**", KERNDIR "/", 0 };
+char **dirpath;
+char *dirpath1[] = { "", DATADIR "/" KEYMAPDIR "/**", KERNDIR "/", 0 };
+char *dirpath2[] = { 0, 0 };
 char *suffixes[] = { "", ".kmap", ".map", 0 };
 
 char **args;
@@ -932,7 +933,7 @@ static void attr_noreturn bkeymap(void)
 
 
 /* Line 189 of yacc.c  */
-#line 936 "loadkeys.c"
+#line 937 "loadkeys.c"
 
 /* Enabling traces.  */
 #ifndef YYDEBUG
@@ -1044,7 +1045,7 @@ typedef int YYSTYPE;
 
 
 /* Line 264 of yacc.c  */
-#line 1048 "loadkeys.c"
+#line 1049 "loadkeys.c"
 
 #ifdef short
 # undef short
@@ -1349,12 +1350,12 @@ static const yytype_int8 yyrhs[] =
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   876,   876,   877,   879,   880,   881,   882,   883,   884,
-     885,   886,   887,   888,   890,   895,   900,   905,   909,   914,
-     919,   920,   922,   928,   933,   942,   946,   951,   952,   954,
-     954,   961,   966,   967,   969,   970,   971,   972,   973,   974,
-     975,   976,   977,   979,  1018,  1019,  1021,  1028,  1029,  1030,
-    1031,  1032,  1033
+       0,   877,   877,   878,   880,   881,   882,   883,   884,   885,
+     886,   887,   888,   889,   891,   896,   901,   906,   910,   915,
+     920,   921,   923,   929,   934,   943,   947,   952,   953,   955,
+     955,   962,   967,   968,   970,   971,   972,   973,   974,   975,
+     976,   977,   978,   980,  1019,  1020,  1022,  1029,  1030,  1031,
+    1032,  1033,  1034
 };
 #endif
 
@@ -2326,7 +2327,7 @@ yyreduce:
         case 14:
 
 /* Line 1464 of yacc.c  */
-#line 891 "loadkeys.y"
+#line 892 "loadkeys.y"
     {
                                set_charset((char *) kbs_buf.kb_string);
                        }
@@ -2335,7 +2336,7 @@ yyreduce:
   case 15:
 
 /* Line 1464 of yacc.c  */
-#line 896 "loadkeys.y"
+#line 897 "loadkeys.y"
     {
                                alt_is_meta = 1;
                        }
@@ -2344,7 +2345,7 @@ yyreduce:
   case 16:
 
 /* Line 1464 of yacc.c  */
-#line 901 "loadkeys.y"
+#line 902 "loadkeys.y"
     {
                                strings_as_usual();
                        }
@@ -2353,7 +2354,7 @@ yyreduce:
   case 17:
 
 /* Line 1464 of yacc.c  */
-#line 906 "loadkeys.y"
+#line 907 "loadkeys.y"
     {
                                compose_as_usual((char *) kbs_buf.kb_string);
                        }
@@ -2362,7 +2363,7 @@ yyreduce:
   case 18:
 
 /* Line 1464 of yacc.c  */
-#line 910 "loadkeys.y"
+#line 911 "loadkeys.y"
     {
                                compose_as_usual(0);
                        }
@@ -2371,7 +2372,7 @@ yyreduce:
   case 19:
 
 /* Line 1464 of yacc.c  */
-#line 915 "loadkeys.y"
+#line 916 "loadkeys.y"
     {
                                keymaps_line_seen = 1;
                        }
@@ -2380,7 +2381,7 @@ yyreduce:
   case 22:
 
 /* Line 1464 of yacc.c  */
-#line 923 "loadkeys.y"
+#line 924 "loadkeys.y"
     {
                                int i;
                                for (i = (yyvsp[(1) - (3)]); i <= (yyvsp[(3) - (3)]); i++)
@@ -2391,7 +2392,7 @@ yyreduce:
   case 23:
 
 /* Line 1464 of yacc.c  */
-#line 929 "loadkeys.y"
+#line 930 "loadkeys.y"
     {
                                addmap((yyvsp[(1) - (1)]),1);
                        }
@@ -2400,7 +2401,7 @@ yyreduce:
   case 24:
 
 /* Line 1464 of yacc.c  */
-#line 934 "loadkeys.y"
+#line 935 "loadkeys.y"
     {
                                if (KTYP((yyvsp[(2) - (5)])) != KT_FN)
                                        lkfatal(_("'%s' is not a function key symbol"),
@@ -2413,7 +2414,7 @@ yyreduce:
   case 25:
 
 /* Line 1464 of yacc.c  */
-#line 943 "loadkeys.y"
+#line 944 "loadkeys.y"
     {
                                compose((yyvsp[(2) - (6)]), (yyvsp[(3) - (6)]), (yyvsp[(5) - (6)]));
                        }
@@ -2422,7 +2423,7 @@ yyreduce:
   case 26:
 
 /* Line 1464 of yacc.c  */
-#line 947 "loadkeys.y"
+#line 948 "loadkeys.y"
     {
                                compose((yyvsp[(2) - (6)]), (yyvsp[(3) - (6)]), (yyvsp[(5) - (6)]));
                        }
@@ -2431,21 +2432,21 @@ yyreduce:
   case 27:
 
 /* Line 1464 of yacc.c  */
-#line 951 "loadkeys.y"
+#line 952 "loadkeys.y"
     {  (yyval) = (yyvsp[(1) - (1)]);           }
     break;
 
   case 28:
 
 /* Line 1464 of yacc.c  */
-#line 952 "loadkeys.y"
+#line 953 "loadkeys.y"
     {  (yyval) = (yyvsp[(1) - (1)]) ^ 0xf000;  }
     break;
 
   case 29:
 
 /* Line 1464 of yacc.c  */
-#line 954 "loadkeys.y"
+#line 955 "loadkeys.y"
     {
                                mod = 0;
                        }
@@ -2454,7 +2455,7 @@ yyreduce:
   case 30:
 
 /* Line 1464 of yacc.c  */
-#line 958 "loadkeys.y"
+#line 959 "loadkeys.y"
     {
                                addkey((yyvsp[(4) - (7)]), mod, (yyvsp[(6) - (7)]));
                        }
@@ -2463,7 +2464,7 @@ yyreduce:
   case 31:
 
 /* Line 1464 of yacc.c  */
-#line 962 "loadkeys.y"
+#line 963 "loadkeys.y"
     {
                                addkey((yyvsp[(3) - (6)]), 0, (yyvsp[(5) - (6)]));
                        }
@@ -2472,70 +2473,70 @@ yyreduce:
   case 34:
 
 /* Line 1464 of yacc.c  */
-#line 969 "loadkeys.y"
+#line 970 "loadkeys.y"
     { mod |= M_SHIFT;  }
     break;
 
   case 35:
 
 /* Line 1464 of yacc.c  */
-#line 970 "loadkeys.y"
+#line 971 "loadkeys.y"
     { mod |= M_CTRL;   }
     break;
 
   case 36:
 
 /* Line 1464 of yacc.c  */
-#line 971 "loadkeys.y"
+#line 972 "loadkeys.y"
     { mod |= M_ALT;            }
     break;
 
   case 37:
 
 /* Line 1464 of yacc.c  */
-#line 972 "loadkeys.y"
+#line 973 "loadkeys.y"
     { mod |= M_ALTGR;  }
     break;
 
   case 38:
 
 /* Line 1464 of yacc.c  */
-#line 973 "loadkeys.y"
+#line 974 "loadkeys.y"
     { mod |= M_SHIFTL; }
     break;
 
   case 39:
 
 /* Line 1464 of yacc.c  */
-#line 974 "loadkeys.y"
+#line 975 "loadkeys.y"
     { mod |= M_SHIFTR; }
     break;
 
   case 40:
 
 /* Line 1464 of yacc.c  */
-#line 975 "loadkeys.y"
+#line 976 "loadkeys.y"
     { mod |= M_CTRLL;  }
     break;
 
   case 41:
 
 /* Line 1464 of yacc.c  */
-#line 976 "loadkeys.y"
+#line 977 "loadkeys.y"
     { mod |= M_CTRLR;  }
     break;
 
   case 42:
 
 /* Line 1464 of yacc.c  */
-#line 977 "loadkeys.y"
+#line 978 "loadkeys.y"
     { mod |= M_CAPSSHIFT;      }
     break;
 
   case 43:
 
 /* Line 1464 of yacc.c  */
-#line 980 "loadkeys.y"
+#line 981 "loadkeys.y"
     {
                                int i, j;
 
@@ -2577,7 +2578,7 @@ yyreduce:
   case 46:
 
 /* Line 1464 of yacc.c  */
-#line 1022 "loadkeys.y"
+#line 1023 "loadkeys.y"
     {
                                if (rvalct >= MAX_NR_KEYMAPS)
                                        lkfatal(_("too many key definitions on one line"));
@@ -2588,49 +2589,49 @@ yyreduce:
   case 47:
 
 /* Line 1464 of yacc.c  */
-#line 1028 "loadkeys.y"
+#line 1029 "loadkeys.y"
     { (yyval) = convert_code((yyvsp[(1) - (1)]), TO_AUTO);             }
     break;
 
   case 48:
 
 /* Line 1464 of yacc.c  */
-#line 1029 "loadkeys.y"
+#line 1030 "loadkeys.y"
     { (yyval) = add_capslock((yyvsp[(2) - (2)]));                      }
     break;
 
   case 49:
 
 /* Line 1464 of yacc.c  */
-#line 1030 "loadkeys.y"
+#line 1031 "loadkeys.y"
     { (yyval) = convert_code((yyvsp[(1) - (1)])^0xf000, TO_AUTO);      }
     break;
 
   case 50:
 
 /* Line 1464 of yacc.c  */
-#line 1031 "loadkeys.y"
+#line 1032 "loadkeys.y"
     { (yyval) = add_capslock((yyvsp[(2) - (2)])^0xf000);                       }
     break;
 
   case 51:
 
 /* Line 1464 of yacc.c  */
-#line 1032 "loadkeys.y"
+#line 1033 "loadkeys.y"
     { (yyval) = (yyvsp[(1) - (1)]);                                    }
     break;
 
   case 52:
 
 /* Line 1464 of yacc.c  */
-#line 1033 "loadkeys.y"
+#line 1034 "loadkeys.y"
     { (yyval) = add_capslock((yyvsp[(2) - (2)]));                      }
     break;
 
 
 
 /* Line 1464 of yacc.c  */
-#line 2634 "loadkeys.c"
+#line 2635 "loadkeys.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -2842,7 +2843,7 @@ yyreturn:
 
 
 /* Line 1684 of yacc.c  */
-#line 1035 "loadkeys.y"
+#line 1036 "loadkeys.y"
 
 
 int main(int argc, char *argv[])
@@ -2959,6 +2960,16 @@ int main(int argc, char *argv[])
 
        for (i = optind; argv[i]; i++) {
                FILE *f;
+               char *ev;
+
+               dirpath = dirpath1;
+               if ((ev = getenv("LOADKEYS_KEYMAP_PATH")) != NULL) {
+                       if (!quiet && !optm)
+                               fprintf(stdout, _("Searching in %s\n"), ev);
+
+                       dirpath2[0] = ev;
+                       dirpath = dirpath2;
+               }
 
                if (optd) {
                        /* first read default map - search starts in . */
index 8f5a24e..0f5f912 100644 (file)
@@ -109,7 +109,9 @@ static void attr_noreturn usage(void)
        exit(EXIT_FAILURE);
 }
 
-char *dirpath[]  = { "", DATADIR "/" KEYMAPDIR "/**", KERNDIR "/", 0 };
+char **dirpath;
+char *dirpath1[] = { "", DATADIR "/" KEYMAPDIR "/**", KERNDIR "/", 0 };
+char *dirpath2[] = { 0, 0 };
 char *suffixes[] = { "", ".kmap", ".map", 0 };
 
 char **args;
@@ -1147,6 +1149,16 @@ int main(int argc, char *argv[])
 
        for (i = optind; argv[i]; i++) {
                FILE *f;
+               char *ev;
+
+               dirpath = dirpath1;
+               if ((ev = getenv("LOADKEYS_KEYMAP_PATH")) != NULL) {
+                       if (!quiet && !optm)
+                               fprintf(stdout, _("Searching in %s\n"), ev);
+
+                       dirpath2[0] = ev;
+                       dirpath = dirpath2;
+               }
 
                if (optd) {
                        /* first read default map - search starts in . */