mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
Conversion routines for bind files.
All the LFUNs listed in the release notes should be properly converted. If not, then changes should be made to the file: lib/scripts/prefs2prefs-lfuns.py git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@37231 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
0e2828917b
commit
f05e76c330
@ -37,6 +37,10 @@ using namespace lyx::support;
|
||||
|
||||
namespace lyx {
|
||||
|
||||
namespace {
|
||||
// current format of bind files
|
||||
static unsigned int const BIND_FORMAT = 1;
|
||||
}
|
||||
|
||||
string const KeyMap::printKeySym(KeySymbol const & key, KeyModifier mod)
|
||||
{
|
||||
@ -243,10 +247,32 @@ bool KeyMap::read(string const & bind_file, KeyMap * unbind_map, BindReadType rt
|
||||
|
||||
|
||||
bool KeyMap::read(FileName const & bind_file, KeyMap * unbind_map)
|
||||
{
|
||||
ReturnValues retval = readWithoutConv(bind_file, unbind_map);
|
||||
if (retval != FormatMismatch)
|
||||
return retval == ReadOK;
|
||||
|
||||
LYXERR(Debug::FILES, "Converting bind file to " << BIND_FORMAT);
|
||||
FileName const tempfile = FileName::tempName("convert_bind");
|
||||
bool const success = prefs2prefs(bind_file, tempfile, true);
|
||||
if (!success) {
|
||||
LYXERR0 ("Unable to convert " << bind_file <<
|
||||
" to format " << BIND_FORMAT);
|
||||
return false;
|
||||
}
|
||||
retval = readWithoutConv(tempfile, unbind_map);
|
||||
//tempfile.removeFile();
|
||||
return retval == ReadOK;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
KeyMap::ReturnValues KeyMap::readWithoutConv(FileName const & bind_file, KeyMap * unbind_map)
|
||||
{
|
||||
enum {
|
||||
BN_BIND,
|
||||
BN_BINDFILE,
|
||||
BN_FORMAT,
|
||||
BN_UNBIND
|
||||
};
|
||||
|
||||
@ -254,6 +280,7 @@ bool KeyMap::read(FileName const & bind_file, KeyMap * unbind_map)
|
||||
{ "\\bind", BN_BIND },
|
||||
{ "\\bind_file", BN_BINDFILE },
|
||||
{ "\\unbind", BN_UNBIND },
|
||||
{ "format", BN_FORMAT }
|
||||
};
|
||||
|
||||
Lexer lexrc(bindTags);
|
||||
@ -263,11 +290,13 @@ bool KeyMap::read(FileName const & bind_file, KeyMap * unbind_map)
|
||||
lexrc.setFile(bind_file);
|
||||
if (!lexrc.isOK()) {
|
||||
LYXERR0("KeyMap::read: cannot open bind file:" << bind_file.absFileName());
|
||||
return false;
|
||||
return FileError;
|
||||
}
|
||||
|
||||
LYXERR(Debug::KBMAP, "Reading bind file:" << bind_file.absFileName());
|
||||
|
||||
// format of pre-2.0 bind files, before this tag was introduced.
|
||||
unsigned int format = 0;
|
||||
bool error = false;
|
||||
while (lexrc.isOK()) {
|
||||
switch (lexrc.lex()) {
|
||||
@ -280,6 +309,11 @@ bool KeyMap::read(FileName const & bind_file, KeyMap * unbind_map)
|
||||
case Lexer::LEX_FEOF:
|
||||
continue;
|
||||
|
||||
case BN_FORMAT:
|
||||
if (lexrc.next())
|
||||
format = lexrc.getInteger();
|
||||
break;
|
||||
|
||||
case BN_BIND: {
|
||||
if (!lexrc.next()) {
|
||||
lexrc.printError("BN_BIND: Missing key sequence");
|
||||
@ -328,7 +362,7 @@ bool KeyMap::read(FileName const & bind_file, KeyMap * unbind_map)
|
||||
error = true;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
if (unbind_map)
|
||||
unbind_map->bind(seq, func);
|
||||
else
|
||||
@ -346,23 +380,31 @@ bool KeyMap::read(FileName const & bind_file, KeyMap * unbind_map)
|
||||
error |= !read(tmp, unbind_map);
|
||||
break;
|
||||
}
|
||||
|
||||
// This is triggered the first time through the loop unless
|
||||
// we hit a format tag.
|
||||
if (format != BIND_FORMAT)
|
||||
return FormatMismatch;
|
||||
}
|
||||
|
||||
if (error)
|
||||
if (error) {
|
||||
LYXERR0("KeyMap::read: error while reading bind file:" << bind_file.absFileName());
|
||||
return !error;
|
||||
return ReadError;
|
||||
}
|
||||
return ReadOK;
|
||||
}
|
||||
|
||||
|
||||
void KeyMap::write(string const & bind_file, bool append, bool unbind) const
|
||||
{
|
||||
ofstream os(bind_file.c_str(),
|
||||
ofstream os(bind_file.c_str(),
|
||||
append ? (ios::app | ios::out) : ios::out);
|
||||
|
||||
if (!append)
|
||||
os << "## This file is automatically generated by lyx\n"
|
||||
<< "## All modifications will be lost\n\n";
|
||||
|
||||
<< "## All modifications will be lost\n\n"
|
||||
<< "Format " << BIND_FORMAT << "\n\n";
|
||||
|
||||
string tag = unbind ? "\\unbind" : "\\bind";
|
||||
BindingList const list = listBindings(false);
|
||||
BindingList::const_iterator it = list.begin();
|
||||
|
@ -168,8 +168,16 @@ private:
|
||||
FuncRequest func;
|
||||
};
|
||||
|
||||
enum ReturnValues {
|
||||
ReadOK,
|
||||
ReadError,
|
||||
FileError,
|
||||
FormatMismatch
|
||||
};
|
||||
///
|
||||
bool read(support::FileName const & bind_file, KeyMap * unbind_map = 0);
|
||||
///
|
||||
ReturnValues readWithoutConv(support::FileName const & bind_file, KeyMap * unbind_map = 0);
|
||||
|
||||
/**
|
||||
* Given an action, find all keybindings
|
||||
|
Loading…
Reference in New Issue
Block a user