/************************************************************************** ** ** sngrep - SIP Messages flow viewer ** ** Copyright (C) 2013-2018 Ivan Alonso (Kaian) ** Copyright (C) 2013-2018 Irontec SL. All rights reserved. ** ** This program is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program. If not, see . ** ****************************************************************************/ /** * @file option.h * @author Ivan Alonso [aka Kaian] * * @brief Functions to manage keybindings * * sngrep keybindings are associated with actions. Each action can store multiple * keybindings. * Keybindings configured by user using *key* directive of sngreprc file, * in the format: * * key ui_action keycode * * keycode must be a letter (lowercase or uppercase) or a ^ sign with an uppercase * letter when Ctrl modifier is used. * */ #ifndef __SNGREP_KEYBINDING_H_ #define __SNGREP_KEYBINDING_H_ //! Number of keybindings per action #define MAX_BINDINGS 5 //! Some undefined key codes #define KEY_CTRL(n) ((n)-64) #define KEY_ESC 27 #define KEY_INTRO 10 #define KEY_TAB 9 #define KEY_BACKSPACE2 8 #define KEY_BACKSPACE3 127 #define KEY_SPACE ' ' /** * @brief Available Key actions */ enum key_actions { ACTION_PRINTABLE = 0, ACTION_UP, ACTION_DOWN, ACTION_LEFT, ACTION_RIGHT, ACTION_DELETE, ACTION_BACKSPACE, ACTION_NPAGE, ACTION_PPAGE, ACTION_HNPAGE, ACTION_HPPAGE, ACTION_BEGIN, ACTION_END, ACTION_PREV_FIELD, ACTION_NEXT_FIELD, ACTION_RESIZE_SCREEN, ACTION_CLEAR, ACTION_CLEAR_CALLS, ACTION_CLEAR_CALLS_SOFT, ACTION_TOGGLE_SYNTAX, ACTION_CYCLE_COLOR, ACTION_COMPRESS, ACTION_SHOW_HOSTNAMES, ACTION_SHOW_ALIAS, ACTION_TOGGLE_PAUSE, ACTION_PREV_SCREEN, ACTION_SHOW_HELP, ACTION_SHOW_RAW, ACTION_SHOW_FLOW, ACTION_SHOW_FLOW_EX, ACTION_SHOW_FILTERS, ACTION_SHOW_COLUMNS, ACTION_SHOW_SETTINGS, ACTION_SHOW_STATS, ACTION_COLUMN_MOVE_UP, ACTION_COLUMN_MOVE_DOWN, ACTION_SDP_INFO, ACTION_DISP_FILTER, ACTION_SAVE, ACTION_SELECT, ACTION_CONFIRM, ACTION_TOGGLE_MEDIA, ACTION_ONLY_MEDIA, ACTION_TOGGLE_RAW, ACTION_INCREASE_RAW, ACTION_DECREASE_RAW, ACTION_RESET_RAW, ACTION_ONLY_SDP, ACTION_TOGGLE_HINT, ACTION_AUTOSCROLL, ACTION_SORT_PREV, ACTION_SORT_NEXT, ACTION_SORT_SWAP, ACTION_TOGGLE_TIME, ACTION_SENTINEL }; //! Shorter declaration of key_binding structure typedef struct key_binding key_binding_t; /** * @brief Struct to hold a keybinding data */ struct key_binding { //! Keybinding action id int id; //! Keybinding action name const char *name; //! keybindings for this action int keys[MAX_BINDINGS]; //! How many keys are binded to this action int bindcnt; }; /** * @brief Print configured keybindigs */ void key_bindings_dump(); /** * @brief Return Keybinding data for a given action * @return key_binding_t structure pointer or NULL if not found */ key_binding_t * key_binding_data(int action); /** * @brief Bind a key to an action * * @param action One action defined in @key_actions * @param key Keycode returned by getch */ void key_bind_action(int action, int key); /** * @brief Unbind a key to an action * * @param action One action defined in @key_actions * @param key Keycode returned by getch */ void key_unbind_action(int action, int key); /** * @brief Find the next action for a given key * * Set start parameter to -1 for start searching the * first action. * * @param action One action defined in @key_actions * @param key Keycode returned by getch */ int key_find_action(int key, int start); /** * @brief Return the action id associate to an action str * * This function is used to translate keybindings configuration * found in sngreprc file to internal Action IDs * * @param action Configuration string for an action * @return action id from @key_actions or -1 if none found */ int key_action_id(const char *action); /** * @brief Check if key is a printable ascii character * * @return 1 if key is alphanumeric or space */ int key_is_printable(int key); /** * @brief Return a Human readable representation of a key * * @return Character string representing the key */ const char * key_to_str(int key); /** * @brief Parse Human key declaration to curses key * * This function is used to translate keybindings configuration * keys found in sngreprc file into internal ncurses keycodes * * @return ncurses keycode for the given key string */ int key_from_str(const char *key); /** * @brief Return Human readable key for an action * * This function is used to display keybindings in the bottom bar * of panels. Depending on sngrep configuration it will display the * first associated keybding with the action or the second one * (aka alternative). * * @param action One action defined in @key_actions * @return Main/Alt keybinding for the given action */ const char * key_action_key_str(int action); /** * @brief Return key value for a given action * * @param action One action defined in @key_actions * @return Main/Alt keybinding for the given action */ int key_action_key(int action); #endif /* __SNGREP_KEYBINDING_H_ */