// This binds a key to an action
int kb_keymap::bind(string const & seq, int action)
{
+ if (lyxerr.debugging(Debug::KBMAP)) {
+ lyxerr << "BIND: Sequence `"
+ << seq << "' Action `"
+ << action << "'" << endl;
+ }
+
kb_sequence k;
int const res = k.parse(seq);
unsigned int const msk0 = ((*cit).mod >> 16) & 0xffff;
if ((*cit).code == key && (mod & ~msk0) == msk1) {
// math found:
- if ((*cit).table) {
+ if ((*cit).table.get()) {
// this is a prefix key - set new map
- seq->curmap = (*cit).table;
+ seq->curmap = (*cit).table.get();
return 0;
} else {
// final key - reset map
<< buf
<< "' is overriding old binding..."
<< endl;
- if ((*it).table) {
- delete (*it).table;
- (*it).table = 0;
+ if ((*it).table.get()) {
+ (*it).table.reset(0);
}
(*it).action = action;
return 0;
- } else if (!(*it).table) {
+ } else if (!(*it).table.get()) {
string buf;
seq->print(buf, true);
lyxerr << "Error: New binding for '" << buf
(*newone).mod = modmsk;
if (idx + 1 == seq->length) {
(*newone).action = action;
- (*newone).table = 0;
+ (*newone).table.reset(0);
return 0;
} else {
- (*newone).table = new kb_keymap;
+ (*newone).table.reset(new kb_keymap);
return (*newone).table->defkey(seq, action, idx + 1);
}
}
-/* ---F+------------------------------------------------------------------ *\
- Function : kb_keymap::~kb_keymap
- Called by : [destructor]
- Purpose : free keymap and its descendents
- Parameters: none
- Returns : nothing
-\* ---F------------------------------------------------------------------- */
-
-kb_keymap::~kb_keymap()
-{
- // This could be done by a destructor in kb_key.
- Table::iterator end = table.end();
- for (Table::iterator it = table.begin(); it != end; ++it) {
- delete (*it).table;
- }
-}
-
-
string const kb_keymap::keyname(kb_key const & k)
{
string buf;
// Finds a key for a keyaction, if possible
-string const kb_keymap::findbinding(int act) const
+string const kb_keymap::findbinding(int act, string const & prefix) const
{
string res;
if (table.empty()) return res;
Table::const_iterator end = table.end();
for (Table::const_iterator cit = table.begin();
cit != end; ++cit) {
- if ((*cit).table) {
- string suffix = (*cit).table->findbinding(act);
- suffix = strip(suffix, ' ');
- suffix = strip(suffix, ']');
- suffix = frontStrip(suffix, '[');
- if (!suffix.empty()) {
- res += "[" + keyname((*cit)) + " "
- + suffix + "] ";
- }
+ if ((*cit).table.get()) {
+ res += (*cit).table->findbinding(act,
+ prefix
+ + keyname((*cit))
+ + " ");
} else if ((*cit).action == act) {
res += "[";
- res += keyname((*cit));
+ res += prefix + keyname((*cit));
res += "] ";
}
}