#include "support/convert.h"
#include "support/debug.h"
#include "support/environment.h"
+#include "support/FileName.h"
#include "support/filetools.h"
#include "support/gettext.h"
#include "support/lstrings.h"
#include "support/os.h"
+#include "support/Package.h"
#include "support/userinfo.h"
#include <fstream>
{ "\\dialogs_iconify_with_main", LyXRC::RC_DIALOGS_ICONIFY_WITH_MAIN },
{ "\\display_graphics", LyXRC::RC_DISPLAY_GRAPHICS },
{ "\\document_path", LyXRC::RC_DOCUMENTPATH },
+ { "\\editor_alternatives", LyXRC::RC_EDITOR_ALTERNATIVES },
{ "\\escape_chars", LyXRC::RC_ESC_CHARS },
{ "\\example_path", LyXRC::RC_EXAMPLEPATH },
{ "\\font_encoding", LyXRC::RC_FONT_ENCODING },
{ "\\fullscreen_width", LyXRC::RC_FULL_SCREEN_WIDTH },
{ "\\group_layouts", LyXRC::RC_GROUP_LAYOUTS },
{ "\\gui_language", LyXRC::RC_GUI_LANGUAGE },
+ { "\\hunspelldir_path", LyXRC::RC_HUNSPELLDIR_PATH },
{ "\\index_alternatives", LyXRC::RC_INDEX_ALTERNATIVES },
{ "\\index_command", LyXRC::RC_INDEX_COMMAND },
{ "\\input", LyXRC::RC_INPUT },
{ "\\nomencl_command", LyXRC::RC_NOMENCL_COMMAND },
{ "\\num_lastfiles", LyXRC::RC_NUMLASTFILES },
{ "\\open_buffers_in_tabs", LyXRC::RC_OPEN_BUFFERS_IN_TABS },
+ { "\\paragraph_markers", LyXRC::RC_PARAGRAPH_MARKERS },
{ "\\path_prefix", LyXRC::RC_PATH_PREFIX },
{ "\\personal_dictionary", LyXRC::RC_PERS_DICT },
{ "\\plaintext_linelen", LyXRC::RC_PLAINTEXT_LINELEN },
{ "\\serverpipe", LyXRC::RC_SERVERPIPE },
{ "\\set_color", LyXRC::RC_SET_COLOR },
{ "\\show_banner", LyXRC::RC_SHOW_BANNER },
+ { "\\single_close_tab_button", LyXRC::RC_SINGLE_CLOSE_TAB_BUTTON },
{ "\\sort_layouts", LyXRC::RC_SORT_LAYOUTS },
{ "\\spell_command", LyXRC::RC_SPELL_COMMAND },
{ "\\spellcheck_continuously", LyXRC::RC_SPELLCHECK_CONTINUOUSLY },
+ { "\\spellchecker", LyXRC::RC_SPELLCHECKER },
{ "\\splitindex_command", LyXRC::RC_SPLITINDEX_COMMAND },
{ "\\tempdir_path", LyXRC::RC_TEMPDIRPATH },
{ "\\template_path", LyXRC::RC_TEMPLATEPATH },
{ "\\view_dvi_paper_option", LyXRC::RC_VIEWDVI_PAPEROPTION },
// compatibility with versions older than 1.4.0 only
{ "\\viewer", LyXRC::RC_VIEWER},
+ { "\\viewer_alternatives", LyXRC::RC_VIEWER_ALTERNATIVES },
{ "\\visual_cursor" ,LyXRC::RC_VISUAL_CURSOR}
};
index_command = "makeindex -c -q";
nomencl_command = "makeindex -s nomencl.ist";
dpi = 75;
- // Because a screen typically is wider than a piece of paper:
+ // Because a screen is typically wider than a piece of paper:
zoom = 150;
allow_geometry_session = true;
// Default LaTeX font size:
backupdir_path.erase();
display_graphics = true;
// Spellchecker settings:
+ spellchecker = "aspell";
spellchecker_accept_compound = false;
- spellchecker_use_esc_chars = false;
spellcheck_continuously = false;
use_kbmap = false;
rtl_support = true;
date_insert_format = "%x";
cursor_follows_scrollbar = false;
scroll_below_document = false;
+ paragraph_markers = false;
mac_like_word_movement = false;
macro_edit_style = MACRO_EDIT_INLINE_BOX;
dialogs_iconify_with_main = false;
label_init_length = 3;
preview = PREVIEW_OFF;
preview_hashed_labels = false;
- preview_scale_factor = "0.9";
+ preview_scale_factor = 1.0;
use_converter_cache = true;
use_tooltip = true;
use_pixmap_cache = false;
user_name = to_utf8(support::user_name());
user_email = to_utf8(support::user_email());
open_buffers_in_tabs = true;
+ single_close_tab_button = false;
// Fullscreen settings
full_screen_limit = false;
case RC_KBMAP_PRIMARY:
if (lexrc.next()) {
string const kmap(os::internal_path(lexrc.getString()));
- if (kmap.empty()) {
- // nothing
- } else if (!libFileSearch("kbd", kmap,
- "kmap").empty()) {
+ if (!libFileSearch("kbd", kmap, "kmap").empty()
+ || kmap.empty()) {
primary_kbmap = kmap;
} else {
lexrc.printError("LyX: Keymap `$$Token' not found");
case RC_KBMAP_SECONDARY:
if (lexrc.next()) {
string const kmap(os::internal_path(lexrc.getString()));
- if (kmap.empty()) {
- // nothing
- } else if (!libFileSearch("kbd", kmap,
- "kmap").empty()) {
+ if (!libFileSearch("kbd", kmap, "kmap").empty()
+ || kmap.empty()) {
secondary_kbmap = kmap;
} else {
lexrc.printError("LyX: Keymap `$$Token' not found");
}
break;
+ case RC_HUNSPELLDIR_PATH:
+ if (lexrc.next()) {
+ hunspelldir_path = os::internal_path(lexrc.getString());
+ hunspelldir_path = expandPath(hunspelldir_path);
+ }
+ break;
+
case RC_USELASTFILEPOS:
lexrc >> use_lastfilepos;
break;
lexrc >> scroll_below_document;
break;
+ case RC_PARAGRAPH_MARKERS:
+ lexrc >> paragraph_markers;
+ break;
+
case RC_MAC_LIKE_WORD_MOVEMENT:
lexrc >> mac_like_word_movement;
break;
case RC_USE_PIXMAP_CACHE:
lexrc >> use_pixmap_cache;
break;
- case RC_USE_ESC_CHARS:
- lexrc >> spellchecker_use_esc_chars;
+ case RC_SPELLCHECKER:
+ lexrc >> spellchecker;
break;
case RC_ALT_LANG:
lexrc >> spellchecker_alt_lang;
}
break;
}
+ case RC_VIEWER_ALTERNATIVES: {
+ string format, command;
+ if (lexrc.next())
+ format = lexrc.getString();
+ if (lexrc.eatLine())
+ command = lexrc.getString();
+ viewer_alternatives[format].insert(command);
+ break;
+ }
+ case RC_EDITOR_ALTERNATIVES: {
+ string format, command;
+ lexrc >> format >> command;
+ editor_alternatives[format].insert(command);
+ break;
+ }
+
case RC_DEFAULT_VIEW_FORMAT:
lexrc >> default_view_format;
break;
case RC_OPEN_BUFFERS_IN_TABS:
lexrc >> open_buffers_in_tabs;
break;
+ case RC_SINGLE_CLOSE_TAB_BUTTON:
+ lexrc >> single_close_tab_button;
+ break;
// Obsoteted in 1.4.0
case RC_USETEMPDIR:
case RC_PERS_DICT:
case RC_PLAINTEXT_ROFF_COMMAND:
case RC_USE_ALT_LANG:
+ case RC_USE_ESC_CHARS:
case RC_USE_INP_ENC:
case RC_USE_PERS_DICT:
case RC_USE_SPELL_LIB:
if (tag != RC_LAST)
break;
case RC_BIBTEX_ALTERNATIVES: {
- set<string>::const_iterator it = bibtex_alternatives.begin();
- set<string>::const_iterator end = bibtex_alternatives.end();
+ CommandSet::const_iterator it = bibtex_alternatives.begin();
+ CommandSet::const_iterator end = bibtex_alternatives.end();
for ( ; it != end; ++it) {
if (ignore_system_lyxrc
|| !system_lyxrc.bibtex_alternatives.count(*it))
if (tag != RC_LAST)
break;
case RC_INDEX_ALTERNATIVES: {
- set<string>::const_iterator it = index_alternatives.begin();
- set<string>::const_iterator end = index_alternatives.end();
+ CommandSet::const_iterator it = index_alternatives.begin();
+ CommandSet::const_iterator end = index_alternatives.end();
for ( ; it != end; ++it) {
if (ignore_system_lyxrc
|| !system_lyxrc.index_alternatives.count(*it))
}
if (tag != RC_LAST)
break;
+ case RC_PARAGRAPH_MARKERS:
+ if (ignore_system_lyxrc ||
+ paragraph_markers
+ != system_lyxrc.paragraph_markers) {
+ os << "\\paragraph_markers "
+ << convert<string>(paragraph_markers) << '\n';
+ }
+ if (tag != RC_LAST)
+ break;
case RC_MAC_LIKE_WORD_MOVEMENT:
if (ignore_system_lyxrc ||
mac_like_word_movement
<< convert<string>(open_buffers_in_tabs)
<< '\n';
}
+ case RC_SINGLE_CLOSE_TAB_BUTTON:
+ if (ignore_system_lyxrc ||
+ single_close_tab_button != system_lyxrc.single_close_tab_button) {
+ os << "\\single_close_tab_button "
+ << convert<string>(single_close_tab_button)
+ << '\n';
+ }
if (tag != RC_LAST)
break;
}
if (tag != RC_LAST)
break;
+ case RC_HUNSPELLDIR_PATH:
+ if (ignore_system_lyxrc ||
+ hunspelldir_path != system_lyxrc.hunspelldir_path) {
+ string const path = os::external_path(hunspelldir_path);
+ os << "\\hunspelldir_path \"" << path << "\"\n";
+ }
+ if (tag != RC_LAST)
+ break;
case RC_USETEMPDIR:
if (tag != RC_LAST)
break;
if (tag != RC_LAST)
break;
case RC_USE_ESC_CHARS:
- if (ignore_system_lyxrc ||
- spellchecker_use_esc_chars != system_lyxrc.spellchecker_use_esc_chars) {
- os << "\\use_escape_chars " << convert<string>(spellchecker_use_esc_chars)
- << '\n';
- }
if (tag != RC_LAST)
break;
case RC_ESC_CHARS:
if (tag != RC_LAST)
break;
+ case RC_SPELLCHECKER:
+ if (ignore_system_lyxrc ||
+ spellchecker != system_lyxrc.spellchecker) {
+ os << "\\spellchecker " << spellchecker << '\n';
+ }
+ if (tag != RC_LAST)
+ break;
+
case RC_SPELLCHECK_CONTINUOUSLY:
if (ignore_system_lyxrc ||
spellcheck_continuously != system_lyxrc.spellcheck_continuously) {
<< "\" \"\" \"\" \"\" \"\" \"\" \"\"\n";
if (tag != RC_LAST)
break;
+ case RC_VIEWER_ALTERNATIVES: {
+ Alternatives::const_iterator it = viewer_alternatives.begin();
+ Alternatives::const_iterator const en = viewer_alternatives.end();
+ Alternatives::const_iterator const sysend =
+ system_lyxrc.viewer_alternatives.end();
+ for (; it != en; ++it) {
+ string const & fmt = it->first;
+ CommandSet const & cmd = it->second;
+ CommandSet::const_iterator sit = cmd.begin();
+ CommandSet::const_iterator const sen = cmd.end();
+ Alternatives::const_iterator const sysfmt = ignore_system_lyxrc ?
+ system_lyxrc.viewer_alternatives.begin() : // we won't use it in this case
+ system_lyxrc.viewer_alternatives.find(fmt);
+ for (; sit != sen; ++sit) {
+ string const & cmd = *sit;
+ if (ignore_system_lyxrc
+ || sysfmt == sysend // format not found
+ || sysfmt->second.count(cmd) == 0 // this command not found
+ )
+ os << "\\viewer_alternatives " << fmt << " " << cmd << "\n";
+ }
+ }
+ if (tag != RC_LAST)
+ break;
+ }
+ case RC_EDITOR_ALTERNATIVES: {
+ Alternatives::const_iterator it = editor_alternatives.begin();
+ Alternatives::const_iterator const en = editor_alternatives.end();
+ Alternatives::const_iterator const sysend =
+ system_lyxrc.editor_alternatives.end();
+ for (; it != en; ++it) {
+ string const & fmt = it->first;
+ CommandSet const & cmd = it->second;
+ CommandSet::const_iterator sit = cmd.begin();
+ CommandSet::const_iterator const sen = cmd.end();
+ Alternatives::const_iterator const sysfmt = ignore_system_lyxrc ?
+ system_lyxrc.editor_alternatives.begin() : // we won't use it in this case
+ system_lyxrc.editor_alternatives.find(fmt);
+ for (; sit != sen; ++sit) {
+ string const & cmd = *sit;
+ if (ignore_system_lyxrc
+ || sysfmt == sysend // format not found
+ || sysfmt->second.count(cmd) == 0 // this command not found
+ )
+ os << "\\editor_alternatives " << fmt << " " << cmd << "\n";
+ }
+ }
+ if (tag != RC_LAST)
+ break;
+ }
case RC_DEFAULT_VIEW_FORMAT:
if (ignore_system_lyxrc ||
default_view_format != system_lyxrc.default_view_format) {
}
+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_PLAINTEXT_LINELEN:
+ case LyXRC::RC_PLAINTEXT_ROFF_COMMAND:
+ case LyXRC::RC_AUTOCORRECTION_MATH:
+ 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_ALTERNATIVES:
+ case LyXRC::RC_BIBTEX_COMMAND:
+ case LyXRC::RC_BINDFILE:
+ case LyXRC::RC_CHECKLASTFILES:
+ case LyXRC::RC_COMPLETION_CURSOR_TEXT:
+ case LyXRC::RC_COMPLETION_INLINE_DELAY:
+ case LyXRC::RC_COMPLETION_INLINE_DOTS:
+ case LyXRC::RC_COMPLETION_INLINE_MATH:
+ case LyXRC::RC_COMPLETION_INLINE_TEXT:
+ case LyXRC::RC_COMPLETION_POPUP_AFTER_COMPLETE:
+ case LyXRC::RC_COMPLETION_POPUP_DELAY:
+ case LyXRC::RC_COMPLETION_POPUP_MATH:
+ case LyXRC::RC_COMPLETION_POPUP_TEXT:
+ case LyXRC::RC_USELASTFILEPOS:
+ case LyXRC::RC_LOADSESSION:
+ case LyXRC::RC_CHKTEX_COMMAND:
+ case LyXRC::RC_CONVERTER:
+ case LyXRC::RC_CONVERTER_CACHE_MAXAGE:
+ case LyXRC::RC_COPIER:
+ case LyXRC::RC_CURSOR_FOLLOWS_SCROLLBAR:
+ case LyXRC::RC_SCROLL_BELOW_DOCUMENT:
+ case LyXRC::RC_DATE_INSERT_FORMAT:
+ case LyXRC::RC_DEFAULT_LANGUAGE:
+ case LyXRC::RC_GUI_LANGUAGE:
+ case LyXRC::RC_DEFAULT_PAPERSIZE:
+ case LyXRC::RC_DEFAULT_VIEW_FORMAT:
+ case LyXRC::RC_DEFFILE:
+ 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) {
+ FileName path(lyxrc_new.document_path);
+ if (path.exists() && path.isDirectory())
+ package().document_dir() = FileName(lyxrc.document_path);
+ }
+ case LyXRC::RC_EDITOR_ALTERNATIVES:
+ case LyXRC::RC_ESC_CHARS:
+ case LyXRC::RC_EXAMPLEPATH:
+ case LyXRC::RC_FONT_ENCODING:
+ case LyXRC::RC_FORMAT:
+ case LyXRC::RC_GROUP_LAYOUTS:
+ case LyXRC::RC_HUNSPELLDIR_PATH:
+ case LyXRC::RC_INDEX_ALTERNATIVES:
+ case LyXRC::RC_INDEX_COMMAND:
+ case LyXRC::RC_JBIBTEX_COMMAND:
+ case LyXRC::RC_JINDEX_COMMAND:
+ case LyXRC::RC_NOMENCL_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_MAC_LIKE_WORD_MOVEMENT:
+ case LyXRC::RC_MACRO_EDIT_STYLE:
+ case LyXRC::RC_MAKE_BACKUP:
+ case LyXRC::RC_MARK_FOREIGN_LANGUAGE:
+ case LyXRC::RC_MOUSE_WHEEL_SPEED:
+ case LyXRC::RC_NUMLASTFILES:
+ case LyXRC::RC_PARAGRAPH_MARKERS:
+ case LyXRC::RC_PATH_PREFIX:
+ if (lyxrc_orig.path_prefix != lyxrc_new.path_prefix) {
+ prependEnvPath("PATH", lyxrc.path_prefix);
+ }
+ case LyXRC::RC_PERS_DICT:
+ 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_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_GEOMETRY_SESSION:
+ case LyXRC::RC_SCREEN_ZOOM:
+ case LyXRC::RC_SERVERPIPE:
+ case LyXRC::RC_SET_COLOR:
+ case LyXRC::RC_SHOW_BANNER:
+ case LyXRC::RC_OPEN_BUFFERS_IN_TABS:
+ case LyXRC::RC_SPELL_COMMAND:
+ case LyXRC::RC_SPELLCHECKER:
+ case LyXRC::RC_SPELLCHECK_CONTINUOUSLY:
+ case LyXRC::RC_SPLITINDEX_COMMAND:
+ case LyXRC::RC_TEMPDIRPATH:
+ case LyXRC::RC_TEMPLATEPATH:
+ case LyXRC::RC_TEX_ALLOWS_SPACES:
+ case LyXRC::RC_TEX_EXPECTS_WINDOWS_PATHS:
+ if (lyxrc_orig.windows_style_tex_paths != lyxrc_new.windows_style_tex_paths) {
+ os::windows_style_tex_paths(lyxrc_new.windows_style_tex_paths);
+ }
+ case LyXRC::RC_THESAURUSDIRPATH:
+ 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_CONVERTER_CACHE:
+ case LyXRC::RC_USE_ESC_CHARS:
+ case LyXRC::RC_USE_INP_ENC:
+ case LyXRC::RC_USE_PERS_DICT:
+ case LyXRC::RC_USE_TOOLTIP:
+ case LyXRC::RC_USE_PIXMAP_CACHE:
+ case LyXRC::RC_USE_SPELL_LIB:
+ case LyXRC::RC_VIEWDVI_PAPEROPTION:
+ case LyXRC::RC_SINGLE_CLOSE_TAB_BUTTON:
+ case LyXRC::RC_SORT_LAYOUTS:
+ case LyXRC::RC_FULL_SCREEN_LIMIT:
+ case LyXRC::RC_FULL_SCREEN_SCROLLBAR:
+ case LyXRC::RC_FULL_SCREEN_MENUBAR:
+ case LyXRC::RC_FULL_SCREEN_TABBAR:
+ case LyXRC::RC_FULL_SCREEN_TOOLBARS:
+ case LyXRC::RC_FULL_SCREEN_WIDTH:
+ case LyXRC::RC_VISUAL_CURSOR:
+ case LyXRC::RC_VIEWER:
+ case LyXRC::RC_VIEWER_ALTERNATIVES:
+ case LyXRC::RC_LAST:
+ break;
+ }
+}
+
+
#if 0
string const LyXRC::getDescription(LyXRCTags tag)
{