//Config default.json is for copying parts to user.json,
//it's not read as actual config. Config user.json is read.
//
//Some options have suffix for OS:
//  Windows: empty
//  Linux:   "__linux"
//  macOS:   "__mac"
//  FreeBSD: "__freebsd"
//  OpenBSD: "__openbsd"
//  NetBSD: "__netbsd"
//  DragonFlyBSD: "__dragonfly"
//  Solaris: "__solaris"
//  Haiku: "__haiku"
{
  //[Font]
  //Text font name [has suffix]
  "font_name": "Consolas",
  "font_name__linux": "Courier New",
  "font_name__mac": "Monaco",

  //Text font name, for "italic" fragments [has suffix]
  //Empty string is allowed
  "font_name_i": "",
  "font_name_i__linux": "",
  "font_name_i__mac": "",

  //Text font name, for "bold" fragments [has suffix]
  //Empty string is allowed
  "font_name_b": "",
  "font_name_b__linux": "",
  "font_name_b__mac": "",

  //Text font name, for "bold+italic" fragments [has suffix]
  //Empty string is allowed
  "font_name_bi": "",
  "font_name_bi__linux": "",
  "font_name_bi__mac": "",

  //Text font size [has suffix]
  "font_size": 10,
  "font_size__linux": 10,
  "font_size__mac": 10,

  //Text font size, for "italic" fragments [has suffix]
  "font_size_i": 10,
  "font_size_i__linux": 10,
  "font_size_i__mac": 10,

  //Text font size, for "bold" fragments [has suffix]
  "font_size_b": 10,
  "font_size_b__linux": 10,
  "font_size_b__mac": 10,

  //Text font size, for "bold+italic" fragments [has suffix]
  "font_size_bi": 10,
  "font_size_bi__linux": 10,
  "font_size_bi__mac": 10,

  //Enable to render font ligatures (e.g. with font "Fira Code")
  //Option has effect only on Windows. On Unix: on, or depends on OS.
  "font_ligatures": true,

  //Text rendering needs "offsets for characters" [has suffix]
  //Set "true" if you see that syntax elements are rendered too wide/narrow.
  //On Windows and macOS, "true" doesn't decrease rendering speed, it seems.
  //On Linux GTK2, "true" decreases rendering speed.
  "renderer_offsets": true,
  "renderer_offsets__linux": false,
  "renderer_offsets__mac": true,

  //Text font rendering quality [has suffix]
  //  0: Default
  //  1: Draft
  //  2: Proof
  //  3: Non Antialiased
  //  4: Antialiased
  //  5: Cleartype
  //  6: Cleartype Natural
  "font_quality": 0,
  "font_quality__linux": 0,
  "font_quality__mac": 0,

  //UI elements font name [has suffix]
  "ui_font_name": "default",
  "ui_font_name__linux": "default",
  "ui_font_name__mac": "default",

  //UI elements font size [has suffix]
  "ui_font_size": 9,
  "ui_font_size__linux": 9,
  "ui_font_size__mac": 9,

  //Output panel font name [has suffix]
  "ui_font_output_name" : "default",
  "ui_font_output_name__linux" : "default",
  "ui_font_output_name__mac" : "default",

  //Output panel font size [has suffix]
  "ui_font_output_size" : 9,
  "ui_font_output_size__linux" : 9,
  "ui_font_output_size__mac" : 9,

  //Statusbar font name [has suffix]
  //If empty, value of "ui_font_name" is used
  "ui_font_statusbar_name" : "",
  "ui_font_statusbar_name__linux" : "",
  "ui_font_statusbar_name__mac" : "",

  //Statusbar font size [has suffix]
  //If 0, value of "ui_font_size" is used
  "ui_font_statusbar_size" : 0,
  "ui_font_statusbar_size__linux" : 0,
  "ui_font_statusbar_size__mac" : 0,

  //Allows to use width of Unicode characters proportional to font.
  //Note: this option is global, not per-lexer.
  "unicode_proportional": true,

  //If "unicode_proportional":false, sets width (in percents) of full-width characters.
  //Note: this option is global, not per-lexer.
  "unicode_full_width": 190,

  //[Ui]
  //Double-buffering of UI controls [has suffix]
  //  Use only if problems with rendering.
  //  If app shows flickering, change to true.
  //  If high-DPI monitor (e.g. Retina) shows blurred text, change to false.
  "ui_buffered": true,
  "ui_buffered__linux": true,
  "ui_buffered__mac": false,

  //Allow to run only one instance of CudaText
  "ui_one_instance": false,

  //On clicking hyperlinks, show additional confirmation button, over clicked position
  "ui_links_confirm": true,

  //[File/Notifications]
  //Enable notifications about file change in external programs
  //(changing to "true" requires app restart)
  "ui_notif": true,

  //Notifications about file change in external programs:
  //waiting time in seconds
  "ui_notif_time": 2,

  //Notifications about file change in external programs:
  //when to show confirmation to reload the changed file
  //  0: show always (on each change in external program)
  //  1: show if editor is modified or Undo-data is not empty
  //  2: show if editor is modified
  "ui_notif_confirm": 1,

  //[File/NonText]
  //Non-text files: behaviour on opening such files
  //  0: show confirmation with choices
  //  1: automatically open in editor
  //  2: don't open
  //  3: automatically open in viewer, in binary mode
  //  4: automatically open in viewer, in hex mode
  "ui_non_text": 0,

  //Non-text files: detection buffer size, Kb
  "ui_non_text_buffer": 64,

  //[File]
  //Reloading of file: if caret was on the last line, after reload put caret on new last line
  "ui_reload_tail": true,

  //Manual reopening/reloading of file: confirm to reload, if tab has unsaved changes
  "ui_reload_unsaved_confirm": true,

  //Command "File / Save" works always, even with unmodified state of document.
  //Otherwise, it works only for modified (dirty) documents, of if the file was deleted outside.
  "ui_save_always": true,

  //[Lexers]
  //Group lexers menu by first char of name
  "ui_lexers_grouped": true,

  //[Text]
  //Highlight background of lines with carets
  "show_cur_line": false,

  //Highlight background of lines with carets: only minimal part of line, if line wrapped
  "show_cur_line_minimal": true,

  //Highlight background of lines with carets: only for focused editor
  "show_cur_line_only_focused": false,

  //Show additional vertical lines at all caret(s) position(s)
  "show_cur_column": false,

  //Show additional dotted frame on mouse selection of block
  "show_mouse_sel_frame": true,

  //Use smooth, per-pixel, scrolling. Otherwise, scrolling is per-line.
  "smooth_scroll": true,

  //Allow last line to scroll to the top of window
  "show_last_line_on_top": true,

  //Highlight selection background till the right window edge (otherwise: till line end)
  "show_full_sel_bg": false,

  //Highlight syntax-defined blocks background till the right window edge (otherwise: till line end)
  "show_full_syntax_bg": true,

  //On dragging vertical scrollbar, show line number tooltip in the top-right corner
  "show_hint_on_vert_scroll": false,

  //Style of editor's horizontal scrollbar
  //  0: Always hide
  //  1: Always show
  //  2: Show automatically
  "scroll_style_horz": 2,

  //Shift text area to the right, so part of text will look "centered".
  //  If value=0: no shifting.
  //  If value>0, text area is shifted, so N first characters in lines look "centered".
  "centering_width": 0,

  //Same as "centering_width", but it's applied only in Distraction-Free mode
  "centering_for_distraction_free": 100,

  //Zebra mode, ie additional coloring of N-th lines (N=2 by default)
  //  If value=0, zebra mode is not active.
  //  If value=1 to 255, it defines alpha-blending value of new color, best is 220..245.
  "zebra": 0,

  //Zebra mode: step, in lines
  "zebra_step": 2,

  //[Lexers]
  //Enable caret-depending highlightings.
  //- e.g. Pascal highlightes "begin"/"end" with green when caret is inside block
  //- HTML/XML highlightes opening/closing tags when caret is inside tag
  "lexer_dynamic_hilite": false,

  //Max number of lines in editor, for which dynamic highlighting works.
  //Reason for option: dynamic highlighting disables highlighting cache, so slows down scrolling
  "lexer_dynamic_hilite_max_lines": 2000,

  //If text size is bigger than this option, lexer analysis becomes delayed,
  //ie only after last text change + pause (during this pause you'll see non-colored text)
  "lexer_delayed_parsing_size": 100000,

  //Delayed lexer analysis: pause in msec
  "lexer_delayed_parsing_pause": 400,

  //On app start, postpone lexer parsing, until file tab becomes visible (ie don't parse hidden tabs).
  //This makes much faster app start, if session loads lot of files.
  "lexer_postpone_until_shown": true,

  //When number of lines in document is bigger than the option value, lexer parser
  //will not find folding ranges, which makes parsing 1.5-3 times faster.
  //Also Python tree-helper will not run.
  //Note: this option is global, not per-lexer.
  "lexer_folding_max_lines": 10000,

  //[Text]
  //Style of folded blocks
  //  0: if fold-hint empty: [...] from fold position, otherwise hint
  //  1: if fold-hint empty: [line...] from fold position, otherwise hint
  //  2: if fold-hint empty: [...] after line, otherwise hint
  //  3: always [...] after line
  //  4: horizontal line below the text line
  "fold_style": 1,

  //Show tooltip when mouse hovers over [...] folded blocks
  "fold_tooltip_show": false,

  //[Text/Commands]
  //If no selection, "Copy to clipboard" will take entire line with caret
  "copy_line_if_no_sel": true,

  //If no selection, "Cut to clipboard" will take entire line with caret
  "cut_line_if_no_sel": false,

  //If vertical (column) selection is placed, copy it to clipboard aligned by spaces,
  //i.e. lines are padded by spaces to have equal length
  "copy_column_aligned_by_spaces": true,

  //[Text]
  //If text typed, delete selection first
  "ovr_sel": true,

  //If text pasted from clipboard, and "overwrite" mode on (Ins key),
  //then pasted text overwrites editor text
  "ovr_on_paste": false,

  //[File/Save]
  //On saving file: delete spaces at lines ends
  "saving_trim_spaces": false,

  //On saving file: delete redundant empty lines at file end
  "saving_trim_final_empty": false,

  //On saving file: force end-of-line chars at file end (if not entered)
  "saving_force_final_eol": false,

  //[Text]
  //String of non-word characters, which define word boundaries.
  //To specify underscore "_" here, place it as first char.
  //Option should be used in lexer-specific config.
  "nonword_chars": "-+*=/\\()[]{}<>\"'.,:;~?!@#$%^&|`…",

  //Additional vertical spacing per each line, in pixels [has suffix]
  //Can be negative too
  "spacing_y": 1,
  "spacing_y__linux": 1,
  "spacing_y__mac": 1,

  //Tab-char width
  "tab_size": 4,

  //Tab key inserts spaces, instead of tab-char
  "tab_spaces": false,

  //Maximal X position, before which tab-characters visually expand to N spaces
  //(after this X position, tab-chars expand to 1 space)
  "tab_max_pos_expanded": 500,

  //Maximal line length, for which char-width calculations are slow+correct.
  //This has effect for lines with CJK or another "wide" characters.
  "max_line_len_for_accurate_width": 500,

  //Maximal line length, which will be parsed (and syntax highlighted) by lexers
  "max_line_len_parsed": 4000,

  //[View/Gutter]
  //Gutter: If false, all gutter columns hide (bookmarks, folding, numbers, line states)
  "gutter_show": true,

  //Gutter: Show gutter's folding column
  "gutter_fold": true,

  //Gutter: If false, folding lines auto-hide on mouse-leave
  "gutter_fold_always": true,

  //Gutter: Style of folding icons
  //  0: plus/minus
  //  1: triangles
  "gutter_fold_icons": 0,

  //Gutter: Show gutter's bookmarks column
  "gutter_bookmarks": true,

  //Bookmarks: Automatically delete bookmarks when their lines are deleted,
  //otherwise only shift bookmarks upper
  "auto_delete_bookmarks": false,

  //[View/LineNumbers]
  //Show gutter's "Line numbers" column
  "numbers_show": true,

  //For which lines to show numbers
  //  0: show for all lines
  //  1: don't show
  //  2: show for each 10th line
  //  3: show for each 5th line
  //  4: show relative numbers: exact number for first caret, and deltas for other lines
  "numbers_style": 0,

  //Always show numbers for line(s) with caret(s)
  "numbers_for_carets": false,

  //Center line numbers on gutter column
  "numbers_center": true,

  //[Text]
  //Marker size (Wiki "Markers" topic), in percents of line height
  "marker_size": 30,

  //Style of block staples (aka indentation guides)
  //  0: don't show
  //  1: normal lines
  //  2: dash/dotted lines
  //  3: 2-pixel lines
  //  4: dotted lines
  "staples_style": 1,

  //Properties of block staples. String value contains ","-separated options:
  //- Shift of staple to the right (-5..5, 0: staple is near the left edge of text cell).
  //- Width (in percents) of staple's angled side (0..200).
  //- Kind of top staple edge. Enum. 0: none; 1: angled; 2: simple line
  //- Kind of bottom staple edge.
  "staples_props": "-1,40,1,1",

  //[View/Ruler]
  //Ruler: Show ruler (horizontal bar at the top)
  "ruler_show": false,

  //Ruler: Numeration style
  //  0: numbers 0 - 10 - 20 - 30...
  //  1: numbers 1 - 11 - 21 - 31...
  //  2: numbers 1 - 10 - 20 - 30...
  "ruler_numeration": 0,

  //Ruler: Size of caret's mark (pixels), 0: hide this mark
  "ruler_mark_caret": 1,

  //[View/Minimap]
  //Minimap: Show
  "minimap_show": false,

  //Minimap: Show selection area always. If false: show only on mouse-over.
  "minimap_sel_always": false,

  //Minimap: Show 1-pixel border around selection area
  "minimap_sel_border": true,

  //Minimap: Width
  //  value=0: auto-size
  //  value>0: fixed width in chars
  "minimap_char_width": 0,

  //Minimap: Place minimap to the left side
  "minimap_at_left": false,

  //Minimap: Custom scale in percents, if value>100
  "minimap_scale": 0,

  //Minimap: Show "tooltip panel", when mouse cursor moves over minimap
  "minimap_tooltip_show": false,

  //Minimap: Number of lines in "tooltip panel"
  "minimap_tooltip_line_count": 6,

  //Minimap: Width of "tooltip panel" in percents of editor width
  "minimap_tooltip_width": 60,

  //[View/Micromap]
  //Micromap (small vertical bar at the right side, showing "line states"): show
  "micromap_show": false,

  //[Text]
  //Position of vertical line, "margin".
  //It is always painted, set some big value (e.g. 2000) to hide it.
  "margin": 2000,

  //Additional vertical lines.
  //List of column positions, space-separated, e.g. "60 80 100".
  "margin_string": "",

  //[View/Unprinted]
  //Unprinted symbols: Global enabling flag for other unprinted_ options.
  "unprinted_show": false,

  //Unprinted symbols: What info to show for unprinted symbols. Option is string.
  //  if "s" in value: Show whitespace
  //  if "x" in value: Whitespace only in selection (overrides "l" and "t")
  //  if "l" in value: Whitespace only at begin/end of lines (overrides "t")
  //  if "t" in value: Whitespace only at end of lines
  //  if "e" in value: Show end-of-lines marks
  //  if "d" in value: Detailed end-of-lines: "LF", "CRLF", "CR" (overrides ".")
  //  if "." in value: Instead of arrows at end-of-lines, show thick dots
  "unprinted_content": "se",

  //Unprinted symbols: Replace control ASCII characters (codes 0..31) with replacement-char.
  //Otherwuse, show them as "xNN" hex codes.
  "unprinted_replace_spec": false,

  //Unprinted symbols: ASCII characters 0...31 will be rendered
  //as a "replacement character" with specified hex code
  //(e.g. value "A4" means character U+00A4)
  "unprinted_replace_to_code": "A4",

  //Unprinted symbols: Length of arrow rendered for tab-char.
  //Value=1 means minimal length, 0 means full size.
  "unprinted_tab_len": 1,

  //Unprinted symbols: Scale of different symbols, in % of character height
  //Value is string with comma-separated numbers:
  //- Scale of space-char "dots"
  //- Scale of end-of-line "dots"
  //- Scale of end-of-line text marks "LF", "CRLF", "CR"
  //- Scale of tab-char arrow pointer
  "unprinted_symbols_scale": "15,30,80,22,",

  //[Text/Wrap]
  //Long lines wrap mode:
  //  0: no wrap (fastest)
  //  1: wrap at window edge (exact value changes on window resize)
  //  2: wrap at "fixed margin"
  //  3: wrap at minimum of "window edge" and "fixed margin"
  "wrap_mode": 0,

  //For lines beginning with whitespace, show wrapped parts indented, like line itself
  "wrap_indented": true,

  //Enable word wrap (by window edge, by margin) only if lines count < option value.
  //Reason for option: disabled word wrap (together with None lexer) makes loading
  //of huge files faster 1.5 times.
  "wrap_enabled_max_lines": 60000,

  //[Text/Undo]
  //Undo: Max count of simple commands which can be undone
  "undo_limit": 5000,

  //Undo: Allows to revert commands by groups (groups are separated e.g. by mouse clicks)
  "undo_grouped": true,

  //Undo: Undo is enabled even after file saving
  "undo_after_save": true,

  //Undo: For which files Undo is saved to disk (files in .cudatext folder).
  //Value can be "": disabled, "*": enabled for all files,
  //or ","-separated file extensions like "c,h,txt".
  "undo_persistent": "",

  //[Text/Caret]
  //Allow to place caret after end-of-line (virtual caret position),
  //and allow caret to go to previous line when Left is pressed at line start
  "caret_after_end": false,

  //Caret blink time (msec)
  "caret_blink_time": 600,

  //Caret blinking enabled
  "caret_blink_en": true,

  //Enable multi-carets, see "Help--Mouse usage"
  "caret_multi": true,

  //Caret shape is 2-3 values (3rd is optional), comma-separated: width,height,options
  //- width: if > 0, in pixels; in < 0, in %
  //- height: if > 0, in pixels; in < 0, in %; can be taller than 100%
  //- options: can be "_" to make caret empty inside
  //
  //Caret: shape for normal state
  "caret_view": "2,-100",

  //...
  //Caret: shape for overwrite state (Ins key: insert/overwrite)
  "caret_view_ovr": "-100,-100",

  //...
  //Caret: shape for read-only mode
  "caret_view_ro": "-100,2",

  //Caret: positions after pasting column-block
  //  0: no change
  //  1: left-bottom
  //  2: right-bottom
  //  3: right-top
  //  4: carets column on left
  //  5: carets column on right
  "caret_after_paste_column": 5,

  //Keep caret on visible screen area, on commands "Scroll line up/down"
  "caret_keep_visible_on_scroll": true,

  //Mode of column selection, value makes difference for wrapped lines
  //and lines with full-width (e.g. CJK) chars. If "true", it behaves much like
  //Sublime Text. Value "false" is also useful, it mimics some Windows editors.
  "carets_primitive_column_sel": true,

  //[Find]
  //Find dialog: show window, not docked to app bottom (applied after restart)
  "find_separate_form": false,

  //Find dialog: suggest selection (of first caret) as initial search text
  "find_suggest_sel": true,

  //Find dialog: suggest current word (at first caret) as initial search text
  "find_suggest_cur_word": false,

  //Find dialog: check the option "Search in selection", if editor has single caret
  //with multi-line selection
  "find_suggest_in_selection": false,

  //Commands "Find current selection next / previous": case-sensitive state
  //  0: case-sensitive off
  //  1: case-sensitive on
  //  2: use the option from Find dialog
  "find_sel_case": 2,

  //Find dialog: which buttons to hide.
  //  if "R" in value: "Regular expressions" option button
  //  if "S" in value: "Case sensitive" option button
  //  if "W" in value: "Whole words" option button
  //  if "O" in value: "Wrapped search" option button
  //  if "I" in value: "Search in selection" option button
  //  if "M" in value: "Multi-line inputs" option button
  //  if "X" in value: "Allowed syntax elements" option button
  //  if "H" in value: "Highlight all matches" option button
  //  if "C" in value: "Confirm on replace" option button
  //  if "f" in value: "Find first" button
  //  if "n" in value: "Find next" button
  //  if "p" in value: "Find prev" button
  //  if "a" in value: "Replace all" button
  //  if "g" in value: "Replace global" button
  "find_hidden_buttons": "",

  //Find dialog: multi-line mode: how height of inputs is increased
  "find_multiline_scale": 2.5,

  //When doing "Go to" or "Find", and new position is out of current screen,
  //scroll vertically by N lines from new position.
  //  for big values N, where abs(N)>=100, make centering vertically
  //  for N<0: abs(N) is indent of new position from top
  //  for N>=0: N is indent from top (go to up) or bottom (go to down)
  "find_indent_vert": -5,

  //When doing "Go to" or "Find", and new position is out of current screen,
  //scroll horizontally by N chars from new position. Value must be >=0.
  "find_indent_horz": 10,

  //Find dialog option "Highlight all matches": maximal count of document lines,
  //for which "Highlight all matches" still works
  "find_hi_max_lines": 1000,

  //Find dialog option "Highlight all matches": also move caret to the first found match
  "find_hi_move_caret": true,

  //[Ui]
  //UI scale factor in %, 70 to 500. [has suffix]
  //If value=0, then OS scaling is detected and used (currently only on Windows).
  "ui_scale": 0,
  "ui_scale__linux": 0,
  "ui_scale__mac": 0,

  //All fonts scale factor in %, 70 to 500. [has suffix]
  //If value=0, it follows the option "ui_scale".
  //Note: don't set 0 for Windows, it causes too big fonts with High-DPI.
  "ui_scale_font": 100,
  "ui_scale_font__linux": 100,
  "ui_scale_font__mac": 100,

  //[Ui/Tabs]
  //UI tabs: global visible flag for ui-tabs
  "ui_tab_show": true,

  //UI tabs: use tab switcher dialog on Ctrl+Tab, Ctrl+Shift+Tab;
  //otherwise switch tab ignoring recently used order
  "ui_tab_switcher_dialog": true,

  //UI tabs: Don't create tabs (except the first one), ie use Single Document Interface
  "ui_tab_disabled": false,

  //UI tabs: Use variable tabs width
  "ui_tab_variable_width": false,

  //UI tabs: Multi-line mode, ie tabs are wrappable to several lines, when lot of tabs
  "ui_tab_multiline": false,

  //UI tabs: Show angled left/right sides (note: they paint much slower)
  "ui_tab_angled": true,

  //UI tabs: Flat look
  "ui_tab_flat": false,

  //UI tabs: Layout of buttons near tabs, at left/right sides
  //String of few chars, each char is button. Separator for sides is comma.
  //Allowed chars (buttons):
  //  "<", ">" - scroll arrows
  //  "v" - arrow of dropdown menu
  //  "+" - plus button, the same as plus pseudo-tab, but doesn't hide if lot of tabs
  //  "x" - close button, the same as x icon on active tab
  "ui_tab_button_layout": "<>,v",

  //UI tabs: Default tab width
  "ui_tab_size_x": 170,

  //UI tabs: Minimal tab width (used when lot of tabs appear)
  "ui_tab_size_x_min": 40,

  //UI tabs: Maximal tab width
  "ui_tab_size_x_max": 300,

  //UI tabs: Default tab height
  "ui_tab_size_y": 26,

  //UI tabs: Position (side) of tabs
  //  0: top
  //  1: bottom
  //  2: left
  //  3: right
  "ui_tab_position": 0,

  //UI tabs: indent between tab edge and text beginning
  "ui_tab_padding": 6,

  //UI tabs: When to show "x" buttons on tabs
  //  0: don't show
  //  1: show for all tabs
  //  2: show only for active tab
  //  3: show only for mouse-over tab
  //  4: show for active + mouse-over tabs
  "ui_tab_show_x": 1,

  //UI tabs: Size of "x" buttons
  "ui_tab_show_x_size": 14,

  //UI tabs: Show "x" marks in circles (otherwise in squares)
  "ui_tab_x_rounded": true,

  //UI tabs: Show "+" pseudo-tab (its click creates new tab)
  "ui_tab_show_plus": true,

  //UI tabs: Feature "Set tab color" colorizes the entire tab height
  "ui_tab_fullcolor": false,

  //UI tabs: Additional scaling of tab title font
  "ui_tab_font_scale": 100,

  //UI tabs: Double-click closes tab
  "ui_tab_2click_closes": false,

  //UI tabs: Show indexes on tabs
  "ui_tab_numbers": false,

  //UI tabs: Open new tab near the currently active tab
  "ui_tab_new_near_current": false,

  //UI tabs: On closing a tab, app activates recently active tab in the same group (true),
  //  or righter tab (false)
  "ui_tab_recent_on_close": false,

  //UI tabs: Font styles of preview-tab (opened by single click on Project Manager file item)
  //  If "b" in value: bold
  //  If "i" in value: italic
  //  If "u" in value: underline
  //  If "s" in value: strikeout
  "ui_tab_preview_font_style": "iu",

  //[Ui/Listbox]
  //Listboxes: Commands/API listbox width
  "ui_listbox_size_x": 450,

  //Listboxes: Commands/API listbox height
  "ui_listbox_size_y": 300,

  //Listboxes: Auto-completion listbox width
  "ui_listbox_complete_size_x": 550,

  //Listboxes: Auto-completion listbox height
  "ui_listbox_complete_size_y": 200,

  //Listboxes: Enable fuzzy search in menu dialogs (see Wiki)
  "ui_listbox_fuzzy": true,

  //[Ui/History]
  //History: Max items in comboboxes history (0..200)
  "ui_max_history_edits": 20,

  //History: Max items in "recent files" menu (0..50)
  "ui_max_history_menu": 10,

  //History: Max items in "settings/history files.json" (0..400)
  "ui_max_history_files": 25,

  //History: Which elements to save to history/session files.
  //Option affects only saving the history, and is ignored on reading it.
  //Value is string, each char _disables_ storing of one element.
  //  if 't' in value: Text of document (it's saved for modified documents)
  //  if 'c' in value: Caret's position and selection (first caret only)
  //  if 'h' in value: Caret's selection only
  //  if 'T' in value: Tabulation width and "tab-char as spaces" state
  //  if 's' in value: Vertical scroll position
  //  if 'e' in value: Encoding
  //  if 'b' in value: Bookmarks
  //  if 'l' in value: Lexer name
  //  if 'w' in value: Word-wrap state
  //  if 'M' in value: Minimap visible state
  //  if 'm' in value: Micromap visible state
  //  if 'r' in value: Ruler visible state
  //  if 'u' in value: Unprinted symbols visible state
  //  if 'n' in value: Line numbers visible state
  //  if 'S' in value: Font scale in %
  //  if 'f' in value: List of folded ranges
  //  if 'C' in value: Custom color of ui-tab header
  //  if 'F' in value: Code-tree filter: string and history
  "ui_history_disabled": "",

  //[Ui]
  //Close program by Esc key
  "ui_esc_close": false,

  //Close Console by Esc key
  "ui_esc_close_console": true,

  //Initial folder of Open/Save-as dialogs, for untitled tabs
  "ui_initial_dir": "",

  //[Ui/Tree]
  //After caret moves, select code-tree node for new caret position
  "ui_tree_auto_sync": true,

  //Delay (in msec) after text change, after which code-tree contents is filled
  "ui_tree_time_fill": 2000,

  //Show icons in code-tree, for lexers which assign icons (e.g. C#)
  "ui_tree_icons": true,

  //Code-tree icons theme
  //Folders from: codetreeicons
  "ui_tree_theme": "default_16x16",

  //Show tooltips for code-tree items, which don't fit by width
  "ui_tree_show_tooltips": true,

  //Layout of code-tree filter field
  //  0: field is hidden
  //  1: field is shown on top
  //  2: field is shown on bottom
  "ui_tree_filter_layout": 1,

  //Show nodes of sublexer(s) in code-tree
  //Used for example for JavaScript inside PHP. Requires program restart.
  "ui_tree_sublexers": false,

  //[Text/NewDoc]
  //New tabs: Lexer name
  "newdoc_lexer": "",

  //New tabs: Encoding name. Possible names are listed in Wiki (utf8, utf8_bom, cp1250 etc).
  "newdoc_encoding": "utf8",

  //New tabs: Line endings sequence
  //  0: Auto: CRLF on Windows, LF otherwise
  //  1: LF
  //  2: CRLF (Windows)
  //  3: CR
  "newdoc_ends": 0,

  //[File]
  //When file opens, and cannot detect encoding, open it as ANSI (value=false)
  //or UTF8 (value=true) [has suffix]
  "def_encoding_utf8": false,
  "def_encoding_utf8__linux": true,
  "def_encoding_utf8__mac": true,

  //[Text/Indent]
  //On pressing Enter, make new line indented (like in previous line)
  "indent_auto": true,

  //How to compose whitespaces for auto-indented lines (on Enter)
  //  0: indent (maybe mixed spaces/tabs) like in previous line
  //  1: by spaces only
  //  2: by tabs+spaces
  //  3: by tabs only
  //  4: by spaces up to "(" last non-closed bracket in previous line
  "indent_kind": 0,

  //Indentation for Indent/Unindent commands
  //  N>0: indent is N spaces
  //  N<0: indent is abs(N) tabs
  //  N=0: indent is from options "tab_size" and "tab_spaces"
  "indent_size": 0,

  //Don't do more Unindent (Shift+Tab), when any line of the selected block
  //is already at the first column
  "unindent_keeps_align": false,

  //When indenting several lines, stretch selection after command, to entire affected lines.
  //Otherwise, selection will be like before, shifted.
  "indent_makes_whole_line_sel": false,

  //Auto-indent by Enter: if line matches this reg-ex, make additional indent (from "tab_size").
  //Option is for lexer-specific configs, not for user.json config.
  //Reg-ex is case-sensitive.
  //You don't need this option for C-like lexers, because Enter inside {} brackets
  //is handled specially.
  "indent_auto_rule": "",

  //[Mouse]
  //Enable drag-drop of text blocks
  "mouse_drag_drop": true,

  //After drag-drop of text block to another group, focus target editor
  "mouse_drag_drop_focus_target": true,

  //Right-click moves caret (before showing context menu)
  "mouse_rt_click_moves_caret": false,

  //Double-click and immediately drag, makes selection by words
  "mouse_2click_drag_select_words": true,

  //Middle-click action
  //  0: None
  //  1: Scrolling: shows circle picture, then mouse-move near that circle does auto-scrolling
  //  2: Paste (without caret placement)
  //  3: Goto-definition command
  "mouse_middle_click": 1,

  //Enable selection of vertical blocks (Alt+drag)
  "mouse_column_selection": true,

  //Select entire line, when line number on gutter is clicked
  "mouse_gutter_click_sel": true,

  //Allow to zoom text using Ctrl+wheel
  "mouse_wheel_zoom": false,

  //Mouse wheel scrolling speed, vertical (in lines)
  "mouse_wheel_speed_vert": 3,

  //Mouse wheel scrolling speed, horizontal (in chars)
  "mouse_wheel_speed_horz": 10,

  //Mouse scrolling speed, when selection is dragged out of editor top/bottom edge.
  //Note: this option is global, not per-lexer.
  "mouse_scroll_speed_vert": 1,

  //Call "Go to definition" command, by click with modifier key
  //  "": disabled
  //  "a": by Alt+click
  //  "sa": by Shift+Alt+click
  //  "ca": by Ctrl+Alt+click
  //  "sca": by Shift+Ctrl+Alt+click
  "mouse_goto_definition": "a",

  //Mouse click on line number: select line with end-of-line
  //(so caret is placed on the next line)
  "mouse_click_number_selects_eol": true,

  //How to activate web links (URLs and emails) by mouse
  //(links are specified by option "links_regex")
  //  0: don't activate
  //  1: activate by single click
  //  2: activate by double click
  "mouse_click_links": 2,

  //[Keys]
  //Key BackSpace: do Unindent command, if caret is inside indented area
  "key_bksp_unindent": true,

  //Key BackSpace: if caret at line start, BkSp goes to end of previous line
  "key_bksp_wrap": true,

  //Key Tab: do Indent command, if text is selected
  "key_tab_indents_sel": true,

  //Key Home: first jump to leading non-space char, then to line start
  "key_home_to_nonspace": true,

  //Key End: first jump to trailing non-space char, then to line end
  "key_end_to_nonspace": true,

  //Keys Home/End: when moving on long wrapped lines, treat wrapped parts like
  //separate lines and first jump to wrapped parts edge
  "key_home_end_nav_wrapped": true,

  //Keys PageUp/PageDown: keep relative offset from top of editor
  "key_page_keeps_rel_pos": true,

  //Keys PageUp/PageDown: page size
  //  0: full height
  //  1: full height minus 1
  //  2: half height
  "key_page_size": 1,

  //Keys Up/Down: try to remember/keep caret column: if moving from long line,
  //to short line, to long line again
  "key_up_down_keeps_column": true,

  //Keys Up/Down: when moving on long wrapped lines, treat wrapped parts
  //like separate lines and try to jump to position above/below previous
  "key_up_down_nav_wrapped": true,

  //Keys Left/Right: with "caret_after_end":false, option allows carets
  //(when at least 2 carets exist) go to next/previous line
  //(a: caret is at the line start and Left pressed,
  //b: caret is at the line end and Right pressed)
  "key_left_right_wrap_with_carets": true,

  //Keys Left/Right: try to jump to opposite selection edge
  "key_left_right_swap_sel": true,

  //Keys Left/Right: try to jump to opposite selection edge, and keep this selection
  "key_left_right_swap_sel_and_select": false,

  //[Ui/Statusbar]
  //States: no-selection, small-selection (one line), stream-selection (several lines),
  //  column-selection, multi-carets.
  //Macros:
  //  {y}: line index of first caret
  //  {y2}: line index of last caret
  //  {yb}: line index of first selection beginning
  //  {ye}: line index of first selection ending
  //  {x}: column index of first caret, tab-chars counted as 1
  //  {xx}: column index of last caret, tab-chars expanded
  //  {count}: total number of lines
  //  {carets}: total number of carets
  //  {sel}: number of lines affected by selection(s)
  //  {selchars}: number of selected characters, for all kinds of selections
  //  {cols}: number of columns in column selection
  //  {char}: character at first caret (empty if no char)
  //  {char_dec}: character at first caret - decimal code (empty if no char)
  //  {char_hex}: character at first caret - 2...4-digit hex code (empty if no char)
  //  {char_hex4}: character at first caret - 4-digit hex code (empty if no char)
  //  {_ln}: localized string "Ln"
  //  {_col}: localized string "Col"
  //  {_sel}: localized string "sel"
  //  {_linesel}: localized string "lines sel"
  //  {_carets}: localized string "carets"
  //
  "ui_statusbar_no_sel": "{_ln} {y}, {_col} {xx}",
  "ui_statusbar_small_sel": "{_ln} {y}, {_col} {xx}, {_sel}",
  "ui_statusbar_str_sel": "{_ln} {y}, {_col} {xx}, {sel} {_linesel}",
  "ui_statusbar_col_sel": "{sel}x{cols} {_sel}",
  "ui_statusbar_carets": "{carets} {_carets}, {sel} {_linesel}",

  //Statusbar is visible
  "ui_statusbar_show": true,

  //Statusbar panels list. Can skip items, can reorder items.
  //Panel names:
  //    caret  : Caret(s) info
  //    enc    : Encoding name
  //    ends   : Line ends characters
  //    lexer  : Lexer name
  //    tabsize: Tab-char size
  //    ins    : Insert/Overwrite mode (toggled by Ins key)
  //    selmode: Shows "-" for normal selection mode, "| |" for column selection mode
  //    wrap   : State of wrap mode: no wrap, wrap at window edge, wrap at fixed margin
  //    msg    : Message from CudaText or plugins (panel is auto-sized)
  //Panel alignment: C (center), L (left), R (right), A (auto-size)
  "ui_statusbar_panels": "caret,C,180|enc,C,125|ends,A,45|lexer,C,140|tabsize,A,75|selmode,A,15|msg,L,4000",

  //Statusbar message (in the last panel): show time in seconds
  "ui_statusbar_time": 5,

  //[Ui]
  //Show full file path in window title
  "ui_title_path": false,

  //[Ui/History]
  //Save current "session" on program closing, and restore it on start.
  //This also shows "Don't save / Keep in session" button in the "Save tabs?" dialog.
  "ui_reopen_session": true,

  //Allow to restore last session even if some file/folder was passed in command line.
  //Note, this gives bad behaviour: N program instances will reopen the same last
  //session + passed command-line file.
  "ui_reopen_session_cmdline": false,

  //Allow to close program without confirmation, with saving modified documents
  //to the session. In details: if a) "ui_auto_save_session":true,
  //b) "ui_reopen_session":true,
  //c) "ui_history_disabled" does not have "t",
  //program will save modified documents to the session, on closing, without confirmation.
  "ui_auto_save_session": false,

  //Pause of hint, of command "show function-hint"
  "ui_alt_hint_time": 9,

  //[Lexers]
  //Allow to apply color-theme to lexer's styles (and auto-show dialog "Lexer styles mapping")
  "ui_lexer_themes": true,

  //[View/Web]
  //Underline HTML color codes (like #008080, #0a0) in these file extensions,
  //comma-separated, w/o dot. "*" for all files, empty str to disable.
  "underline_color_files": "*",

  //Width of line, pixels
  "underline_color_size": 3,

  //[View/Brackets]
  //Enable to highlight pair brackets
  "bracket_highlight": false,

  //String containing pairs of brackets to highlight, in any order
  //Supports these pairs: () [] {} <>
  "bracket_symbols": "()[]{}",

  //Max distance, in lines, from the caret, to search for pair bracket
  //(used only for bracket highlighting, but not for bracket jumps)
  "bracket_distance": 150,

  //[File/Export]
  //Export to HTML: show line numbers in output
  "export_html_numbers": false,

  //Export to HTML: font name in output
  "export_html_font_name": "Courier New",

  //Export to HTML: font size in output
  "export_html_font_size": 12,

  //[Python]
  //Sets Python engine [has suffix]
  //  If option is correct, you must see Python version in console panel (Ctrl+`)
  //  and command "=sys.path" must work in console.
  //
  //  Empty-string value of this option: disable Python completely,
  //  and disable the command "find python library".
  //
  //  Instruction for Linux/FreeBSD/Solaris, if Python engine not auto-detected:
  //  1) open file manager, go to /usr
  //  2) search for "libpython3.*so*"
  //     Terminal command:
  //     $ find /usr -name 'libpython3.*so*' 2>/dev/null
  //
  //  3) if not found, install Python 3, goto step 2
  //  4) in user.json, set "pylib__linux" (or "pylib__freebsd" etc) to one
  //     of the found filenames. for example:
  //     "pylib__linux" : "/usr/lib/x86_64-linux-gnu/libpython3.7m.so.1.0",
  //
  //  macOS:
  //  Python installed via Homebrew is not OK, it doesn't install 32-bit .dylib file.
  //  So you must install Python from www.python.org
  //  CudaText will find Python then (any version until 3.9).
  //
  "pylib__linux": "libpython3.so",
  "pylib__mac": "/Library/Frameworks/Python.framework/Versions/3.6/lib/libpython3.6.dylib",
  "pylib__freebsd": "libpython3.6m.so",

  //API: delay for event on_change_slow in msec (used in CudaLint)
  "py_change_slow": 2000,

  //[Text/Commands]
  //Commenting: If no selection then move caret to next line
  "comment_move_down": true,

  //Commenting: Try to save chars positions in line after commenting/uncommenting
  "comment_save_column": false,

  //Commenting: If selected >1 lines, insert comment at maximal common indent
  "comment_equal_column": false,

  //Command "Duplicate line (advanced)": If no selection, duplicate entire line
  "duplicate_full_line_if_no_sel": true,

  //Command "Duplicate line (advanced)": If no selection, move caret to next line
  "duplicate_move_down": true,

  //[Text/Completion]
  //Enable special HTML auto-completion, see wiki
  "autocomplete_html": true,

  //Enable special HTML auto-completion, if lexer name matches this reg.ex.
  "autocomplete_html_lexers": ".*HTML.*|\bPHP\b",

  //Enable special CSS auto-completion, see wiki
  "autocomplete_css": true,

  //Enable special CSS auto-completion, if lexer name matches this reg.ex.
  "autocomplete_css_lexers": "CSS",

  //Auto-show auto-completion after typing N word-chars (0: disabled)
  //Option is for lexer-specific configs, not for user.json config.
  "autocomplete_autoshow_chars": 0,

  //Chars, which trigger auto-completion showing.
  //Option is for lexer-specific configs, not for user.json config.
  //  E.g. if option is "@!" in config "lexer Nnn.json", then @ and !
  //  chars trigger auto-completion, in Nnn lexer.
  "autocomplete_trigger_chars": "",

  //When any of these chars is typed while showing completion listbox,
  //listbox enters selection, and typed char is appended too.
  //Option is for lexer-specific configs, not for user.json config.
  "autocomplete_commit_chars": " ,;/\\''\"",

  //When any of these chars is typed while showing completion listbox,
  //listbox is closed, and typed char is appended.
  "autocomplete_close_chars": "<>()[]{}=",

  //If chosen auto-completion item has (), then append "(" on insertion
  "autocomplete_add_opening_bracket": true,

  //What to do when Up key is pressed with auto-completion selection on top,
  //or Down key is pressed with selection on bottom
  //  0: ignore pressed key
  //  1: wrap selection to opposite edge
  //  2: close auto-completion
  "autocomplete_up_down_at_edge": 1,

  //If completion listbox has just single item, then commit it w/o showing menus
  "autocomplete_commit_single_item": false,

  //Auto-close brackets/quotes. Value can have only chars: ( [ { ' " `
  //(Don't forget that JSON config needs double-quote escaped.)
  //Function doesn't work on escaped chars (after backslash).
  //Function doesn't work if after caret is word char.
  "auto_close_brackets": "([{",

  //Allow N (N>1) consecutive commented lines to automatically create the folding range.
  //Note: option is global, not per-lexer.
  "auto_fold_comments": 5,

  //[File]
  //Extensions of picture files (they show as pictures)
  "picture_types": "bmp,png,jpg,jpeg,jpe,gif,ico",

  //[View/Web]
  //Highlight (and underline) hyperlinks
  "links_hilite": true,

  //Regular expression, which finds hyperlinks
  "links_regex": "\\b(mailto:)?\\w[\\w\\-\\.]*@\\w[\\w\\-\\.]*\\.\\w{2,}\\b|\\b(https?://|ftp://|magnet:\\?|www\\.|ftp\\.)\\w[\\w\\-\\.@]*(:\\d+)?(/[~\\w\\.\\-\\+\\/%]*)?(\\?[^<>'\"\\s]+)?(\\#[\\w\\-]*)?",

  //[File]
  //Maximal file size, allowed to open, in Mb
  "ui_max_size_open": 500,

  //Maximal file size, for which allowed to use lexers, in Mb
  //  It's important for JSON, XML: if file is bigger, than lite lexer (JSON ^, XML ^)
  //  will be used instead of normal lexer.
  "ui_max_size_lexer": 2,

  //[Ui]
  //On calling Full-Screen, hide these UI elements
  //Value is string of few chars
  //  if "t" in value: toolbar
  //  if "i" in value: statusbar
  //  if "a" in value: sidebar (on the left edge)
  //  if "p" in value: side panels (near sidebar, e.g. Code Tree, Projects)
  //  if "b" in value: bottom panels (e.g. Console)
  //  if "u" in value: file tabs
  //  if "g" in value: gutter (all columns: numbers, bookmarks...)
  "ui_fullscreen": "tp",

  //Highlight border of focused input box
  //(Find/Replace dialog, Console panel, Code Tree filter input)
  //  value=0: don't highlight
  //  value>0: highlight with the specified border width, in pixels
  //  if 100 is added, then highlight in the main editor too (and plugins' editors)
  "ui_active_border": 1,

  //Console panel (Ctrl+`): word-wrap mode
  "ui_console_wrap": true,

  //[Ui/Panels]
  //Show sidebar (vertical bar with buttons on the left side)
  "ui_sidebar_show": true,

  //Place sidebar on the right side
  "ui_sidebar_on_right": false,

  //Sidebar icons theme
  //Folders from: sideicons
  "ui_sidebar_theme": "common_20x20",

  //Show toolbar (horizontal bar with buttons, below window title)
  "ui_toolbar_show": false,

  //Toolbar icons theme
  //Folders from: toolbaricons
  "ui_toolbar_theme": "default_24x24",

  //Show main menu bar
  //Note: this option takes effect only after program restart
  "ui_menu_show": true,

  //Top menu bar is themed (Windows only, not possible in other OS)
  "ui_menu_themed": true,

  //Font size for themed top menu bar (Windows only)
  "ui_menu_themed_font_size": 9,

  //Side-panel's visible state on program start
  //  0: Restore state from history file
  //  1: Show
  //  2: Hide, program shows panel if needed
  "ui_sidepanel_on_start": 0,

  //Bottom-panel's visible state on program start
  //  0: Restore state from history file
  //  1: Show
  //  2: Hide, program shows panel if needed
  "ui_bottom_on_start": 0,

  //[Find/Hotkeys]
  //Hotkeys in Find/Replace dialog
  "find_hotkey_find_dlg": "Ctrl+F",
  "find_hotkey_replace_dlg": "Ctrl+R",
  "find_hotkey_find_first": "Alt+Enter",
  "find_hotkey_find_next": "",
  "find_hotkey_find_prev": "Shift+Enter",
  "find_hotkey_replace": "Alt+Z",
  "find_hotkey_replace_no_next": "Ctrl+Alt+Z",
  "find_hotkey_replace_all": "Alt+A",
  "find_hotkey_replace_global": "",
  "find_hotkey_count_all": "Alt+O",
  "find_hotkey_extract": "Alt+Q",
  "find_hotkey_select_all": "Alt+E",
  "find_hotkey_mark_all": "Alt+K",
  "find_hotkey_op_regex": "Alt+R",
  "find_hotkey_op_case": "Alt+C",
  "find_hotkey_op_words": "Alt+W",
  "find_hotkey_op_wrapped": "Alt+N",
  "find_hotkey_op_in_sel": "Alt+X",
  "find_hotkey_op_multiline": "Alt+M",
  "find_hotkey_op_confirm_rep": "Alt+Y",
  "find_hotkey_op_tokens": "",
  "find_hotkey_op_hi": "",

  //[Viewer]
  //Viewer text width in binary mode
  "viewer_binary_width": 100,

  //[Log]
  //Show in console lines "Init: cuda_nnnn" about plugins initialization
  "py_init_log": true,

  //Write console contents to file settings/console.log
  "log_console": false,

  //Show in console lines "Loaded session...", "Saved session..."
  "log_sessions": true,

  //[Emmet]
  //Add slash to empty tags (example of result: <img src="" />)
  "emmet_add_slash_to_empty_tags": true,

  //Add indentation to nested tags (example: ul>li*6)
  "emmet_indent_nested": true,

  //For abbreviations with class/id attributes (example: .name),
  //add HTML comment near result
  "emmet_comment_tags": false,

  //Expand everything to a single line of code
  "emmet_single_line": false,

  //Trim line markers from wrapped lines e.g. "* ", "- " or "1."
  "emmet_trim_line_markers": true,

  //Wrap selected or Lorem Ipsum text (abbreviation p{@lorem}),
  //at the column defined by "margin" option
  "emmet_word_wrap": false,

}
