X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FKeyMap.cpp;h=51aefe560e5b29fed2536b11d236c0e24e783c6f;hb=19bec6e8bc13c00c528392cb77826dc7de3f68e8;hp=3f0407833ab32907f9f17fa5e9edd23645057905;hpb=ab0d757bed92ada89f9711a71cd9012684620609;p=lyx.git diff --git a/src/KeyMap.cpp b/src/KeyMap.cpp index 3f0407833a..51aefe560e 100644 --- a/src/KeyMap.cpp +++ b/src/KeyMap.cpp @@ -23,6 +23,10 @@ #include "support/docstream.h" #include "support/FileName.h" #include "support/filetools.h" +#include "support/gettext.h" +#include "support/lstrings.h" + +#include "frontends/alert.h" #include #include @@ -105,20 +109,20 @@ void KeyMap::bind(KeySequence * seq, FuncRequest const & func, unsigned int r) LYXERR(Debug::KBMAP, "Warning: New binding for '" << to_utf8(seq->print(KeySequence::Portable)) << "' is overriding old binding..."); - if (it->table.get()) { - it->table.reset(); + if (it->prefixes.get()) { + it->prefixes.reset(); } it->func = func; it->func.origin = FuncRequest::KEYBOARD; return; - } else if (!it->table.get()) { + } else if (!it->prefixes.get()) { lyxerr << "Error: New binding for '" << to_utf8(seq->print(KeySequence::Portable)) << "' is overriding old binding..." << endl; return; } else { - it->table->bind(seq, func, r + 1); + it->prefixes->bind(seq, func, r + 1); return; } } @@ -130,10 +134,10 @@ void KeyMap::bind(KeySequence * seq, FuncRequest const & func, unsigned int r) if (r + 1 == seq->length()) { newone->func = func; newone->func.origin = FuncRequest::KEYBOARD; - newone->table.reset(); + newone->prefixes.reset(); } else { - newone->table.reset(new KeyMap); - newone->table->bind(seq, func, r + 1); + newone->prefixes.reset(new KeyMap); + newone->prefixes->bind(seq, func, r + 1); } } @@ -158,12 +162,12 @@ void KeyMap::unbind(KeySequence * seq, FuncRequest const & func, unsigned int r) if (r + 1 == seq->length()) { if (it->func == func) { remove = it; - if (it->table.get()) - it->table.reset(); + if (it->prefixes.get()) + it->prefixes.reset(); } - } else if (it->table.get()) { - it->table->unbind(seq, func, r + 1); - if (it->table->empty()) + } else if (it->prefixes.get()) { + it->prefixes->unbind(seq, func, r + 1); + if (it->prefixes->empty()) remove = it; return; } @@ -191,8 +195,8 @@ FuncRequest KeyMap::getBinding(KeySequence const & seq, unsigned int r) && mod2 == it->mod.second) { if (r + 1 == seq.length()) return it->func; - else if (it->table.get()) - return it->table->getBinding(seq, r + 1); + else if (it->prefixes.get()) + return it->prefixes->getBinding(seq, r + 1); } } return FuncRequest::unknown; @@ -205,7 +209,40 @@ void KeyMap::clear() } -bool KeyMap::read(string const & bind_file, KeyMap * unbind_map) +bool KeyMap::read(string const & bind_file, KeyMap * unbind_map, BindReadType rt) +{ + FileName bf = i18nLibFileSearch("bind", bind_file, "bind"); + if (bf.empty()) { + if (rt == MissingOK) + return true; + + lyxerr << "Could not find bind file: " << bind_file; + if (rt == Default) { + frontend::Alert::warning(_("Could not find bind file"), + bformat(_("Unable to find the bind file\n%1$s.\n" + "Please check your installation."), from_utf8(bind_file))); + return false; + } + + static string const defaultBindfile = "cua"; + if (bind_file == defaultBindfile) { + frontend::Alert::warning(_("Could not find `cua.bind' file"), + _("Unable to find the default bind file `cua.bind'.\n" + "Please check your installation.")); + return false; + } + + // Try it with the default file. + frontend::Alert::warning(_("Could not find bind file"), + bformat(_("Unable to find the bind file\n%1$s.\n" + "Falling back to default."), from_utf8(bind_file))); + return read(defaultBindfile, unbind_map); + } + return read(bf, unbind_map); +} + + +bool KeyMap::read(FileName const & bind_file, KeyMap * unbind_map) { enum { BN_BIND, @@ -223,14 +260,13 @@ bool KeyMap::read(string const & bind_file, KeyMap * unbind_map) if (lyxerr.debugging(Debug::PARSER)) lexrc.printTable(lyxerr); - FileName const tmp = i18nLibFileSearch("bind", bind_file, "bind"); - lexrc.setFile(tmp); + lexrc.setFile(bind_file); if (!lexrc.isOK()) { - LYXERR0("KeyMap::read: cannot open bind file:" << tmp); + LYXERR0("KeyMap::read: cannot open bind file:" << bind_file.absFilename()); return false; } - LYXERR(Debug::KBMAP, "Reading bind file:" << tmp); + LYXERR(Debug::KBMAP, "Reading bind file:" << bind_file.absFilename()); bool error = false; while (lexrc.isOK()) { @@ -313,7 +349,7 @@ bool KeyMap::read(string const & bind_file, KeyMap * unbind_map) } if (error) - LYXERR0("KeyMap::read: error while reading bind file:" << tmp); + LYXERR0("KeyMap::read: error while reading bind file:" << bind_file.absFilename()); return !error; } @@ -362,9 +398,9 @@ FuncRequest const & KeyMap::lookup(KeySymbol const &key, if (cit->code == key && cit->mod.first == check) { // match found - if (cit->table.get()) { + if (cit->prefixes.get()) { // this is a prefix key - set new map - seq->curmap = cit->table.get(); + seq->curmap = cit->prefixes.get(); static FuncRequest prefix(LFUN_COMMAND_PREFIX); return prefix; } else { @@ -428,10 +464,10 @@ KeyMap::Bindings KeyMap::findBindings(FuncRequest const & func, Table::const_iterator end = table.end(); for (Table::const_iterator cit = table.begin(); cit != end; ++cit) { - if (cit->table.get()) { + if (cit->prefixes.get()) { KeySequence seq = prefix; seq.addkey(cit->code, cit->mod.first); - Bindings res2 = cit->table->findBindings(func, seq); + Bindings res2 = cit->prefixes->findBindings(func, seq); res.insert(res.end(), res2.begin(), res2.end()); } else if (cit->func == func) { KeySequence seq = prefix; @@ -476,10 +512,10 @@ void KeyMap::listBindings(BindingList & list, Table::const_iterator it_end = table.end(); for (; it != it_end; ++it) { // a LFUN_COMMAND_PREFIX - if (it->table.get()) { + if (it->prefixes.get()) { KeySequence seq = prefix; seq.addkey(it->code, it->mod.first); - it->table->listBindings(list, seq, tag); + it->prefixes->listBindings(list, seq, tag); } else { KeySequence seq = prefix; seq.addkey(it->code, it->mod.first);