1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
/*
* File: macro.cc
* Summary: Crude macro-capability
* Written by: Juho Snellman <jsnell@lyseo.edu.ouka.fi>
*/
#ifndef MACRO_H
#define MACRO_H
#include <deque>
#include "enum.h"
class key_recorder;
typedef std::deque<int> keyseq;
class key_recorder {
public:
bool paused;
keyseq keys;
public:
key_recorder();
void add_key(int key, bool reverse = false);
void clear();
};
class pause_all_key_recorders {
public:
pause_all_key_recorders();
~pause_all_key_recorders();
private:
std::vector<bool> prev_pause_status;
};
int getchm(int (*rgetch)() = NULL); // keymaps applied (ie for prompts)
int getchm(KeymapContext context, int (*rgetch)() = NULL);
int getch_with_command_macros(void); // keymaps and macros (ie for commands)
void flush_input_buffer( int reason );
void macro_add_query();
void macro_init();
void macro_save();
void macro_clear_buffers();
void macro_userfn(const char *keys, const char *registryname);
// Add macro-expanded keys to the end or start of the keyboard buffer.
void macro_sendkeys_end_add_expanded(int key);
void macro_sendkeys_start_add_expanded(int key);
// [ds] Unless you know what you're doing, prefer macro_sendkeys_add_expanded
// to direct calls to macro_buf_add for pre-expanded key sequences.
//
// Crawl doesn't like holes in macro-expanded sequences in its main buffer.
void macro_buf_add(int key,
bool reverse = false, bool expanded = true);
void macro_buf_add(const keyseq &actions,
bool reverse = false, bool expanded = true);
int macro_buf_get();
void macro_buf_add_cmd(command_type cmd, bool reverse = false);
bool is_userfunction(int key);
bool is_synthetic_key(int key);
std::string get_userfunction(int key);
void add_key_recorder(key_recorder* recorder);
void remove_key_recorder(key_recorder* recorder);
bool is_processing_macro();
int get_macro_buf_size();
///////////////////////////////////////////////////////////////
// Keybinding stuff
void init_keybindings();
command_type name_to_command(std::string name);
std::string command_to_name(command_type cmd);
command_type key_to_command(int key, KeymapContext context);
int command_to_key(command_type cmd);
KeymapContext context_for_command(command_type cmd);
void bind_command_to_key(command_type cmd, int key);
std::string command_to_string(command_type cmd);
void insert_commands(std::string &desc, std::vector<command_type> cmds,
bool formatted = true);
void insert_commands(std::string &desc, const int first, ...);
#endif
|