mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-26 11:16:55 +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/docstream.h"
|
||||||
#include "support/FileName.h"
|
#include "support/FileName.h"
|
||||||
#include "support/filetools.h"
|
#include "support/filetools.h"
|
||||||
|
#include "support/gettext.h"
|
||||||
|
#include "support/lstrings.h"
|
||||||
|
|
||||||
|
#include "frontends/alert.h"
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <sstream>
|
#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 {
|
enum {
|
||||||
BN_BIND,
|
BN_BIND,
|
||||||
@ -223,14 +256,13 @@ bool KeyMap::read(string const & bind_file, KeyMap * unbind_map)
|
|||||||
if (lyxerr.debugging(Debug::PARSER))
|
if (lyxerr.debugging(Debug::PARSER))
|
||||||
lexrc.printTable(lyxerr);
|
lexrc.printTable(lyxerr);
|
||||||
|
|
||||||
FileName const tmp = i18nLibFileSearch("bind", bind_file, "bind");
|
lexrc.setFile(bind_file);
|
||||||
lexrc.setFile(tmp);
|
|
||||||
if (!lexrc.isOK()) {
|
if (!lexrc.isOK()) {
|
||||||
LYXERR0("KeyMap::read: cannot open bind file:" << tmp);
|
LYXERR0("KeyMap::read: cannot open bind file:" << bind_file.absFilename());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
LYXERR(Debug::KBMAP, "Reading bind file:" << tmp);
|
LYXERR(Debug::KBMAP, "Reading bind file:" << bind_file.absFilename());
|
||||||
|
|
||||||
bool error = false;
|
bool error = false;
|
||||||
while (lexrc.isOK()) {
|
while (lexrc.isOK()) {
|
||||||
@ -313,7 +345,7 @@ bool KeyMap::read(string const & bind_file, KeyMap * unbind_map)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (error)
|
if (error)
|
||||||
LYXERR0("KeyMap::read: error while reading bind file:" << tmp);
|
LYXERR0("KeyMap::read: error while reading bind file:" << bind_file.absFilename());
|
||||||
return !error;
|
return !error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
17
src/KeyMap.h
17
src/KeyMap.h
@ -26,6 +26,10 @@
|
|||||||
|
|
||||||
namespace lyx {
|
namespace lyx {
|
||||||
|
|
||||||
|
namespace support {
|
||||||
|
class FileName;
|
||||||
|
}
|
||||||
|
|
||||||
/// Defines key maps and actions for key sequences
|
/// Defines key maps and actions for key sequences
|
||||||
class KeyMap {
|
class KeyMap {
|
||||||
public:
|
public:
|
||||||
@ -37,6 +41,12 @@ public:
|
|||||||
UserExtraUnbind //< \unbind loaded from user.bind, without
|
UserExtraUnbind //< \unbind loaded from user.bind, without
|
||||||
//< corresponding entry in system bind file.
|
//< 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.
|
* Bind/Unbind a key sequence to an action.
|
||||||
* @return 0 on success, or position in string seq where error
|
* @return 0 on success, or position in string seq where error
|
||||||
@ -72,8 +82,10 @@ public:
|
|||||||
*
|
*
|
||||||
* @param bind_file bind file
|
* @param bind_file bind file
|
||||||
* @param unbind_map pointer to a KeyMap that holds \unbind bindings
|
* @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.
|
/** write to a bind file.
|
||||||
* @param append append to the bind_file instead of overwrite it
|
* @param append append to the bind_file instead of overwrite it
|
||||||
@ -156,6 +168,9 @@ private:
|
|||||||
FuncRequest func;
|
FuncRequest func;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
///
|
||||||
|
bool read(support::FileName const & bind_file, KeyMap * unbind_map = 0);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Given an action, find all keybindings
|
* Given an action, find all keybindings
|
||||||
* @param func the action
|
* @param func the action
|
||||||
|
@ -2264,8 +2264,8 @@ void PrefShortcuts::apply(LyXRC & rc) const
|
|||||||
// The good thing is that the menus are updated automatically.
|
// The good thing is that the menus are updated automatically.
|
||||||
theTopLevelKeymap().clear();
|
theTopLevelKeymap().clear();
|
||||||
theTopLevelKeymap().read("site");
|
theTopLevelKeymap().read("site");
|
||||||
theTopLevelKeymap().read(rc.bind_file);
|
theTopLevelKeymap().read(rc.bind_file, 0, KeyMap::Fallback);
|
||||||
theTopLevelKeymap().read("user");
|
theTopLevelKeymap().read("user", 0, KeyMap::MissingOK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2279,7 +2279,7 @@ void PrefShortcuts::update(LyXRC const & rc)
|
|||||||
system_bind_.read("site");
|
system_bind_.read("site");
|
||||||
system_bind_.read(rc.bind_file);
|
system_bind_.read(rc.bind_file);
|
||||||
// \unbind in user.bind is added to user_unbind_
|
// \unbind in user.bind is added to user_unbind_
|
||||||
user_bind_.read("user", &user_unbind_);
|
user_bind_.read("user", &user_unbind_, KeyMap::MissingOK);
|
||||||
updateShortcutsTW();
|
updateShortcutsTW();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user