#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 <fstream>
#include <sstream>
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;
}
}
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);
}
}
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;
}
&& 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;
}
-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,
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()) {
}
if (error)
- LYXERR0("KeyMap::read: error while reading bind file:" << tmp);
+ LYXERR0("KeyMap::read: error while reading bind file:" << bind_file.absFilename());
return !error;
}
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 {
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;
BindingList list;
listBindings(list, KeySequence(0, 0), tag);
if (unbound) {
- LyXAction::const_func_iterator fit = lyxaction.func_begin();
- LyXAction::const_func_iterator fit_end = lyxaction.func_end();
+ LyXAction::const_iterator fit = lyxaction.func_begin();
+ LyXAction::const_iterator fit_end = lyxaction.func_end();
for (; fit != fit_end; ++fit) {
FuncCode action = fit->second;
bool has_action = false;
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);