added the dump option

useful for debugging, if the dump option is set hkd prints the hotkey list
xkbcommon
Alessandro Mauri 4 years ago
parent 122ba9b44b
commit 699ddd057c
  1. 4
      hkd.1
  2. 44
      hkd.c

@ -6,6 +6,7 @@ hkd \- simple HotKey Daemon
.SH SYNOPSIS .SH SYNOPSIS
.SY hkd .SY hkd
.OP \-v .OP \-v
.OP \-d
.OP \-c file .OP \-c file
.YS .YS
@ -23,6 +24,9 @@ correctly.
.IP \-v .IP \-v
verbose, prints debug information and the internal pressed key buffer upon verbose, prints debug information and the internal pressed key buffer upon
change acting as a crude keylogger :^) change acting as a crude keylogger :^)
.IP \-d
dump, used for debugging, it prints the whole hotkey list along with the
information about the hotkeys (matching type, keys and associated command).
.IP "\-c file" .IP "\-c file"
override default configuration file location, instead using the specified override default configuration file location, instead using the specified
.I file .I file

44
hkd.c

@ -235,7 +235,7 @@ char *ext_config_file = NULL;
/* Flags */ /* Flags */
int vflag = 0; int vflag = 0;
int dead = 0; // exit flag int dead = 0; // exit flag
int dump = 0;
/* key buffer operations */ /* key buffer operations */
int key_buffer_add (struct key_buffer*, unsigned short); int key_buffer_add (struct key_buffer*, unsigned short);
int key_buffer_remove (struct key_buffer*, unsigned short); int key_buffer_remove (struct key_buffer*, unsigned short);
@ -251,6 +251,7 @@ void remove_lock (void);
void die (const char *, ...); void die (const char *, ...);
int prepare_epoll (int *, int, int); int prepare_epoll (int *, int, int);
unsigned short key_to_code (char *); unsigned short key_to_code (char *);
const char * code_to_name (unsigned int);
/* hotkey list operations */ /* hotkey list operations */
void hotkey_list_add (struct hotkey_list_e *, struct key_buffer *, char *, int); void hotkey_list_add (struct hotkey_list_e *, struct key_buffer *, char *, int);
void hotkey_list_destroy (struct hotkey_list_e *); void hotkey_list_destroy (struct hotkey_list_e *);
@ -288,7 +289,7 @@ int main (int argc, char *argv[])
sigaction(SIGINT, &action, NULL); sigaction(SIGINT, &action, NULL);
/* Parse command line arguments */ /* Parse command line arguments */
while ((opc = getopt(argc, argv, "vc:")) != -1) { while ((opc = getopt(argc, argv, "vc:d")) != -1) {
switch (opc) { switch (opc) {
case 'v': case 'v':
vflag = 1; vflag = 1;
@ -298,6 +299,10 @@ int main (int argc, char *argv[])
if (!ext_config_file) if (!ext_config_file)
die("malloc in main():"); die("malloc in main():");
strcpy(ext_config_file, optarg); strcpy(ext_config_file, optarg);
break;
case 'd':
dump = 1;
break;
break; break;
} }
} }
@ -305,6 +310,20 @@ int main (int argc, char *argv[])
/* Parse config file */ /* Parse config file */
parse_config_file(); parse_config_file();
/* If a dump is requested print the hotkey list then exit */
if (dump) {
printf("DUMPING HOTKEY LIST\n\n");
for (struct hotkey_list_e *tmp = hotkey_list; tmp; tmp = tmp->next) {
printf("Hotkey\n");
printf("\tKeys: ");
for (unsigned int i = 0; i < tmp->kb.size; i++)
printf("%s ", code_to_name(tmp->kb.buf[i]));
printf("\n\tMatching: %s\n", tmp->fuzzy ? "fuzzy" : "ordered");
printf("\tCommand: %s\n\n", tmp->command);
}
exit(EXIT_SUCCESS);
}
/* Load descriptors */ /* Load descriptors */
update_descriptors_list(&fds, &fd_num); update_descriptors_list(&fds, &fd_num);
@ -375,17 +394,9 @@ int main (int argc, char *argv[])
continue; continue;
if (vflag) { if (vflag) {
int ci;
printf("Pressed keys: "); printf("Pressed keys: ");
for (unsigned int i = 0; i < pb.size; i++) { for (unsigned int i = 0; i < pb.size; i++)
ci = i; printf("%s ", code_to_name(pb.buf[i]));
while (pb.buf[i] != key_conversion_table[ci + 1].value) {
if (ci >= array_size_const(key_conversion_table) - 2)
break;
ci++;
}
printf("%s ", key_conversion_table[ci + 1].name);
}
putchar('\n'); putchar('\n');
} }
@ -914,3 +925,12 @@ void die(const char *fmt, ...)
va_end(ap); va_end(ap);
exit(errno ? errno : 1); exit(errno ? errno : 1);
} }
const char * code_to_name (unsigned int code)
{
for (int i = 0; i < array_size_const(key_conversion_table); i++) {
if (key_conversion_table[i].value == code)
return key_conversion_table[i].name;
}
return "Key not recognized";
}

Loading…
Cancel
Save