X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=src%2Fkeybindings.h;h=ce15e6680197b19504145f800e2dd14d4d2b7368;hb=550d22ec0c3f530f5d317746f3f7e75251a1de4b;hp=b0ff912944040920edfe6ee022c27d51c4e99f43;hpb=e9d8b1aca776341c9cdaa2ea6406336661d82a76;p=plomrogue diff --git a/src/keybindings.h b/src/keybindings.h index b0ff912..ce15e66 100644 --- a/src/keybindings.h +++ b/src/keybindings.h @@ -1,15 +1,79 @@ -struct KeyBinding { - char * name; - uint16_t key; }; - -struct KeysWinData { - uint16_t max; - char edit; - uint16_t select; }; - -void init_keybindings(struct World *); -void save_keybindings(struct World *); -uint16_t get_action_key (struct KeyBinding *, char *); -char * get_keyname(uint16_t); -void keyswin_mod_key (struct World *, struct WinMeta *); -void keyswin_move_selection (struct World *, char); +/* keybindings.h + * + * Retrieval and storage of keybindings. + */ + +#ifndef KEYBINDINGS_H +#define KEYBINDINGS_H + + + +#include /* for uint16_t */ +struct World; + + + +/* Individual keybinding in keybinding chain. */ +struct KeyBinding +{ + struct KeyBinding * next; + uint16_t key; /* keycode */ + char * name; /* name of functionality bound to keycode */ +}; + + + +/* Wrapper to keybinding chain, contains some keybinding editing metadata. */ +struct KeyBiData +{ + struct KeyBinding * kbs; + uint8_t edit; /* 1 if currently editing a keybinding, else 0 */ + uint16_t select; /* linear list index of keybinding selected for editing */ +}; + + + +/* Return keycode matched by keybinding to command of "name". */ +extern uint16_t get_keycode_to_action(struct KeyBinding * keybindings, + char * name); + +/* Return human-readable name (of maximum 9 chars) for "keycode" as matched by + * ncurses.h; if none is found, return "UNKNOWN". + */ +extern char * get_name_to_keycode(struct World * world, uint16_t keycode); + +/* Return number of keybindings in keybindings chain from "kb_p" on. */ +extern uint16_t get_n_of_keybs(struct KeyBinding * kb_p); + +/* Return "n"-th keybinding in keybindings chain from "kb_p" on. */ +extern struct KeyBinding * get_keyb_of_n(struct KeyBinding * kb_p, uint16_t n); + + + +/* Initialize/save keybindings data from/to file at "path" to/from keybindings + * data pointer "kbd". + */ +extern void init_keybindings(struct World * world, char * path, + struct KeyBiData * kbd); +extern void save_keybindings(struct World * world, char * path, + struct KeyBiData * kbd); + +/* Free keybinding chain starting at "kb_start". */ +extern void free_keybindings(struct KeyBinding * kb_start); + + + +/* Mark keybinding selected for modification as being edited, get user input to + * modify it, then unmark it again. Ensure there are max. three digits in the + * keycode ASCII representation. + */ +extern void mod_selected_keyb(struct World * world, struct KeyBiData * kbd); + +/* Move keybinding modification selection upwards ("dir"=="u") or downwards + * ("dir"=="d") within the limits of the keybindings chain length. + */ +extern void move_keyb_mod_selection(struct KeyBiData * kbd, char dir); + + + +#endif