mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-26 03:11:59 +00:00
React better if we can't find bind files. Related to bug 6076.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@30639 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
091e3908b0
commit
375d1526bb
@ -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 <fstream>
|
||||
#include <sstream>
|
||||
@ -205,7 +209,36 @@ 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;
|
||||
}
|
||||
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)));
|
||||
// So try it with the default file.
|
||||
if (read("cua", unbind_map))
|
||||
return true;
|
||||
lyxerr << "Could not find cua bind file!";
|
||||
frontend::Alert::warning(_("Could not find cua bind file"),
|
||||
_("Unable to find the default bind file `cua'.\n"
|
||||
"Please check your installation."));
|
||||
return false;
|
||||
}
|
||||
return read(bf, unbind_map);
|
||||
}
|
||||
|
||||
|
||||
bool KeyMap::read(FileName const & bind_file, KeyMap * unbind_map)
|
||||
{
|
||||
enum {
|
||||
BN_BIND,
|
||||
@ -223,14 +256,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 +345,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;
|
||||
}
|
||||
|
||||
|
17
src/KeyMap.h
17
src/KeyMap.h
@ -26,6 +26,10 @@
|
||||
|
||||
namespace lyx {
|
||||
|
||||
namespace support {
|
||||
class FileName;
|
||||
}
|
||||
|
||||
/// Defines key maps and actions for key sequences
|
||||
class KeyMap {
|
||||
public:
|
||||
@ -37,6 +41,12 @@ public:
|
||||
UserExtraUnbind //< \unbind loaded from user.bind, without
|
||||
//< corresponding entry in system bind file.
|
||||
};
|
||||
enum BindReadType {
|
||||
MissingOK, //< It's OK if this file is missing.
|
||||
Fallback, //< If missing, fallback to default "cua". This should only
|
||||
//< be used when attempting to read the user-secified bind file.
|
||||
Default //< Report error and return.
|
||||
};
|
||||
/**
|
||||
* Bind/Unbind a key sequence to an action.
|
||||
* @return 0 on success, or position in string seq where error
|
||||
@ -72,8 +82,10 @@ public:
|
||||
*
|
||||
* @param bind_file bind file
|
||||
* @param unbind_map pointer to a KeyMap that holds \unbind bindings
|
||||
* @param rt how to respond if the file can't be found
|
||||
*/
|
||||
bool read(std::string const & bind_file, KeyMap * unbind_map = 0);
|
||||
bool read(std::string const & bind_file, KeyMap * unbind_map = 0,
|
||||
BindReadType rt = Default);
|
||||
|
||||
/** write to a bind file.
|
||||
* @param append append to the bind_file instead of overwrite it
|
||||
@ -156,6 +168,9 @@ private:
|
||||
FuncRequest func;
|
||||
};
|
||||
|
||||
///
|
||||
bool read(support::FileName const & bind_file, KeyMap * unbind_map = 0);
|
||||
|
||||
/**
|
||||
* Given an action, find all keybindings
|
||||
* @param func the action
|
||||
|
@ -2264,8 +2264,8 @@ void PrefShortcuts::apply(LyXRC & rc) const
|
||||
// The good thing is that the menus are updated automatically.
|
||||
theTopLevelKeymap().clear();
|
||||
theTopLevelKeymap().read("site");
|
||||
theTopLevelKeymap().read(rc.bind_file);
|
||||
theTopLevelKeymap().read("user");
|
||||
theTopLevelKeymap().read(rc.bind_file, 0, KeyMap::Fallback);
|
||||
theTopLevelKeymap().read("user", 0, KeyMap::MissingOK);
|
||||
}
|
||||
|
||||
|
||||
@ -2279,7 +2279,7 @@ void PrefShortcuts::update(LyXRC const & rc)
|
||||
system_bind_.read("site");
|
||||
system_bind_.read(rc.bind_file);
|
||||
// \unbind in user.bind is added to user_unbind_
|
||||
user_bind_.read("user", &user_unbind_);
|
||||
user_bind_.read("user", &user_unbind_, KeyMap::MissingOK);
|
||||
updateShortcutsTW();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user