kbmap->bind("Up", LFUN_UP);
kbmap->bind("Down", LFUN_DOWN);
- kbmap->bind("Tab", LFUN_TAB);
- kbmap->bind("ISO_Left_Tab", LFUN_TAB); // jbl 2001-23-02
+ kbmap->bind("Tab", LFUN_CELL_FORWARD);
+ kbmap->bind("ISO_Left_Tab", LFUN_CELL_FORWARD); // jbl 2001-23-02
kbmap->bind("Home", LFUN_HOME);
kbmap->bind("End", LFUN_END);
kbmap->bind("KP_Prior", LFUN_PRIOR);
kbmap->bind("KP_Next", LFUN_NEXT);
- kbmap->bind("C-Tab", LFUN_TABINSERT); // ale970515
- kbmap->bind("S-Tab", LFUN_SHIFT_TAB); // jug20000522
- kbmap->bind("S-ISO_Left_Tab", LFUN_SHIFT_TAB); // jbl 2001-23-02
+ kbmap->bind("C-Tab", LFUN_CELL_SPLIT); // ale970515
+ kbmap->bind("S-Tab", LFUN_CELL_BACKWARD); // jug20000522
+ kbmap->bind("S-ISO_Left_Tab", LFUN_CELL_BACKWARD); // jbl 2001-23-02
}
enum Uitags {
ui_menuset = 1,
ui_toolbar,
+ ui_include,
ui_last
};
struct keyword_item uitags[ui_last - 1] = {
+ { "include", ui_include },
{ "menuset", ui_menuset },
{ "toolbar", ui_toolbar }
};
+ // Ensure that a file is read only once (prevents include loops)
+ static std::list<string> uifiles;
+ std::list<string>::const_iterator it = uifiles.begin();
+ std::list<string>::const_iterator end = uifiles.end();
+ it = std::find(it, end, name);
+ if (it != end) {
+ lyxerr[Debug::INIT] << "UI file '" << name
+ << "' has been read already. "
+ << "Is this an include loop?"
+ << endl;
+ return;
+ }
+
lyxerr[Debug::INIT] << "About to read " << name << "..." << endl;
string const ui_path = LibFileSearch("ui", name, "ui");
showFileError(name);
return;
}
+ uifiles.push_back(name);
lyxerr[Debug::INIT] << "Found " << name
<< " in " << ui_path << endl;
while (lex.isOK()) {
switch (lex.lex()) {
+ case ui_include: {
+ lex.next(true);
+ string const file = lex.getString();
+ readUIFile(file);
+ break;
+ }
case ui_menuset:
menubackend.read(lex);
break;