X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxfunc.C;h=f6e54aa3faf682d4d37af6ac964aedb5cdc7c024;hb=3c851f1f7951f3a24b57826f3e580e4318b5e6c4;hp=244a858dbca70488982b1fd23ae0c899a75d5db6;hpb=3bcf40e96d29e9a75db0f6d6fa933ea8f124f6e3;p=lyx.git diff --git a/src/lyxfunc.C b/src/lyxfunc.C index 244a858dbc..f6e54aa3fa 100644 --- a/src/lyxfunc.C +++ b/src/lyxfunc.C @@ -76,29 +76,33 @@ #include "frontends/LyXKeySym.h" #include "frontends/LyXView.h" #include "frontends/Menubar.h" -#include "frontends/Toolbar.h" +#include "frontends/Toolbars.h" -#include "support/FileInfo.h" +#include "support/environment.h" +#include "support/filefilterlist.h" #include "support/filetools.h" #include "support/forkedcontr.h" -#include "support/globbing.h" +#include "support/fs_extras.h" #include "support/lstrings.h" #include "support/path.h" -#include "support/path_defines.h" +#include "support/package.h" #include "support/systemcall.h" -#include "support/tostr.h" -#include "support/std_sstream.h" +#include "support/convert.h" #include "support/os.h" +#include + +#include + using bv_funcs::freefont2string; +using lyx::support::AbsolutePath; using lyx::support::AddName; using lyx::support::AddPath; using lyx::support::bformat; using lyx::support::ChangeExtension; using lyx::support::contains; using lyx::support::FileFilterList; -using lyx::support::FileInfo; using lyx::support::FileSearch; using lyx::support::ForkedcallsController; using lyx::support::i18nLibFileSearch; @@ -107,20 +111,16 @@ using lyx::support::IsFileReadable; using lyx::support::isStrInt; using lyx::support::MakeAbsPath; using lyx::support::MakeDisplayPath; +using lyx::support::package; using lyx::support::Path; using lyx::support::QuoteName; using lyx::support::rtrim; using lyx::support::split; -using lyx::support::strToInt; -using lyx::support::strToUnsignedInt; using lyx::support::subst; -using lyx::support::system_lyxdir; using lyx::support::Systemcall; using lyx::support::token; using lyx::support::trim; -using lyx::support::user_lyxdir; using lyx::support::prefixIs; -using lyx::support::os::getTmpDir; using std::endl; using std::make_pair; @@ -128,10 +128,12 @@ using std::pair; using std::string; using std::istringstream; +namespace biblio = lyx::biblio; +namespace fs = boost::filesystem; + extern BufferList bufferlist; extern LyXServer * lyxserver; -extern bool selection_possible; extern boost::scoped_ptr toplevel_keymap; @@ -139,6 +141,47 @@ extern boost::scoped_ptr toplevel_keymap; extern tex_accent_struct get_accent(kb_action action); +namespace { + +bool getStatus(LCursor cursor, + FuncRequest const & cmd, FuncStatus & status) +{ + // Try to fix cursor in case it is broken. + cursor.fixIfBroken(); + + // This is, of course, a mess. Better create a new doc iterator and use + // this in Inset::getStatus. This might require an additional + // BufferView * arg, though (which should be avoided) + //LCursor safe = *this; + bool res = false; + for ( ; cursor.depth(); cursor.pop()) { + //lyxerr << "\nLCursor::getStatus: cmd: " << cmd << endl << *this << endl; + DocIterator::idx_type & idx = cursor.idx(); + DocIterator::idx_type const lastidx = cursor.lastidx(); + BOOST_ASSERT(idx <= lastidx); + + DocIterator::pit_type & pit = cursor.pit(); + DocIterator::pit_type const lastpit = cursor.lastpit(); + BOOST_ASSERT(pit <= lastpit); + + DocIterator::pos_type & pos = cursor.pos(); + DocIterator::pos_type const lastpos = cursor.lastpos(); + BOOST_ASSERT(pos <= lastpos); + + // The inset's getStatus() will return 'true' if it made + // a definitive decision on whether it want to handle the + // request or not. The result of this decision is put into + // the 'status' parameter. + if (cursor.inset().getStatus(cursor, cmd, status)) { + res = true; + break; + } + } + return res; +} + +} + LyXFunc::LyXFunc(LyXView * lv) : owner(lv), encoded_last_key(0), @@ -193,7 +236,9 @@ void LyXFunc::processKeySym(LyXKeySymPtr keysym, key_modifier::state state) cancel_meta_seq.reset(); FuncRequest func = cancel_meta_seq.addkey(keysym, state); - lyxerr[Debug::KEY] << "action first set to [" << func.action << ']' << endl; + lyxerr[Debug::KEY] << BOOST_CURRENT_FUNCTION + << " action first set to [" << func.action << ']' + << endl; // When not cancel or meta-fake, do the normal lookup. // Note how the meta_fake Mod1 bit is OR-ed in and reset afterwards. @@ -201,20 +246,22 @@ void LyXFunc::processKeySym(LyXKeySymPtr keysym, key_modifier::state state) if ((func.action != LFUN_CANCEL) && (func.action != LFUN_META_FAKE)) { // remove Caps Lock and Mod2 as a modifiers func = keyseq.addkey(keysym, (state | meta_fake_bit)); - lyxerr[Debug::KEY] << "action now set to [" - << func.action << ']' << endl; + lyxerr[Debug::KEY] << BOOST_CURRENT_FUNCTION + << "action now set to [" + << func.action << ']' << endl; } // Dont remove this unless you know what you are doing. meta_fake_bit = key_modifier::none; - // can this happen now ? + // Can this happen now ? if (func.action == LFUN_NOACTION) { func = FuncRequest(LFUN_PREFIX); } if (lyxerr.debugging(Debug::KEY)) { - lyxerr << "Key [action=" + lyxerr << BOOST_CURRENT_FUNCTION + << " Key [action=" << func.action << "][" << keyseq.print() << ']' << endl; @@ -254,7 +301,7 @@ void LyXFunc::processKeySym(LyXKeySymPtr keysym, key_modifier::state state) if (func.action == LFUN_SELFINSERT) { if (encoded_last_key != 0) { - string arg(1, encoded_last_key); + string const arg(1, encoded_last_key); dispatch(FuncRequest(LFUN_SELFINSERT, arg)); lyxerr[Debug::KEY] << "SelfInsert arg[`" << arg << "']" << endl; @@ -269,11 +316,21 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const { //lyxerr << "LyXFunc::getStatus: cmd: " << cmd << endl; FuncStatus flag; - Buffer * buf = owner->buffer(); LCursor & cur = view()->cursor(); + /* In LyX/Mac, when a dialog is open, the menus of the + application can still be accessed without giving focus to + the main window. In this case, we want to disable the menu + entries that are buffer-related. + */ + Buffer * buf; + if (cmd.origin == FuncRequest::UI && !owner->hasFocus()) + buf = 0; + else + buf = owner->buffer(); + if (cmd.action == LFUN_NOACTION) { - setStatusMessage(N_("Nothing to do")); + flag.message(N_("Nothing to do")); flag.enabled(false); return flag; } @@ -291,17 +348,20 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const } if (flag.unknown()) { - setStatusMessage(N_("Unknown action")); + flag.message(N_("Unknown action")); return flag; } - // the default error message if we disable the command - setStatusMessage(N_("Command disabled")); + if (!flag.enabled()) { + if (flag.message().empty()) + flag.message(N_("Command disabled")); + return flag; + } // Check whether we need a buffer if (!lyxaction.funcHasFlag(cmd.action, LyXAction::NoBuffer) && !buf) { // no, exit directly - setStatusMessage(N_("Command not allowed with" + flag.message(N_("Command not allowed with" "out any document open")); flag.enabled(false); return flag; @@ -371,37 +431,36 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const enable = !buf->isUnnamed() && !buf->isClean(); break; - case LFUN_INSET_SETTINGS: { enable = false; - if (!cur.size()) + if (!cur) break; UpdatableInset * inset = cur.inset().asUpdatableInset(); lyxerr << "inset: " << inset << endl; if (!inset) break; - InsetOld::Code code = inset->lyxCode(); + InsetBase::Code code = inset->lyxCode(); switch (code) { - case InsetOld::TABULAR_CODE: + case InsetBase::TABULAR_CODE: enable = cmd.argument == "tabular"; break; - case InsetOld::ERT_CODE: + case InsetBase::ERT_CODE: enable = cmd.argument == "ert"; break; - case InsetOld::FLOAT_CODE: + case InsetBase::FLOAT_CODE: enable = cmd.argument == "float"; break; - case InsetOld::WRAP_CODE: + case InsetBase::WRAP_CODE: enable = cmd.argument == "wrap"; break; - case InsetOld::NOTE_CODE: + case InsetBase::NOTE_CODE: enable = cmd.argument == "note"; break; - case InsetOld::BRANCH_CODE: + case InsetBase::BRANCH_CODE: enable = cmd.argument == "branch"; break; - case InsetOld::BOX_CODE: + case InsetBase::BOX_CODE: enable = cmd.argument == "box"; break; default: @@ -421,8 +480,8 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const else if (name == "print") enable = Exporter::IsExportable(*buf, "dvi") && lyxrc.print_command != "none"; - else if (name == "character") - enable = cur.inset().lyxCode() != InsetOld::ERT_CODE; + else if (name == "character" || name == "mathpanel") + enable = cur.inset().lyxCode() != InsetBase::ERT_CODE; else if (name == "vclog") enable = buf->lyxvc().inUse(); else if (name == "latexlog") @@ -430,6 +489,10 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const break; } + case LFUN_DIALOG_SHOW_NEW_INSET: + enable = cur.inset().lyxCode() != InsetBase::ERT_CODE; + break; + case LFUN_DIALOG_UPDATE: { string const name = cmd.getArg(0); if (!buf) @@ -437,6 +500,16 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const break; } + // this one is difficult to get right. As a half-baked + // solution, we consider only the first action of the sequence + case LFUN_SEQUENCE: { + // argument contains ';'-terminated commands + string const firstcmd = token(cmd.argument, ';', 0); + FuncRequest func(lyxaction.lookupFunc(firstcmd)); + func.origin = cmd.origin; + flag = getStatus(func); + } + case LFUN_MENUNEW: case LFUN_MENUNEWTMPLT: case LFUN_WORDFINDFORWARD: @@ -463,8 +536,6 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const case LFUN_GETNAME: case LFUN_NOTIFY: case LFUN_GOTOFILEROW: - case LFUN_GOTO_PARAGRAPH: - case LFUN_DIALOG_SHOW_NEW_INSET: case LFUN_DIALOG_SHOW_NEXT_INSET: case LFUN_DIALOG_HIDE: case LFUN_DIALOG_DISCONNECT_INSET: @@ -477,7 +548,6 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const case LFUN_REPEAT: case LFUN_EXPORT_CUSTOM: case LFUN_PRINT: - case LFUN_SEQUENCE: case LFUN_SAVEPREFERENCES: case LFUN_SCREEN_FONT_UPDATE: case LFUN_SET_COLOR: @@ -491,13 +561,14 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const case LFUN_SAVE_AS_DEFAULT: case LFUN_BUFFERPARAMS_APPLY: case LFUN_LYXRC_APPLY: + case LFUN_NEXTBUFFER: + case LFUN_PREVIOUSBUFFER: // these are handled in our dispatch() break; default: - cur.getStatus(cmd, flag); - if (!flag.enabled()) + if (!::getStatus(cur, cmd, flag)) flag = view()->getStatus(cmd); } @@ -508,11 +579,14 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const if (buf && buf->isReadonly() && !lyxaction.funcHasFlag(cmd.action, LyXAction::ReadOnly) && !lyxaction.funcHasFlag(cmd.action, LyXAction::NoBuffer)) { - setStatusMessage(N_("Document is read-only")); + flag.message(N_("Document is read-only")); flag.enabled(false); } - //lyxerr << "LyXFunc::getStatus: got: " << flag.enabled() << endl; + // the default error message if we disable the command + if (!flag.enabled() && flag.message().empty()) + flag.message(N_("Command disabled")); + return flag; } @@ -571,11 +645,15 @@ void loadTextclass(string const & name) } } + +void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new); + } //namespace anon -void LyXFunc::dispatch(FuncRequest const & cmd, bool verbose) +void LyXFunc::dispatch(FuncRequest const & cmd) { + BOOST_ASSERT(view()); string const argument = cmd.argument; kb_action const action = cmd.action; @@ -585,18 +663,17 @@ void LyXFunc::dispatch(FuncRequest const & cmd, bool verbose) // we have not done anything wrong yet. errorstat = false; dispatch_buffer.erase(); - selection_possible = false; - bool update = true; + bool update = false; - // We cannot use this function here - if (!getStatus(cmd).enabled()) { + FuncStatus const flag = getStatus(cmd); + if (!flag.enabled()) { + // We cannot use this function here lyxerr[Debug::ACTION] << "LyXFunc::dispatch: " << lyxaction.getActionName(action) << " [" << action << "] is disabled at this location" << endl; - setErrorMessage(getStatusMessage()); - + setErrorMessage(flag.message()); } else { if (view()->available()) @@ -631,7 +708,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd, bool verbose) break; case LFUN_EXEC_COMMAND: - owner->getToolbar().display("minibuffer", true); + owner->getToolbars().display("minibuffer", true); owner->focus_command_buffer(); break; @@ -946,6 +1023,14 @@ void LyXFunc::dispatch(FuncRequest const & cmd, bool verbose) view()->setBuffer(bufferlist.getBuffer(argument)); break; + case LFUN_NEXTBUFFER: + view()->setBuffer(bufferlist.next(view()->buffer())); + break; + + case LFUN_PREVIOUSBUFFER: + view()->setBuffer(bufferlist.previous(view()->buffer())); + break; + case LFUN_FILE_NEW: NewFile(view(), argument); break; @@ -955,7 +1040,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd, bool verbose) break; case LFUN_DROP_LAYOUTS_CHOICE: - owner->getToolbar().openLayoutList(); + owner->getToolbars().openLayoutList(); break; case LFUN_MENU_OPEN_BY_NAME: @@ -980,7 +1065,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd, bool verbose) int row; istringstream is(argument); is >> file_name >> row; - if (prefixIs(file_name, getTmpDir())) { + if (prefixIs(file_name, package().temp_dir())) { // Needed by inverse dvi search. If it is a file // in tmpdir, call the apropriated function view()->setBuffer(bufferlist.getBufferFromTmp(file_name)); @@ -1004,32 +1089,6 @@ void LyXFunc::dispatch(FuncRequest const & cmd, bool verbose) break; } - case LFUN_GOTO_PARAGRAPH: { - istringstream is(argument); - int id; - is >> id; - ParIterator par = owner->buffer()->getParFromID(id); - if (par == owner->buffer()->par_iterator_end()) { - lyxerr[Debug::INFO] << "No matching paragraph found! [" - << id << ']' << endl; - break; - } else { - lyxerr[Debug::INFO] << "Paragraph " << par->id() - << " found." << endl; - } - - // Set the cursor - view()->setCursor(par, 0); - - view()->switchKeyMap(); - owner->view_state_changed(); - - view()->center(); - // see BufferView_pimpl::center() - view()->updateScrollbar(); - break; - } - case LFUN_DIALOG_SHOW: { string const name = cmd.getArg(0); string data = trim(cmd.argument.substr(name.size())); @@ -1191,17 +1250,21 @@ void LyXFunc::dispatch(FuncRequest const & cmd, bool verbose) break; } - case LFUN_SEQUENCE: + case LFUN_SEQUENCE: { // argument contains ';'-terminated commands - while (!argument.empty()) { + string arg = argument; + while (!arg.empty()) { string first; - string rest = split(argument, first, ';'); - dispatch(lyxaction.lookupFunc(rest)); + arg = split(arg, first, ';'); + FuncRequest func(lyxaction.lookupFunc(first)); + func.origin = cmd.origin; + dispatch(func); } break; + } case LFUN_SAVEPREFERENCES: { - Path p(user_lyxdir()); + Path p(package().user_support()); lyxrc.write("preferences", false); break; } @@ -1303,7 +1366,36 @@ void LyXFunc::dispatch(FuncRequest const & cmd, bool verbose) break; } + case LFUN_SAVE_AS_DEFAULT: { + string const fname = + AddName(AddPath(package().user_support(), "templates/"), + "defaults.lyx"); + Buffer defaults(fname); + + istringstream ss(argument); + LyXLex lex(0,0); + lex.setStream(ss); + int const unknown_tokens = defaults.readHeader(lex); + + if (unknown_tokens != 0) { + lyxerr << "Warning in LFUN_SAVE_AS_DEFAULT!\n" + << unknown_tokens << " unknown token" + << (unknown_tokens == 1 ? "" : "s") + << endl; + } + + if (defaults.writeFile(defaults.fileName())) + setMessage(_("Document defaults saved in ") + + MakeDisplayPath(fname)); + else + setErrorMessage(_("Unable to save document defaults")); + break; + } + case LFUN_BUFFERPARAMS_APPLY: { + biblio::CiteEngine const engine = + owner->buffer()->params().cite_engine; + istringstream ss(argument); LyXLex lex(0,0); lex.setStream(ss); @@ -1316,6 +1408,18 @@ void LyXFunc::dispatch(FuncRequest const & cmd, bool verbose) << (unknown_tokens == 1 ? "" : "s") << endl; } + if (engine == owner->buffer()->params().cite_engine) + break; + + LCursor & cur = view()->cursor(); + FuncRequest fr(LFUN_INSET_REFRESH); + + InsetBase & inset = owner->buffer()->inset(); + InsetIterator it = inset_iterator_begin(inset); + InsetIterator const end = inset_iterator_end(inset); + for (; it != end; ++it) + if (it->lyxCode() == InsetBase::CITE_CODE) + it->dispatch(cur, fr); break; } @@ -1354,6 +1458,8 @@ void LyXFunc::dispatch(FuncRequest const & cmd, bool verbose) break; case LFUN_LYXRC_APPLY: { + LyXRC const lyxrc_orig = lyxrc; + istringstream ss(argument); bool const success = lyxrc.read(ss) == 0; @@ -1361,25 +1467,30 @@ void LyXFunc::dispatch(FuncRequest const & cmd, bool verbose) lyxerr << "Warning in LFUN_LYXRC_APPLY!\n" << "Unable to read lyxrc data" << endl; + break; } + + actOnUpdatedPrefs(lyxrc_orig, lyxrc); break; } default: { - update = false; - DispatchResult res = view()->cursor().dispatch(cmd); - if (res.dispatched()) - update |= res.update(); - else + view()->cursor().dispatch(cmd); + update |= view()->cursor().result().update(); + if (!view()->cursor().result().dispatched()) { update |= view()->dispatch(cmd); + } break; } } if (view()->available()) { - if (view()->fitCursor() || update) - view()->update(); + // Redraw screen unless explicitly told otherwise. + // This also initializes the position cache for all insets + // in (at least partially) visible top-level paragraphs. + view()->update(true, update); + // if we executed a mutating lfun, mark the buffer as dirty if (getStatus(cmd).enabled() && !lyxaction.funcHasFlag(cmd.action, LyXAction::NoBuffer) @@ -1389,17 +1500,19 @@ void LyXFunc::dispatch(FuncRequest const & cmd, bool verbose) if (view()->cursor().inTexted()) { view()->owner()->updateLayoutChoice(); - sendDispatchMessage(getMessage(), cmd, verbose); } } + sendDispatchMessage(getMessage(), cmd); } -void LyXFunc::sendDispatchMessage(string const & msg, - FuncRequest const & cmd, bool verbose) +void LyXFunc::sendDispatchMessage(string const & msg, FuncRequest const & cmd) { owner->updateMenubar(); - owner->updateToolbar(); + owner->updateToolbars(); + + const bool verbose = (cmd.origin == FuncRequest::UI + || cmd.origin == FuncRequest::COMMANDBUFFER); if (cmd.action == LFUN_SELFINSERT || !verbose) { lyxerr[Debug::ACTION] << "dispatch msg is " << msg << endl; @@ -1423,7 +1536,7 @@ void LyXFunc::sendDispatchMessage(string const & msg, } } - string const shortcuts = toplevel_keymap->findbinding(cmd); + string const shortcuts = toplevel_keymap->printbindings(cmd); if (!shortcuts.empty()) { comname += ": " + shortcuts; @@ -1467,14 +1580,12 @@ void LyXFunc::menuNew(string const & name, bool fromTemplate) if (filename.empty()) { filename = AddName(lyxrc.document_path, - "newfile" + tostr(++newfile_number) + ".lyx"); - FileInfo fi(filename); - while (bufferlist.exists(filename) || fi.readable()) { + "newfile" + convert(++newfile_number) + ".lyx"); + while (bufferlist.exists(filename) || fs::is_readable(filename)) { ++newfile_number; filename = AddName(lyxrc.document_path, - "newfile" + tostr(newfile_number) + + "newfile" + convert(newfile_number) + ".lyx"); - fi.newFile(filename); } } @@ -1523,7 +1634,7 @@ void LyXFunc::open(string const & fname) make_pair(string(_("Documents|#o#O")), string(lyxrc.document_path)), make_pair(string(_("Examples|#E#e")), - string(AddPath(system_lyxdir(), "examples")))); + string(AddPath(package().system_support(), "examples")))); FileDialog::Result result = fileDlg.open(initpath, @@ -1553,8 +1664,7 @@ void LyXFunc::open(string const & fname) string const disp_fn(MakeDisplayPath(filename)); // if the file doesn't exist, let the user create one - FileInfo const f(filename, true); - if (!f.exist()) { + if (!fs::exists(filename)) { // the user specifically chose this name. Believe them. view()->newFile(filename, "", true); return; @@ -1599,7 +1709,7 @@ void LyXFunc::doImport(string const & argument) make_pair(string(_("Documents|#o#O")), string(lyxrc.document_path)), make_pair(string(_("Examples|#E#e")), - string(AddPath(system_lyxdir(), "examples")))); + string(AddPath(package().system_support(), "examples")))); string const filter = formats.prettyName(format) + " (*." + formats.extension(format) + ')'; @@ -1637,7 +1747,7 @@ void LyXFunc::doImport(string const & argument) // if the file exists already, and we didn't do // -i lyx thefile.lyx, warn - if (FileInfo(lyxfile, true).exist() && filename != lyxfile) { + if (fs::exists(lyxfile) && filename != lyxfile) { string const file = MakeDisplayPath(lyxfile, 30); string text = bformat(_("The document %1$s already exists.\n\n" @@ -1689,12 +1799,6 @@ void LyXFunc::setMessage(string const & m) const } -void LyXFunc::setStatusMessage(string const & m) const -{ - status_buffer = m; -} - - string const LyXFunc::viewStatusMessage() { // When meta-fake key is pressed, show the key sequence so far + "M-". @@ -1724,3 +1828,139 @@ bool LyXFunc::wasMetaKey() const { return (meta_fake_bit != key_modifier::none); } + + +namespace { + +void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new) +{ + // Why the switch you might ask. It is a trick to ensure that all + // the elements in the LyXRCTags enum is handled. As you can see + // there are no breaks at all. So it is just a huge fall-through. + // The nice thing is that we will get a warning from the compiler + // if we forget an element. + LyXRC::LyXRCTags tag = LyXRC::RC_LAST; + switch (tag) { + case LyXRC::RC_ACCEPT_COMPOUND: + case LyXRC::RC_ALT_LANG: + case LyXRC::RC_ASCIIROFF_COMMAND: + case LyXRC::RC_ASCII_LINELEN: + case LyXRC::RC_AUTOREGIONDELETE: + case LyXRC::RC_AUTORESET_OPTIONS: + case LyXRC::RC_AUTOSAVE: + case LyXRC::RC_AUTO_NUMBER: + case LyXRC::RC_BACKUPDIR_PATH: + case LyXRC::RC_BIBTEX_COMMAND: + case LyXRC::RC_BINDFILE: + case LyXRC::RC_CHECKLASTFILES: + case LyXRC::RC_CHKTEX_COMMAND: + case LyXRC::RC_CONVERTER: + case LyXRC::RC_COPIER: + case LyXRC::RC_CURSOR_FOLLOWS_SCROLLBAR: + case LyXRC::RC_CUSTOM_EXPORT_COMMAND: + case LyXRC::RC_CUSTOM_EXPORT_FORMAT: + case LyXRC::RC_CYGWIN_PATH_FIX: + if (lyxrc_orig.cygwin_path_fix != lyxrc_new.cygwin_path_fix) { + namespace os = lyx::support::os; + os::cygwin_path_fix(lyxrc_new.cygwin_path_fix); + } + case LyXRC::RC_DATE_INSERT_FORMAT: + case LyXRC::RC_DEFAULT_LANGUAGE: + case LyXRC::RC_DEFAULT_PAPERSIZE: + case LyXRC::RC_DIALOGS_ICONIFY_WITH_MAIN: + case LyXRC::RC_DISPLAY_GRAPHICS: + case LyXRC::RC_DOCUMENTPATH: + if (lyxrc_orig.document_path != lyxrc_new.document_path) { + if (fs::exists(lyxrc_new.document_path) && + fs::is_directory(lyxrc_new.document_path)) { + using lyx::support::package; + package().document_dir() = lyxrc.document_path; + } + } + case LyXRC::RC_ESC_CHARS: + case LyXRC::RC_FONT_ENCODING: + case LyXRC::RC_FORMAT: + case LyXRC::RC_INDEX_COMMAND: + case LyXRC::RC_INPUT: + case LyXRC::RC_KBMAP: + case LyXRC::RC_KBMAP_PRIMARY: + case LyXRC::RC_KBMAP_SECONDARY: + case LyXRC::RC_LABEL_INIT_LENGTH: + case LyXRC::RC_LANGUAGE_AUTO_BEGIN: + case LyXRC::RC_LANGUAGE_AUTO_END: + case LyXRC::RC_LANGUAGE_COMMAND_BEGIN: + case LyXRC::RC_LANGUAGE_COMMAND_END: + case LyXRC::RC_LANGUAGE_COMMAND_LOCAL: + case LyXRC::RC_LANGUAGE_GLOBAL_OPTIONS: + case LyXRC::RC_LANGUAGE_PACKAGE: + case LyXRC::RC_LANGUAGE_USE_BABEL: + case LyXRC::RC_LASTFILES: + case LyXRC::RC_MAKE_BACKUP: + case LyXRC::RC_MARK_FOREIGN_LANGUAGE: + case LyXRC::RC_NUMLASTFILES: + case LyXRC::RC_PATH_PREFIX: + if (lyxrc_orig.path_prefix != lyxrc_new.path_prefix) { + using lyx::support::prependEnvPath; + prependEnvPath("PATH", lyxrc.path_prefix); + } + case LyXRC::RC_PERS_DICT: + case LyXRC::RC_POPUP_BOLD_FONT: + case LyXRC::RC_POPUP_FONT_ENCODING: + case LyXRC::RC_POPUP_NORMAL_FONT: + case LyXRC::RC_PREVIEW: + case LyXRC::RC_PREVIEW_HASHED_LABELS: + case LyXRC::RC_PREVIEW_SCALE_FACTOR: + case LyXRC::RC_PRINTCOLLCOPIESFLAG: + case LyXRC::RC_PRINTCOPIESFLAG: + case LyXRC::RC_PRINTER: + case LyXRC::RC_PRINTEVENPAGEFLAG: + case LyXRC::RC_PRINTEXSTRAOPTIONS: + case LyXRC::RC_PRINTFILEEXTENSION: + case LyXRC::RC_PRINTLANDSCAPEFLAG: + case LyXRC::RC_PRINTODDPAGEFLAG: + case LyXRC::RC_PRINTPAGERANGEFLAG: + case LyXRC::RC_PRINTPAPERDIMENSIONFLAG: + case LyXRC::RC_PRINTPAPERFLAG: + case LyXRC::RC_PRINTREVERSEFLAG: + case LyXRC::RC_PRINTSPOOL_COMMAND: + case LyXRC::RC_PRINTSPOOL_PRINTERPREFIX: + case LyXRC::RC_PRINTTOFILE: + case LyXRC::RC_PRINTTOPRINTER: + case LyXRC::RC_PRINT_ADAPTOUTPUT: + case LyXRC::RC_PRINT_COMMAND: + case LyXRC::RC_RTL_SUPPORT: + case LyXRC::RC_SCREEN_DPI: + case LyXRC::RC_SCREEN_FONT_ENCODING: + case LyXRC::RC_SCREEN_FONT_ROMAN: + case LyXRC::RC_SCREEN_FONT_ROMAN_FOUNDRY: + case LyXRC::RC_SCREEN_FONT_SANS: + case LyXRC::RC_SCREEN_FONT_SANS_FOUNDRY: + case LyXRC::RC_SCREEN_FONT_SCALABLE: + case LyXRC::RC_SCREEN_FONT_SIZES: + case LyXRC::RC_SCREEN_FONT_TYPEWRITER: + case LyXRC::RC_SCREEN_FONT_TYPEWRITER_FOUNDRY: + case LyXRC::RC_SCREEN_ZOOM: + case LyXRC::RC_SERVERPIPE: + case LyXRC::RC_SET_COLOR: + case LyXRC::RC_SHOW_BANNER: + case LyXRC::RC_SPELL_COMMAND: + case LyXRC::RC_TEMPDIRPATH: + case LyXRC::RC_TEMPLATEPATH: + case LyXRC::RC_UIFILE: + case LyXRC::RC_USER_EMAIL: + case LyXRC::RC_USER_NAME: + case LyXRC::RC_USETEMPDIR: + case LyXRC::RC_USE_ALT_LANG: + case LyXRC::RC_USE_ESC_CHARS: + case LyXRC::RC_USE_INP_ENC: + case LyXRC::RC_USE_PERS_DICT: + case LyXRC::RC_USE_SPELL_LIB: + case LyXRC::RC_VIEWDVI_PAPEROPTION: + case LyXRC::RC_VIEWER: + case LyXRC::RC_WHEEL_JUMP: + case LyXRC::RC_LAST: + break; + } +} + +} // namespace anon