#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>
size_t KeyMap::bind(string const & seq, FuncRequest const & func)
{
LYXERR(Debug::KBMAP, "BIND: Sequence `" << seq << "' Action `"
- << func.action << '\'');
+ << func.action() << '\'');
KeySequence k(0, 0);
it->prefixes.reset();
}
it->func = func;
- it->func.origin = FuncRequest::KEYBOARD;
+ it->func.setOrigin(FuncRequest::KEYBOARD);
return;
} else if (!it->prefixes.get()) {
lyxerr << "Error: New binding for '"
newone->mod = seq->modifiers[r];
if (r + 1 == seq->length()) {
newone->func = func;
- newone->func.origin = FuncRequest::KEYBOARD;
+ newone->func.setOrigin(FuncRequest::KEYBOARD);
newone->prefixes.reset();
} else {
newone->prefixes.reset(new KeyMap);
}
-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()) {
string cmd = lexrc.getString();
FuncRequest func = lyxaction.lookupFunc(cmd);
- if (func.action == LFUN_UNKNOWN_ACTION) {
+ if (func.action() == LFUN_UNKNOWN_ACTION) {
lexrc.printError("BN_BIND: Unknown LyX function `$$Token'");
error = true;
break;
string cmd = lexrc.getString();
FuncRequest func = lyxaction.lookupFunc(cmd);
- if (func.action == LFUN_UNKNOWN_ACTION) {
+ if (func.action() == LFUN_UNKNOWN_ACTION) {
lexrc.printError("BN_UNBIND: Unknown LyX"
" function `$$Token'");
error = true;
}
if (error)
- LYXERR0("KeyMap::read: error while reading bind file:" << tmp);
+ LYXERR0("KeyMap::read: error while reading bind file:" << bind_file.absFileName());
return !error;
}
BindingList::const_iterator it = list.begin();
BindingList::const_iterator it_end = list.end();
for (; it != it_end; ++it) {
- FuncCode action = it->request.action;
+ FuncCode action = it->request.action();
string arg = to_utf8(it->request.argument());
+ string const cmd = lyxaction.getActionName(action)
+ + (arg.empty() ? string() : " " + arg) ;
os << tag << " \""
- << to_utf8(it->sequence.print(KeySequence::BindFile))
- << "\" \""
- << lyxaction.getActionName(action)
- << (arg.empty() ? "" : " ") << arg
- << "\"\n";
+ << to_utf8(it->sequence.print(KeySequence::BindFile))
+ << "\" " << Lexer::quoteString(cmd)
+ << "\n";
}
os << "\n";
os.close();
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();
- for (; fit != fit_end; ++fit) {
+ LyXAction::const_iterator fit = lyxaction.func_begin();
+ LyXAction::const_iterator const fen = lyxaction.func_end();
+ for (; fit != fen; ++fit) {
FuncCode action = fit->second;
bool has_action = false;
- BindingList::const_iterator it = list.begin();
- BindingList::const_iterator it_end = list.end();
- for (; it != it_end; ++it)
- if (it->request.action == action) {
+ BindingList::const_iterator bit = list.begin();
+ BindingList::const_iterator const ben = list.end();
+ for (; bit != ben; ++bit)
+ if (bit->request.action() == action) {
has_action = true;
break;
}