Attached is a more polished patch, with the additional ability to display all rc entries using names such as "lyxrc:bind_file".
This improves the documentation and visibility of lyx shortcuts, which are, to normal lyx users, more important than the customization of shortcuts. Jose? Bo
Index: development/scons/scons_manifest.py =================================================================== --- development/scons/scons_manifest.py (revision 20850) +++ development/scons/scons_manifest.py (working copy) @@ -1036,6 +1036,7 @@ InsetHFill.h InsetInclude.h InsetIndex.h + InsetInfo.h InsetLabel.h InsetLine.h InsetListings.h @@ -1091,6 +1092,7 @@ InsetHFill.cpp InsetInclude.cpp InsetIndex.cpp + InsetInfo.cpp InsetLabel.cpp InsetLine.cpp InsetListings.cpp @@ -2055,6 +2057,7 @@ Intro.lyx LaTeXConfig.lyx.in Reference.lyx + Shortcuts.lyx Tutorial.lyx UserGuide.lyx ''') Index: development/FORMAT =================================================================== --- development/FORMAT (revision 20850) +++ development/FORMAT (working copy) @@ -1,6 +1,9 @@ LyX file-format changes ----------------------- +2007-10-07 Bo Peng <[EMAIL PROTECTED]> + * Format incremented to 292: Add InsetInfo. + 2007-10-04 Uwe Stöhr Uwe Stöhr <[EMAIL PROTECTED]> * Format incremented to 291: Support for Vietnamese. Index: src/LyXAction.cpp =================================================================== --- src/LyXAction.cpp (revision 20850) +++ src/LyXAction.cpp (working copy) @@ -376,6 +376,7 @@ { LFUN_LAYOUT_MODULES_CLEAR, "layout-modules-clear", Noop }, { LFUN_LAYOUT_MODULE_ADD, "layout-module-add", Noop }, { LFUN_LAYOUT_RELOAD, "layout-reload", Noop }, + { LFUN_INFO_INSERT, "info-insert", Noop }, { LFUN_NOACTION, "", Noop } }; Index: src/insets/Inset.cpp =================================================================== --- src/insets/Inset.cpp (revision 20850) +++ src/insets/Inset.cpp (working copy) @@ -103,6 +103,7 @@ InsetName("vspace", Inset::VSPACE_CODE), InsetName("mathmacroarg", Inset::MATHMACROARG_CODE), InsetName("listings", Inset::LISTINGS_CODE), + InsetName("info", Inset::INFO_CODE), }; std::size_t const insetnames_size = Index: src/insets/Inset.h =================================================================== --- src/insets/Inset.h (revision 20850) +++ src/insets/Inset.h (working copy) @@ -367,7 +367,9 @@ /// PAGEBREAK_CODE, /// - LISTINGS_CODE + LISTINGS_CODE, + /// + INFO_CODE, }; /** returns the Code corresponding to the \c name. Index: src/insets/InsetInfo.cpp =================================================================== --- src/insets/InsetInfo.cpp (revision 0) +++ src/insets/InsetInfo.cpp (revision 0) @@ -0,0 +1,150 @@ +/** + * \file InsetInfo.cpp + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author Bo Peng + * + * Full author contact details are available in file CREDITS. + */ +#include <config.h> + +#include "InsetInfo.h" + +#include "gettext.h" +#include "Lexer.h" +#include "MetricsInfo.h" +#include "BufferView.h" + +// for shortcut:blah +#include "KeyMap.h" +#include "LyXAction.h" +#include "FuncRequest.h" +// for lyxrc:blah +#include "LyXRC.h" +#include <sstream> + +#include "support/lstrings.h" + +#include "debug.h" + +namespace lyx { + +using std::string; +using std::ostream; +using std::ostringstream; + +using support::prefixIs; +using support::trim; +using support::rtrim; + +InsetInfo::InsetInfo(string const & name) + : name_(name), + mouse_hover_(false) +{ + info_ = getInfo(); + button_.update(info_, false); +} + + +void InsetInfo::metrics(MetricsInfo & mi, Dimension & dim) const +{ + button_.metrics(mi, dim); +} + + +void InsetInfo::draw(PainterInfo & pi, int x, int y) const +{ + button_.draw(pi, x, y); + if (mouse_hover_) + pi.base.bv->message(from_utf8("Info: " + name_)); +} + + +void InsetInfo::read(Buffer const & buf, Lexer & lex) +{ + lex.next(); + setInfo(lex.getString()); + lex.next(); + if (lex.getString() != "\\end_inset") { + lex.printError("Missing \\end_inset at this point"); + } +} + + +void InsetInfo::write(Buffer const & buf, std::ostream & os) const +{ + os << "Info \"" << name_ << '"'; +} + + +int InsetInfo::plaintext(Buffer const & buf, odocstream & os, + OutputParams const &) const +{ + os << info_; + return info_.size(); +} + + +int InsetInfo::latex(Buffer const & buf, odocstream & os, + OutputParams const & runparams_in) const +{ + os << info_; + return info_.size(); +} + + +void InsetInfo::setInfo(string const & name) +{ + name_ = name; + info_ = getInfo(); + button_.update(info_, false); +} + +/* +This function interpret name_ and return its associated name. +Currently, the supported names are: + +shortcut:font-bold (the same as in the bind file) +lyxrc:rc_entries + +I am not sure if it is a good idea to add + +buffer:buffer_params + +The problem is that those are not 'stable' information. +*/ +docstring InsetInfo::getInfo() const +{ + if (prefixIs(name_, "shortcut:")) { + string cmd = name_.substr(9); + FuncRequest func = lyxaction.lookupFunc(cmd); + if (func.action == LFUN_UNKNOWN_ACTION) + return docstring(); + return theTopLevelKeymap().printbindings(func); + } else if (prefixIs(name_, "lyxrc:")) { + string rc = name_.substr(6); + if (rc.empty()) + return docstring(); + ostringstream oss; + lyxrc.write(oss, true, rc); + string result = oss.str(); + // remove leading \\name + result = result.substr(rc.size() + 2); + // remove \n and "" + result = rtrim(result, "\n"); + result = trim(result, "\""); + return from_utf8(result); + } else + return from_utf8("Unknown Info: " + name_); +} + + +bool InsetInfo::setMouseHover(bool mouse_hover) +{ + mouse_hover_ = mouse_hover; + return true; +} + + +} // namespace lyx Index: src/insets/InsetInfo.h =================================================================== --- src/insets/InsetInfo.h (revision 0) +++ src/insets/InsetInfo.h (revision 0) @@ -0,0 +1,72 @@ +// -*- C++ -*- +/** + * \file InsetInfo.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author Bo Peng + * + * Full author contact details are available in file CREDITS. + */ + +#ifndef INSET_INFO_H +#define INSET_INFO_H + +#include "Inset.h" +#include "RenderButton.h" +#include "gettext.h" +#include "Cursor.h" + +namespace lyx { + +class LaTeXFeatures; + +/** Used to insert index labels + */ +class InsetInfo : public Inset { +public: + /// + InsetInfo(std::string const & info = std::string()); + /// + void metrics(MetricsInfo & mi, Dimension & dim) const; + /// + Dimension const dimension(BufferView const &) const { return button_.dimension(); } + /// + void draw(PainterInfo & pi, int x, int y) const; + /// + void write(Buffer const & buf, std::ostream & os) const; + /// + void read(Buffer const &, Lexer & lex); + /// + Inset::Code lyxCode() const { return Inset::INFO_CODE; } + /// + int plaintext(Buffer const & buf, odocstream & os, + OutputParams const &) const; + /// + int latex(Buffer const & buf, odocstream & os, + OutputParams const & runparams_in) const; + /// + void setInfo(std::string const & info); + /// + bool setMouseHover(bool mouse_hover); + +private: + /// + docstring getInfo() const; + /// + virtual Inset * clone() const { return new InsetInfo(*this); } + /// + std::string name_; + /// + docstring info_; + /// + bool mouse_hover_; + /// + mutable RenderButton button_; +}; + + + +} // namespace lyx + +#endif Index: src/BufferView.cpp =================================================================== --- src/BufferView.cpp (revision 20850) +++ src/BufferView.cpp (working copy) @@ -783,6 +783,7 @@ break; case LFUN_FONT_STATE: case LFUN_LABEL_INSERT: + case LFUN_INFO_INSERT: case LFUN_PARAGRAPH_GOTO: // FIXME handle non-trivially case LFUN_OUTLINE_UP: Index: src/LyXRC.h =================================================================== --- src/LyXRC.h (revision 20850) +++ src/LyXRC.h (working copy) @@ -160,9 +160,10 @@ /// void write(support::FileName const & filename, bool ignore_system_lyxrc) const; - /// + /// write rc. If a specific tag is given, only output that one. void write(std::ostream & os, - bool ignore_system_lyxrc) const; + bool ignore_system_lyxrc, + std::string const & tag = std::string()) const; /// void print() const; // FIXME unused (was used for xforms. Do we still need this?) Index: src/KeyMap.cpp =================================================================== --- src/KeyMap.cpp (revision 20850) +++ src/KeyMap.cpp (working copy) @@ -278,9 +278,15 @@ { odocstringstream res; Bindings bindings = findbindings(func); - for (Bindings::const_iterator cit = bindings.begin(); - cit != bindings.end() ; ++cit) - res << '[' << cit->print(true) << ']'; + if (bindings.empty()) + return docstring(); + Bindings::const_iterator cit = bindings.begin(); + Bindings::const_iterator cit_end = bindings.end(); + // prin the first item + res << cit->print(true); + // more than one shortcuts? + for (++cit; cit != cit_end; ++cit) + res << ", " << cit->print(true); return res.str(); } Index: src/Makefile.am =================================================================== --- src/Makefile.am (revision 20850) +++ src/Makefile.am (working copy) @@ -523,6 +523,8 @@ insets/InsetInclude.h \ insets/InsetIndex.cpp \ insets/InsetIndex.h \ + insets/InsetInfo.cpp \ + insets/InsetInfo.h \ insets/InsetLabel.cpp \ insets/InsetLabel.h \ insets/InsetLine.cpp \ Index: src/factory.cpp =================================================================== --- src/factory.cpp (revision 20850) +++ src/factory.cpp (working copy) @@ -38,6 +38,7 @@ #include "insets/InsetHFill.h" #include "insets/InsetInclude.h" #include "insets/InsetIndex.h" +#include "insets/InsetInfo.h" #include "insets/InsetNomencl.h" #include "insets/InsetLabel.h" #include "insets/InsetLine.h" @@ -221,6 +222,8 @@ case LFUN_ENVIRONMENT_INSERT: return new InsetEnvironment(params, cmd.argument()); + case LFUN_INFO_INSERT: + return new InsetInfo(to_utf8(cmd.argument())); #if 0 case LFUN_LIST_INSERT: return new InsetList; @@ -497,6 +500,8 @@ inset.reset(new InsetIndex(buf.params())); } else if (tmptok == "FloatList") { inset.reset(new InsetFloatList); + } else if (tmptok == "Info") { + inset.reset(new InsetInfo()); } else { lyxerr << "unknown Inset type '" << tmptok << "'" << std::endl; Index: src/Text3.cpp =================================================================== --- src/Text3.cpp (revision 20850) +++ src/Text3.cpp (working copy) @@ -57,6 +57,7 @@ #include "insets/InsetQuotes.h" #include "insets/InsetSpecialChar.h" #include "insets/InsetText.h" +#include "insets/InsetInfo.h" #include "support/lstrings.h" #include "support/lyxlib.h" @@ -1095,7 +1096,21 @@ break; } - + case LFUN_INFO_INSERT: { + if (!cur.selection()) + break; + Inset * inset = createInset(&cur.bv(), cmd); + if (!inset) + break; + // use selected text as info to avoid a separate UI + docstring ds = cur.selectionAsString(false); + cutSelection(cur, true, false); + insertInset(cur, inset); + static_cast<InsetInfo *>(inset)->setInfo(to_utf8(ds)); + cur.posRight(); + updateLabels(bv->buffer()); + break; + } #if 0 case LFUN_LIST_INSERT: case LFUN_THEOREM_INSERT: @@ -1688,6 +1703,9 @@ case LFUN_LABEL_INSERT: code = Inset::LABEL_CODE; break; + case LFUN_INFO_INSERT: + code = Inset::INFO_CODE; + break; case LFUN_OPTIONAL_INSERT: code = Inset::OPTARG_CODE; enable = numberOfOptArgs(cur.paragraph()) Index: src/lfuns.h =================================================================== --- src/lfuns.h (revision 20850) +++ src/lfuns.h (working copy) @@ -402,8 +402,9 @@ LFUN_LAYOUT_MODULES_CLEAR, // rgh, 20070825 LFUN_LAYOUT_MODULE_ADD, // rgh, 20070825 LFUN_LAYOUT_RELOAD, // rgh, 20070903 - LFUN_MASTER_BUFFER_VIEW, // Tommaso, 20070920 - LFUN_MASTER_BUFFER_UPDATE, // Tommaso, 20070920 + LFUN_MASTER_BUFFER_VIEW, // Tommaso, 20070920 + LFUN_MASTER_BUFFER_UPDATE, // Tommaso, 20070920 + LFUN_INFO_INSERT, // bpeng, 20071007 LFUN_LASTACTION // end of the table }; Index: src/LyXRC.cpp =================================================================== --- src/LyXRC.cpp (revision 20850) +++ src/LyXRC.cpp (working copy) @@ -1210,27 +1210,37 @@ }; -void LyXRC::write(ostream & os, bool ignore_system_lyxrc) const +void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) const { - os << "### This file is part of\n" - << "### ========================================================\n" - << "### LyX, The Document Processor\n" - << "###\n" - << "### Copyright 1995 Matthias Ettrich\n" - << "### Copyright 1995-2001 The LyX Team.\n" - << "###\n" - << "### ========================================================\n" - << "\n" - << "# This file is written by LyX, if you want to make your own\n" - << "# modifications you should do them from inside LyX and save\n" - << "\n"; + LyXRCTags tag = RC_LAST; + + if (name.empty()) + tag = RC_LAST; + else { + for (size_t i = 0; i < lyxrcCount; ++i) + if ("\\" + name == lyxrcTags[i].tag) + tag = static_cast<LyXRCTags>(lyxrcTags[i].code); + } + if (tag == RC_LAST) + os << "### This file is part of\n" + << "### ========================================================\n" + << "### LyX, The Document Processor\n" + << "###\n" + << "### Copyright 1995 Matthias Ettrich\n" + << "### Copyright 1995-2001 The LyX Team.\n" + << "###\n" + << "### ========================================================\n" + << "\n" + << "# This file is written by LyX, if you want to make your own\n" + << "# modifications you should do them from inside LyX and save\n" + << "\n"; + // 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. - LyXRCTags tag = RC_LAST; switch (tag) { case RC_LAST: case RC_INPUT: @@ -1241,13 +1251,15 @@ string const path = os::external_path(bind_file); os << "\\bind_file \"" << path << "\"\n"; } + if (tag != RC_LAST) + break; + // // Misc Section // os << "\n#\n" << "# MISC SECTION ######################################\n" << "#\n\n"; - // bind files are not done here. case RC_PATH_PREFIX: @@ -1255,13 +1267,16 @@ path_prefix != system_lyxrc.path_prefix) { os << "\\path_prefix \"" << path_prefix << "\"\n"; } - + if (tag != RC_LAST) + break; case RC_UIFILE: if (ignore_system_lyxrc || ui_file != system_lyxrc.ui_file) { string const path = os::external_path(ui_file); os << "\\ui_file \"" << path << "\"\n"; } + if (tag != RC_LAST) + break; case RC_AUTOREGIONDELETE: if (ignore_system_lyxrc || auto_region_delete != system_lyxrc.auto_region_delete) { @@ -1270,6 +1285,8 @@ << "\\auto_region_delete " << convert<string>(auto_region_delete) << '\n'; } + if (tag != RC_LAST) + break; case RC_AUTORESET_OPTIONS: if (ignore_system_lyxrc || auto_reset_options != system_lyxrc.auto_reset_options) { @@ -1279,12 +1296,16 @@ << convert<string>(auto_reset_options) << '\n'; } + if (tag != RC_LAST) + break; case RC_AUTOSAVE: if (ignore_system_lyxrc || autosave != system_lyxrc.autosave) { os << "# The time interval between auto-saves in seconds.\n" << "\\autosave " << autosave << '\n'; } + if (tag != RC_LAST) + break; case RC_DISPLAY_GRAPHICS: if (ignore_system_lyxrc || display_graphics != system_lyxrc.display_graphics) { @@ -1294,6 +1315,8 @@ << graphics::displayTranslator().find(display_graphics) << '\n'; } + if (tag != RC_LAST) + break; case RC_VIEWDVI_PAPEROPTION: if (ignore_system_lyxrc || @@ -1304,6 +1327,8 @@ << "\\view_dvi_paper_option \"" << view_dvi_paper_option << "\"\n"; } + if (tag != RC_LAST) + break; case RC_DEFAULT_PAPERSIZE: if (ignore_system_lyxrc || default_papersize != system_lyxrc.default_papersize) { @@ -1332,79 +1357,109 @@ } os << "\"\n"; } + if (tag != RC_LAST) + break; case RC_CHKTEX_COMMAND: if (ignore_system_lyxrc || chktex_command != system_lyxrc.chktex_command) { os << "\\chktex_command \"" << chktex_command << "\"\n"; } + if (tag != RC_LAST) + break; case RC_BIBTEX_COMMAND: if (ignore_system_lyxrc || bibtex_command != system_lyxrc.bibtex_command) { os << "\\bibtex_command \"" << bibtex_command << "\"\n"; } + if (tag != RC_LAST) + break; case RC_INDEX_COMMAND: if (ignore_system_lyxrc || index_command != system_lyxrc.index_command) { os << "\\index_command \"" << index_command << "\"\n"; } + if (tag != RC_LAST) + break; case RC_TEX_EXPECTS_WINDOWS_PATHS: if (ignore_system_lyxrc || windows_style_tex_paths != system_lyxrc.windows_style_tex_paths) { os << "\\tex_expects_windows_paths " << convert<string>(windows_style_tex_paths) << '\n'; } + if (tag != RC_LAST) + break; case RC_TEX_ALLOWS_SPACES: if (tex_allows_spaces != system_lyxrc.tex_allows_spaces) { os << "\\tex_allows_spaces " << convert<string>(tex_allows_spaces) << '\n'; } + if (tag != RC_LAST) + break; case RC_KBMAP: if (ignore_system_lyxrc || use_kbmap != system_lyxrc.use_kbmap) { os << "\\kbmap " << convert<string>(use_kbmap) << '\n'; } + if (tag != RC_LAST) + break; case RC_KBMAP_PRIMARY: if (ignore_system_lyxrc || primary_kbmap != system_lyxrc.primary_kbmap) { string const path = os::external_path(primary_kbmap); os << "\\kbmap_primary \"" << path << "\"\n"; } + if (tag != RC_LAST) + break; case RC_KBMAP_SECONDARY: if (ignore_system_lyxrc || secondary_kbmap != system_lyxrc.secondary_kbmap) { string const path = os::external_path(secondary_kbmap); os << "\\kbmap_secondary \"" << path << "\"\n"; } + if (tag != RC_LAST) + break; case RC_SERVERPIPE: if (ignore_system_lyxrc || lyxpipes != system_lyxrc.lyxpipes) { string const path = os::external_path(lyxpipes); os << "\\serverpipe \"" << path << "\"\n"; } + if (tag != RC_LAST) + break; case RC_DATE_INSERT_FORMAT: if (ignore_system_lyxrc || date_insert_format != system_lyxrc.date_insert_format) { os << "\\date_insert_format \"" << date_insert_format << "\"\n"; } + if (tag != RC_LAST) + break; case RC_LABEL_INIT_LENGTH: if (ignore_system_lyxrc || label_init_length != system_lyxrc.label_init_length) { os << "\\label_init_length " << label_init_length << '\n'; } + if (tag != RC_LAST) + break; case RC_USER_NAME: os << "\\user_name \"" << user_name << "\"\n"; + if (tag != RC_LAST) + break; case RC_USER_EMAIL: os << "\\user_email \"" << user_email << "\"\n"; + if (tag != RC_LAST) + break; case RC_SHOW_BANNER: if (ignore_system_lyxrc || show_banner != system_lyxrc.show_banner) { os << "\\show_banner " << convert<string>(show_banner) << '\n'; } + if (tag != RC_LAST) + break; case RC_PREVIEW: if (ignore_system_lyxrc || @@ -1423,6 +1478,8 @@ } os << "\\preview " << status << '\n'; } + if (tag != RC_LAST) + break; case RC_PREVIEW_HASHED_LABELS: if (ignore_system_lyxrc || @@ -1431,6 +1488,8 @@ os << "\\preview_hashed_labels " << convert<string>(preview_hashed_labels) << '\n'; } + if (tag != RC_LAST) + break; case RC_PREVIEW_SCALE_FACTOR: if (ignore_system_lyxrc || @@ -1438,6 +1497,8 @@ os << "\\preview_scale_factor " << preview_scale_factor << '\n'; } + if (tag != RC_LAST) + break; case RC_USE_CONVERTER_CACHE: if (ignore_system_lyxrc || @@ -1445,6 +1506,8 @@ os << "\\use_converter_cache " << convert<string>(use_converter_cache) << '\n'; } + if (tag != RC_LAST) + break; case RC_CONVERTER_CACHE_MAXAGE: if (ignore_system_lyxrc || @@ -1452,6 +1515,8 @@ os << "\\converter_cache_maxage " << converter_cache_maxage << '\n'; } + if (tag != RC_LAST) + break; os << "\n#\n" << "# SCREEN & FONTS SECTION ############################\n" @@ -1462,29 +1527,39 @@ dpi != system_lyxrc.dpi) { os << "\\screen_dpi " << dpi << '\n'; } + if (tag != RC_LAST) + break; case RC_SCREEN_ZOOM: if (ignore_system_lyxrc || zoom != system_lyxrc.zoom) { os << "\\screen_zoom " << zoom << '\n'; } + if (tag != RC_LAST) + break; case RC_SCREEN_GEOMETRY_HEIGHT: if (ignore_system_lyxrc || geometry_height != system_lyxrc.geometry_height) { os << "\\screen_geometry_height " << geometry_height << '\n'; } + if (tag != RC_LAST) + break; case RC_SCREEN_GEOMETRY_WIDTH: if (ignore_system_lyxrc || geometry_width != system_lyxrc.geometry_width) { os << "\\screen_geometry_width " << geometry_width << '\n'; } + if (tag != RC_LAST) + break; case RC_SCREEN_GEOMETRY_XYSAVED: if (ignore_system_lyxrc || geometry_xysaved != system_lyxrc.geometry_xysaved) { os << "\\screen_geometry_xysaved " << convert<string>(geometry_xysaved) << '\n'; } + if (tag != RC_LAST) + break; case RC_CURSOR_FOLLOWS_SCROLLBAR: if (ignore_system_lyxrc || cursor_follows_scrollbar @@ -1492,6 +1567,8 @@ os << "\\cursor_follows_scrollbar " << convert<string>(cursor_follows_scrollbar) << '\n'; } + if (tag != RC_LAST) + break; case RC_DIALOGS_ICONIFY_WITH_MAIN: if (ignore_system_lyxrc || dialogs_iconify_with_main @@ -1499,42 +1576,56 @@ os << "\\dialogs_iconify_with_main " << convert<string>(dialogs_iconify_with_main) << '\n'; } + if (tag != RC_LAST) + break; case RC_SCREEN_FONT_ROMAN: if (ignore_system_lyxrc || roman_font_name != system_lyxrc.roman_font_name) { os << "\\screen_font_roman \"" << roman_font_name << "\"\n"; } + if (tag != RC_LAST) + break; case RC_SCREEN_FONT_ROMAN_FOUNDRY: if (ignore_system_lyxrc || roman_font_foundry != system_lyxrc.roman_font_foundry) { os << "\\screen_font_roman_foundry \"" << roman_font_foundry << "\"\n"; } + if (tag != RC_LAST) + break; case RC_SCREEN_FONT_SANS: if (ignore_system_lyxrc || sans_font_name != system_lyxrc.sans_font_name) { os << "\\screen_font_sans \"" << sans_font_name << "\"\n"; } + if (tag != RC_LAST) + break; case RC_SCREEN_FONT_SANS_FOUNDRY: if (ignore_system_lyxrc || sans_font_foundry != system_lyxrc.sans_font_foundry) { os << "\\screen_font_sans_foundry \"" << sans_font_foundry << "\"\n"; } + if (tag != RC_LAST) + break; case RC_SCREEN_FONT_TYPEWRITER: if (ignore_system_lyxrc || typewriter_font_name != system_lyxrc.typewriter_font_name) { os << "\\screen_font_typewriter \"" << typewriter_font_name << "\"\n"; } + if (tag != RC_LAST) + break; case RC_SCREEN_FONT_TYPEWRITER_FOUNDRY: if (ignore_system_lyxrc || typewriter_font_foundry != system_lyxrc.typewriter_font_foundry) { os << "\\screen_font_typewriter_foundry \"" << typewriter_font_foundry << "\"\n"; } + if (tag != RC_LAST) + break; case RC_SCREEN_FONT_SCALABLE: if (ignore_system_lyxrc || @@ -1543,6 +1634,8 @@ << convert<string>(use_scalable_fonts) << '\n'; } + if (tag != RC_LAST) + break; case RC_SCREEN_FONT_SIZES: if (ignore_system_lyxrc || font_sizes[Font::SIZE_TINY] @@ -1580,6 +1673,8 @@ << ' ' << font_sizes[Font::SIZE_HUGER] << '\n'; } + if (tag != RC_LAST) + break; os << "\n#\n" << "# COLOR SECTION ###################################\n" @@ -1597,6 +1692,8 @@ << col << "\"\n"; } } + if (tag != RC_LAST) + break; os << "\n#\n" << "# PRINTER SECTION ###################################\n" @@ -1607,6 +1704,8 @@ printer != system_lyxrc.printer) { os << "\\printer \"" << printer << "\"\n"; } + if (tag != RC_LAST) + break; case RC_PRINT_ADAPTOUTPUT: if (ignore_system_lyxrc || print_adapt_output != system_lyxrc.print_adapt_output) { @@ -1614,23 +1713,31 @@ << convert<string>(print_adapt_output) << '\n'; } + if (tag != RC_LAST) + break; case RC_PRINT_COMMAND: if (ignore_system_lyxrc || print_command != system_lyxrc.print_command) { os << "\\print_command \"" << print_command << "\"\n"; } + if (tag != RC_LAST) + break; case RC_PRINTEXSTRAOPTIONS: if (ignore_system_lyxrc || print_extra_options != system_lyxrc.print_extra_options) { os << "\\print_extra_options \"" << print_extra_options << "\"\n"; } + if (tag != RC_LAST) + break; case RC_PRINTSPOOL_COMMAND: if (ignore_system_lyxrc || print_spool_command != system_lyxrc.print_spool_command) { os << "\\print_spool_command \"" << print_spool_command << "\"\n"; } + if (tag != RC_LAST) + break; case RC_PRINTSPOOL_PRINTERPREFIX: if (ignore_system_lyxrc || print_spool_printerprefix @@ -1638,42 +1745,56 @@ os << "\\print_spool_printerprefix \"" << print_spool_printerprefix << "\"\n"; } + if (tag != RC_LAST) + break; case RC_PRINTEVENPAGEFLAG: if (ignore_system_lyxrc || print_evenpage_flag != system_lyxrc.print_evenpage_flag) { os << "\\print_evenpage_flag \"" << print_evenpage_flag << "\"\n"; } + if (tag != RC_LAST) + break; case RC_PRINTODDPAGEFLAG: if (ignore_system_lyxrc || print_oddpage_flag != system_lyxrc.print_oddpage_flag) { os << "\\print_oddpage_flag \"" << print_oddpage_flag << "\"\n"; } + if (tag != RC_LAST) + break; case RC_PRINTREVERSEFLAG: if (ignore_system_lyxrc || print_reverse_flag != system_lyxrc.print_reverse_flag) { os << "\\print_reverse_flag \"" << print_reverse_flag << "\"\n"; } + if (tag != RC_LAST) + break; case RC_PRINTLANDSCAPEFLAG: if (ignore_system_lyxrc || print_landscape_flag != system_lyxrc.print_landscape_flag) { os << "\\print_landscape_flag \"" << print_landscape_flag << "\"\n"; } + if (tag != RC_LAST) + break; case RC_PRINTPAGERANGEFLAG: if (ignore_system_lyxrc || print_pagerange_flag != system_lyxrc.print_pagerange_flag) { os << "\\print_pagerange_flag \"" << print_pagerange_flag << "\"\n"; } + if (tag != RC_LAST) + break; case RC_PRINTCOPIESFLAG: if (ignore_system_lyxrc || print_copies_flag != system_lyxrc.print_copies_flag) { os << "\\print_copies_flag \"" << print_copies_flag << "\"\n"; } + if (tag != RC_LAST) + break; case RC_PRINTCOLLCOPIESFLAG: if (ignore_system_lyxrc || print_collcopies_flag @@ -1682,12 +1803,16 @@ << print_collcopies_flag << "\"\n"; } + if (tag != RC_LAST) + break; case RC_PRINTPAPERFLAG: if (ignore_system_lyxrc || print_paper_flag != system_lyxrc.print_paper_flag) { os << "\\print_paper_flag \"" << print_paper_flag << "\"\n"; } + if (tag != RC_LAST) + break; case RC_PRINTPAPERDIMENSIONFLAG: if (ignore_system_lyxrc || print_paper_dimension_flag @@ -1695,18 +1820,24 @@ os << "\\print_paper_dimension_flag \"" << print_paper_dimension_flag << "\"\n"; } + if (tag != RC_LAST) + break; case RC_PRINTTOPRINTER: if (ignore_system_lyxrc || print_to_printer != system_lyxrc.print_to_printer) { os << "\\print_to_printer \"" << print_to_printer << "\"\n"; } + if (tag != RC_LAST) + break; case RC_PRINTTOFILE: if (ignore_system_lyxrc || print_to_file != system_lyxrc.print_to_file) { string const path = os::external_path(print_to_file); os << "\\print_to_file \"" << path << "\"\n"; } + if (tag != RC_LAST) + break; case RC_PRINTFILEEXTENSION: if (ignore_system_lyxrc || print_file_extension != system_lyxrc.print_file_extension) { @@ -1714,6 +1845,8 @@ << print_file_extension << "\"\n"; } + if (tag != RC_LAST) + break; os << "\n#\n" << "# EXPORT SECTION ####################################\n" @@ -1727,6 +1860,8 @@ << custom_export_command << "\"\n"; } + if (tag != RC_LAST) + break; case RC_CUSTOM_EXPORT_FORMAT: if (ignore_system_lyxrc || custom_export_format @@ -1734,6 +1869,8 @@ os << "\\custom_export_format \"" << custom_export_format << "\"\n"; } + if (tag != RC_LAST) + break; os << "\n#\n" << "# TEX SECTION #######################################\n" @@ -1744,6 +1881,8 @@ fontenc != system_lyxrc.fontenc) { os << "\\font_encoding \"" << fontenc << "\"\n"; } + if (tag != RC_LAST) + break; os << "\n#\n" << "# FILE SECTION ######################################\n" @@ -1755,59 +1894,81 @@ string const path = os::external_path(document_path); os << "\\document_path \"" << path << "\"\n"; } + if (tag != RC_LAST) + break; case RC_USELASTFILEPOS: if (ignore_system_lyxrc || use_lastfilepos != system_lyxrc.use_lastfilepos) { os << "\\use_lastfilepos " << convert<string>(use_lastfilepos) << '\n'; } + if (tag != RC_LAST) + break; case RC_LOADSESSION: if (ignore_system_lyxrc || load_session != system_lyxrc.load_session) { os << "\\load_session " << convert<string>(load_session) << "\n"; } + if (tag != RC_LAST) + break; case RC_NUMLASTFILES: if (ignore_system_lyxrc || num_lastfiles != system_lyxrc.num_lastfiles) { os << "\\num_lastfiles " << num_lastfiles << '\n'; } + if (tag != RC_LAST) + break; case RC_CHECKLASTFILES: if (ignore_system_lyxrc || check_lastfiles != system_lyxrc.check_lastfiles) { os << "\\check_lastfiles " << convert<string>(check_lastfiles) << '\n'; } + if (tag != RC_LAST) + break; case RC_TEMPLATEPATH: if (ignore_system_lyxrc || template_path != system_lyxrc.template_path) { string const path = os::external_path(template_path); os << "\\template_path \"" << path << "\"\n"; } + if (tag != RC_LAST) + break; case RC_TEMPDIRPATH: if (ignore_system_lyxrc || tempdir_path != system_lyxrc.tempdir_path) { string const path = os::external_path(tempdir_path); os << "\\tempdir_path \"" << path << "\"\n"; } + if (tag != RC_LAST) + break; case RC_USETEMPDIR: + if (tag != RC_LAST) + break; // Ignore it case RC_PLAINTEXT_LINELEN: if (ignore_system_lyxrc || plaintext_linelen != system_lyxrc.plaintext_linelen) { os << "\\plaintext_linelen " << plaintext_linelen << '\n'; } + if (tag != RC_LAST) + break; case RC_MAKE_BACKUP: if (ignore_system_lyxrc || make_backup != system_lyxrc.make_backup) { os << "\\make_backup " << convert<string>(make_backup) << '\n'; } + if (tag != RC_LAST) + break; case RC_BACKUPDIR_PATH: if (ignore_system_lyxrc || backupdir_path != system_lyxrc.backupdir_path) { string const path = os::external_path(backupdir_path); os << "\\backupdir_path \"" << path << "\"\n"; } + if (tag != RC_LAST) + break; os << "\n#\n" << "# PLAIN TEXT EXPORT SECTION ##############################\n" @@ -1819,6 +1980,8 @@ os << "\\plaintext_roff_command \"" << plaintext_roff_command << "\"\n"; } + if (tag != RC_LAST) + break; os << "\n#\n" << "# SPELLCHECKER SECTION ##############################\n" @@ -1828,40 +1991,54 @@ use_spell_lib != system_lyxrc.use_spell_lib) { os << "\\use_spell_lib " << convert<string>(use_spell_lib) << '\n'; } + if (tag != RC_LAST) + break; case RC_SPELL_COMMAND: if (ignore_system_lyxrc || isp_command != system_lyxrc.isp_command) { os << "\\spell_command \"" << isp_command << "\"\n"; } + if (tag != RC_LAST) + break; case RC_ACCEPT_COMPOUND: if (ignore_system_lyxrc || isp_accept_compound != system_lyxrc.isp_accept_compound) { os << "\\accept_compound " << convert<string>(isp_accept_compound) << '\n'; } + if (tag != RC_LAST) + break; case RC_USE_ALT_LANG: if (ignore_system_lyxrc || isp_use_alt_lang != system_lyxrc.isp_use_alt_lang) { os << "\\use_alt_language " << convert<string>(isp_use_alt_lang) << '\n'; } + if (tag != RC_LAST) + break; case RC_ALT_LANG: if (ignore_system_lyxrc || isp_alt_lang != system_lyxrc.isp_alt_lang) { os << "\\alternate_language \"" << isp_alt_lang << "\"\n"; } + if (tag != RC_LAST) + break; case RC_USE_ESC_CHARS: if (ignore_system_lyxrc || isp_use_esc_chars != system_lyxrc.isp_use_esc_chars) { os << "\\use_escape_chars " << convert<string>(isp_use_esc_chars) << '\n'; } + if (tag != RC_LAST) + break; case RC_ESC_CHARS: if (ignore_system_lyxrc || isp_esc_chars != system_lyxrc.isp_esc_chars) { os << "\\escape_chars \"" << isp_esc_chars << "\"\n"; } + if (tag != RC_LAST) + break; case RC_USE_PERS_DICT: if (ignore_system_lyxrc || isp_use_pers_dict != system_lyxrc.isp_use_pers_dict) { @@ -1869,11 +2046,15 @@ << convert<string>(isp_use_pers_dict) << '\n'; } + if (tag != RC_LAST) + break; case RC_PERS_DICT: if (isp_pers_dict != system_lyxrc.isp_pers_dict) { string const path = os::external_path(isp_pers_dict); os << "\\personal_dictionary \"" << path << "\"\n"; } + if (tag != RC_LAST) + break; case RC_USE_INP_ENC: if (ignore_system_lyxrc || isp_use_input_encoding @@ -1882,6 +2063,8 @@ << convert<string>(isp_use_input_encoding) << '\n'; } + if (tag != RC_LAST) + break; os << "\n#\n" << "# LANGUAGE SUPPORT SECTION ##########################\n" @@ -1892,12 +2075,16 @@ rtl_support != system_lyxrc.rtl_support) { os << "\\rtl " << convert<string>(rtl_support) << '\n'; } + if (tag != RC_LAST) + break; case RC_LANGUAGE_PACKAGE: if (ignore_system_lyxrc || language_package != system_lyxrc.language_package) { os << "\\language_package \"" << language_package << "\"\n"; } + if (tag != RC_LAST) + break; case RC_LANGUAGE_GLOBAL_OPTIONS: if (ignore_system_lyxrc || language_global_options @@ -1906,6 +2093,8 @@ << convert<string>(language_global_options) << "\"\n"; } + if (tag != RC_LAST) + break; case RC_LANGUAGE_USE_BABEL: if (ignore_system_lyxrc || language_use_babel != system_lyxrc.language_use_babel) { @@ -1913,6 +2102,8 @@ << convert<string>(language_use_babel) << "\"\n"; } + if (tag != RC_LAST) + break; case RC_LANGUAGE_COMMAND_BEGIN: if (ignore_system_lyxrc || language_command_begin @@ -1921,6 +2112,8 @@ << language_command_begin << "\"\n"; } + if (tag != RC_LAST) + break; case RC_LANGUAGE_COMMAND_END: if (ignore_system_lyxrc || language_command_end @@ -1928,6 +2121,8 @@ os << "\\language_command_end \"" << language_command_end << "\"\n"; } + if (tag != RC_LAST) + break; case RC_LANGUAGE_COMMAND_LOCAL: if (ignore_system_lyxrc || language_command_local @@ -1936,18 +2131,24 @@ << language_command_local << "\"\n"; } + if (tag != RC_LAST) + break; case RC_LANGUAGE_AUTO_BEGIN: if (ignore_system_lyxrc || language_auto_begin != system_lyxrc.language_auto_begin) { os << "\\language_auto_begin " << convert<string>(language_auto_begin) << '\n'; } + if (tag != RC_LAST) + break; case RC_LANGUAGE_AUTO_END: if (ignore_system_lyxrc || language_auto_end != system_lyxrc.language_auto_end) { os << "\\language_auto_end " << convert<string>(language_auto_end) << '\n'; } + if (tag != RC_LAST) + break; case RC_MARK_FOREIGN_LANGUAGE: if (ignore_system_lyxrc || mark_foreign_language @@ -1955,6 +2156,8 @@ os << "\\mark_foreign_language " << convert<string>(mark_foreign_language) << '\n'; } + if (tag != RC_LAST) + break; os << "\n#\n" << "# 2nd MISC SUPPORT SECTION ##########################\n" @@ -1965,11 +2168,15 @@ auto_number != system_lyxrc.auto_number) { os << "\\auto_number " << convert<string>(auto_number) << '\n'; } + if (tag != RC_LAST) + break; case RC_DEFAULT_LANGUAGE: if (ignore_system_lyxrc || default_language != system_lyxrc.default_language) { os << "\\default_language " << default_language << '\n'; } + if (tag != RC_LAST) + break; os << "\n#\n" << "# FORMATS SECTION ##########################\n" @@ -2011,8 +2218,12 @@ if (!formats.getFormat(cit->name())) os << "\\format \"" << cit->name() << "\" \"\" \"\" \"\" \"\" \"\" \"\"\n"; + if (tag != RC_LAST) + break; case RC_VIEWER: // Ignore it + if (tag != RC_LAST) + break; os << "\n#\n" << "# CONVERTERS SECTION ##########################\n" @@ -2040,11 +2251,14 @@ if (!theConverters().getConverter(cit->from, cit->to)) os << "\\converter \"" << cit->from << "\" \"" << cit->to << "\" \"\" \"\"\n"; + if (tag != RC_LAST) + break; case RC_COPIER: - os << "\n#\n" - << "# COPIERS SECTION ##########################\n" - << "#\n\n"; + if (tag == RC_LAST) + os << "\n#\n" + << "# COPIERS SECTION ##########################\n" + << "#\n\n"; // Look for new movers Movers::const_iterator const sysbegin = theSystemMovers().begin(); @@ -2064,6 +2278,8 @@ << " \"" << command << "\"\n"; } } + if (tag != RC_LAST) + break; // We don't actually delete SpecialisedMover(s) from the // map, just clear their 'command', so there's no need Index: lib/lyx2lyx/LyX.py =================================================================== --- lib/lyx2lyx/LyX.py (revision 20850) +++ lib/lyx2lyx/LyX.py (working copy) @@ -80,7 +80,7 @@ ("1_3", [221], minor_versions("1.3" , 7)), ("1_4", range(222,246), minor_versions("1.4" , 5)), ("1_5", range(246,277), minor_versions("1.5" , 1)), - ("1_6", range(277,292), minor_versions("1.6" , 0))] # Uwe Stöhr, Vietnamese + ("1_6", range(277,293), minor_versions("1.6" , 0))] # Uwe Stöhr, Vietnamese def formats_list(): Index: lib/lyx2lyx/lyx_1_6.py =================================================================== --- lib/lyx2lyx/lyx_1_6.py (revision 20850) +++ lib/lyx2lyx/lyx_1_6.py (working copy) @@ -420,6 +420,20 @@ j = j + 1 +def revert_inset_info(document): + 'Replace info inset with its content' + i = 0 + while 1: + i = find_token(document.body, '\\begin_inset Info', i) + if i == -1: + return + info = document.body[i][17:].strip().strip('"') + if not document.body[i + 1].startswith('\\end_inset'): + # should not happen + document.warning("Malformed LyX document: Could not find end of Info inset.") + document.body[i : (i + 2)] = info + + ## # Conversion hub # @@ -439,10 +453,12 @@ [288, [convert_inset_command]], [289, [convert_latexcommand_index]], [290, []], - [291, []] + [291, []], + [292, []] ] -revert = [[290, [revert_vietnamese]], +revert = [[291, [revert_inset_info]], + [290, [revert_vietnamese]], [289, [revert_wraptable]], [288, [revert_latexcommand_index]], [287, [revert_inset_command]], Index: lib/bind/cua.bind =================================================================== --- lib/bind/cua.bind (revision 20850) +++ lib/bind/cua.bind (working copy) @@ -89,6 +89,7 @@ \bind "M-S-Left" "depth-decrement" \bind "C-S-L" "ligature-break-insert" \bind "C-l" "ert-insert" # 'l' for LaTeX +\bind "C-S-I" "info-insert" #bind "F1" "help" # Not yet implemented! #bind "C-F1" "help-context" # Not yet implemented! Index: lib/ui/stdmenus.inc =================================================================== --- lib/ui/stdmenus.inc (revision 20850) +++ lib/ui/stdmenus.inc (working copy) @@ -488,6 +488,7 @@ Item "User's Guide|U" "help-open UserGuide" Item "Extended Features|E" "help-open Extended" Item "Embedded Objects|m" "help-open EmbeddedObjects" + Item "Shortcuts|s" "help-open Shortcuts" Item "Customization|C" "help-open Customization" Item "FAQ|F" "help-open FAQ" Item "Table of Contents|a" "help-open TOC"