X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsession.C;h=fd2f26a7fc2a8044c49e28374b09a16ed1a6a3a3;hb=b9aa557b359463dfb0a2132b665570c8d1e5d605;hp=81ac3afcf5437df794d967ea11cf61391b375b96;hpb=70cf0c49abc6bfaeed540f4d07ded548f45a67ac;p=lyx.git diff --git a/src/session.C b/src/session.C index 81ac3afcf5..fd2f26a7fc 100644 --- a/src/session.C +++ b/src/session.C @@ -23,7 +23,9 @@ #include #include +using lyx::support::absolutePath; using lyx::support::addName; +using lyx::support::FileName; using lyx::support::package; namespace fs = boost::filesystem; @@ -71,14 +73,17 @@ void LastFilesSection::read(istream & is) if (c == '[') break; getline(is, tmp); - if (tmp == "" || tmp[0] == '#' || tmp[0] == ' ') + if (tmp == "" || tmp[0] == '#' || tmp[0] == ' ' || !absolutePath(tmp)) continue; // read lastfiles - if (fs::exists(tmp) && !fs::is_directory(tmp) && lastfiles.size() < num_lastfiles) - lastfiles.push_back(tmp); + FileName const file(tmp); + if (fs::exists(file.toFilesystemEncoding()) && + !fs::is_directory(file.toFilesystemEncoding()) && + lastfiles.size() < num_lastfiles) + lastfiles.push_back(file); else - lyxerr << "LyX: Warning: Ignore last file: " << tmp << endl; + lyxerr[Debug::INIT] << "LyX: Warning: Ignore last file: " << tmp << endl; } while (is.good()); } @@ -87,11 +92,11 @@ void LastFilesSection::write(ostream & os) const { os << '\n' << sec_lastfiles << '\n'; copy(lastfiles.begin(), lastfiles.end(), - ostream_iterator(os, "\n")); + ostream_iterator(os, "\n")); } -void LastFilesSection::add(string const & file) +void LastFilesSection::add(FileName const & file) { // If file already exist, delete it and reinsert at front. LastFiles::iterator it = find(lastfiles.begin(), lastfiles.end(), file); @@ -108,7 +113,7 @@ void LastFilesSection::setNumberOfLastFiles(unsigned int no) if (0 < no && no <= absolute_max_last_files) num_lastfiles = no; else { - lyxerr << "LyX: session: too many last files\n" + lyxerr[Debug::INIT] << "LyX: session: too many last files\n" << "\tdefault (=" << default_num_last_files << ") used." << endl; num_lastfiles = default_num_last_files; @@ -124,13 +129,15 @@ void LastOpenedSection::read(istream & is) if (c == '[') break; getline(is, tmp); - if (tmp == "" || tmp[0] == '#' || tmp[0] == ' ') + if (tmp == "" || tmp[0] == '#' || tmp[0] == ' ' || !absolutePath(tmp)) continue; - if (fs::exists(tmp) && !fs::is_directory(tmp)) - lastopened.push_back(tmp); + FileName const file(tmp); + if (fs::exists(file.toFilesystemEncoding()) && + !fs::is_directory(file.toFilesystemEncoding())) + lastopened.push_back(file); else - lyxerr << "LyX: Warning: Ignore last opened file: " << tmp << endl; + lyxerr[Debug::INIT] << "LyX: Warning: Ignore last opened file: " << tmp << endl; } while (is.good()); } @@ -139,11 +146,11 @@ void LastOpenedSection::write(ostream & os) const { os << '\n' << sec_lastopened << '\n'; copy(lastopened.begin(), lastopened.end(), - ostream_iterator(os, "\n")); + ostream_iterator(os, "\n")); } -void LastOpenedSection::add(string const & file) +void LastOpenedSection::add(FileName const & file) { lastopened.push_back(file); } @@ -177,13 +184,18 @@ void LastFilePosSection::read(istream & is) itmp.ignore(2); // ignore ", " itmp >> pos; itmp.ignore(2); // ignore ", " - itmp >> fname; - if (fs::exists(fname) && !fs::is_directory(fname) && lastfilepos.size() < num_lastfilepos) - lastfilepos[fname] = boost::tie(pit, pos); + getline(itmp, fname); + if (!absolutePath(fname)) + continue; + FileName const file(fname); + if (fs::exists(file.toFilesystemEncoding()) && + !fs::is_directory(file.toFilesystemEncoding()) && + lastfilepos.size() < num_lastfilepos) + lastfilepos[file] = boost::tie(pit, pos); else - lyxerr << "LyX: Warning: Ignore pos of last file: " << fname << endl; + lyxerr[Debug::INIT] << "LyX: Warning: Ignore pos of last file: " << fname << endl; } catch (...) { - lyxerr << "LyX: Warning: unknown pos of last file: " << tmp << endl; + lyxerr[Debug::INIT] << "LyX: Warning: unknown pos of last file: " << tmp << endl; } } while (is.good()); } @@ -201,13 +213,13 @@ void LastFilePosSection::write(ostream & os) const } -void LastFilePosSection::save(string const & fname, FilePos pos) +void LastFilePosSection::save(FileName const & fname, FilePos pos) { lastfilepos[fname] = pos; } -LastFilePosSection::FilePos LastFilePosSection::load(string const & fname) const +LastFilePosSection::FilePos LastFilePosSection::load(FileName const & fname) const { FilePosMap::const_iterator entry = lastfilepos.find(fname); // Has position information, return it. @@ -232,23 +244,28 @@ void BookmarksSection::read(istream & is) try { // read bookmarks - // id, pos, file\n - unsigned int id; + // pit, pos, file\n + pit_type pit; pos_type pos; string fname; istringstream itmp(tmp); - itmp >> id; + itmp >> pit; itmp.ignore(2); // ignore ", " itmp >> pos; itmp.ignore(2); // ignore ", " - itmp >> fname; + getline(itmp, fname); + if (!absolutePath(fname)) + continue; + FileName const file(fname); // only load valid bookmarks - if (fs::exists(fname) && !fs::is_directory(fname) && bookmarks.size() < max_bookmarks) - bookmarks.push_back(Bookmark(fname, id, pos)); - else - lyxerr << "LyX: Warning: Ignore bookmark of file: " << fname << endl; + if (fs::exists(file.toFilesystemEncoding()) && + !fs::is_directory(file.toFilesystemEncoding()) && + bookmarks.size() < max_bookmarks) + bookmarks.push_back(Bookmark(file, pit, 0, pos)); + else + lyxerr[Debug::INIT] << "LyX: Warning: Ignore bookmark of file: " << fname << endl; } catch (...) { - lyxerr << "LyX: Warning: unknown Bookmark info: " << tmp << endl; + lyxerr[Debug::INIT] << "LyX: Warning: unknown Bookmark info: " << tmp << endl; } } while (is.good()); } @@ -258,29 +275,31 @@ void BookmarksSection::write(ostream & os) const { os << '\n' << sec_bookmarks << '\n'; for (size_t i = 0; i < bookmarks.size(); ++i) { - os << bookmarks[i].par_id << ", " + os << bookmarks[i].par_pit << ", " << bookmarks[i].par_pos << ", " << bookmarks[i].filename << '\n'; } } -void BookmarksSection::save(std::string const & fname, int par_id, pos_type par_pos, bool persistent) +void BookmarksSection::save(FileName const & fname, pit_type par_pit, int par_id, pos_type par_pos, bool persistent) { if (persistent) { - bookmarks.push_front(Bookmark(fname, par_id, par_pos)); + bookmarks.push_back(Bookmark(fname, par_pit, par_id, par_pos)); if (bookmarks.size() > max_bookmarks) bookmarks.pop_back(); } else - temp_bookmark = Bookmark(fname, par_id, par_pos); + temp_bookmark = Bookmark(fname, par_pit, par_id, par_pos); } bool BookmarksSection::isValid(unsigned int i) const { - // i == 0, or in the queue - return i <= bookmarks.size(); + if (i == 0) + return !temp_bookmark.filename.empty(); + else + return i <= bookmarks.size() && !bookmarks[i-1].filename.empty(); } @@ -319,9 +338,9 @@ void ToolbarSection::read(istream & is) value >> location; toolbars[key] = ToolbarInfo(state, location); } else - lyxerr << "LyX: Warning: Ignore toolbar info: " << tmp << endl; + lyxerr[Debug::INIT] << "LyX: Warning: Ignore toolbar info: " << tmp << endl; } catch (...) { - lyxerr << "LyX: Warning: unknown Toolbar info: " << tmp << endl; + lyxerr[Debug::INIT] << "LyX: Warning: unknown Toolbar info: " << tmp << endl; } } while (is.good()); } @@ -366,9 +385,9 @@ void SessionInfoSection::read(istream & is) string value = tmp.substr(pos + 3); sessioninfo[key] = value; } else - lyxerr << "LyX: Warning: Ignore session info: " << tmp << endl; + lyxerr[Debug::INIT] << "LyX: Warning: Ignore session info: " << tmp << endl; } catch (...) { - lyxerr << "LyX: Warning: unknown Session info: " << tmp << endl; + lyxerr[Debug::INIT] << "LyX: Warning: unknown Session info: " << tmp << endl; } } while (is.good()); } @@ -407,7 +426,7 @@ Session::Session(unsigned int num) : { // locate the session file // note that the session file name 'session' is hard-coded - session_file = addName(package().user_support(), "session"); + session_file = FileName(addName(package().user_support(), "session")); // readFile(); } @@ -417,7 +436,7 @@ void Session::readFile() { // we will not complain if we can't find session_file nor will // we issue a warning. (Lgb) - ifstream is(session_file.c_str()); + ifstream is(session_file.toFilesystemEncoding().c_str()); string tmp; while (getline(is, tmp)) { @@ -439,14 +458,14 @@ void Session::readFile() else if (tmp == sec_session) sessionInfo().read(is); else - lyxerr << "LyX: Warning: unknown Session section: " << tmp << endl; + lyxerr[Debug::INIT] << "LyX: Warning: unknown Session section: " << tmp << endl; } } void Session::writeFile() const { - ofstream os(session_file.c_str()); + ofstream os(session_file.toFilesystemEncoding().c_str()); if (os) { os << "## Automatically generated lyx session file \n" << "## Editing this file manually may cause lyx to crash.\n"; @@ -458,7 +477,7 @@ void Session::writeFile() const toolbars().write(os); sessionInfo().write(os); } else - lyxerr << "LyX: Warning: unable to save Session: " + lyxerr[Debug::INIT] << "LyX: Warning: unable to save Session: " << session_file << endl; }