156 |
DEBUG_KBD(("\n")); |
DEBUG_KBD(("\n")); |
157 |
} |
} |
158 |
|
|
159 |
|
void |
160 |
|
xkeymap_from_locale(const char *locale) |
161 |
|
{ |
162 |
|
char *str, *ptr; |
163 |
|
FILE *fp; |
164 |
|
|
165 |
|
/* Create a working copy */ |
166 |
|
str = strdup(locale); |
167 |
|
if (str == NULL) |
168 |
|
{ |
169 |
|
perror("strdup"); |
170 |
|
exit(1); |
171 |
|
} |
172 |
|
|
173 |
|
/* Truncate at dot and at */ |
174 |
|
ptr = strrchr(str, '.'); |
175 |
|
if (ptr) |
176 |
|
*ptr = '\0'; |
177 |
|
ptr = strrchr(str, '@'); |
178 |
|
if (ptr) |
179 |
|
*ptr = '\0'; |
180 |
|
|
181 |
|
/* Replace _ with - */ |
182 |
|
ptr = strrchr(str, '_'); |
183 |
|
if (ptr) |
184 |
|
*ptr = '-'; |
185 |
|
|
186 |
|
/* Convert to lowercase */ |
187 |
|
ptr = str; |
188 |
|
while (*ptr) |
189 |
|
{ |
190 |
|
*ptr = tolower((int) *ptr); |
191 |
|
ptr++; |
192 |
|
} |
193 |
|
|
194 |
|
/* Try to open this keymap (da-dk) */ |
195 |
|
fp = xkeymap_open(str); |
196 |
|
if (fp == NULL) |
197 |
|
{ |
198 |
|
/* Truncate at dash */ |
199 |
|
ptr = strrchr(str, '-'); |
200 |
|
if (ptr) |
201 |
|
*ptr = '\0'; |
202 |
|
|
203 |
|
/* Try the short name (da) */ |
204 |
|
fp = xkeymap_open(str); |
205 |
|
} |
206 |
|
|
207 |
|
if (fp) |
208 |
|
{ |
209 |
|
fclose(fp); |
210 |
|
STRNCPY(keymapname, str, sizeof(keymapname)); |
211 |
|
fprintf(stderr, "Autoselected keyboard map %s.\n", keymapname); |
212 |
|
} |
213 |
|
} |
214 |
|
|
215 |
|
|
216 |
/* Joins two path components. The result should be freed with |
/* Joins two path components. The result should be freed with |
217 |
xfree(). */ |
xfree(). */ |
218 |
static char * |
static char * |
416 |
xkeymap_init(void) |
xkeymap_init(void) |
417 |
{ |
{ |
418 |
unsigned int max_keycode; |
unsigned int max_keycode; |
|
char *mapname_ptr; |
|
419 |
|
|
420 |
if (strcmp(keymapname, "none")) |
if (strcmp(keymapname, "none")) |
421 |
{ |
{ |