From deb18a050ef522791c48c7c8c549a2c4b2043be0 Mon Sep 17 00:00:00 2001 From: "Justin M. Keyes" Date: Tue, 20 Nov 2018 10:52:49 +0100 Subject: [PATCH] defaults: background=dark #2894 (#9205) By historical accident, Nvim defaults to background=light. So on a dark background, `:colorscheme default` looks completely wrong. The "smart" logic that Vim uses is confusing for anyone who uses Vim on multiple platforms, so rather than mimic that, pick the (hopefully) most common default. - Since Neovim is dark-powered, we assume most users have dark backgrounds. - Most of the GUIs tend to have a dark background by default. ref #6289 --- runtime/doc/options.txt | 39 ++++++--------------------- runtime/doc/vim_diff.txt | 1 + src/nvim/options.lua | 4 +-- test/functional/terminal/helpers.lua | 2 +- test/functional/terminal/tui_spec.lua | 6 +++-- test/functional/ui/embed_spec.lua | 3 ++- test/functional/ui/output_spec.lua | 7 ++++- test/functional/ui/screen.lua | 5 ++++ 8 files changed, 29 insertions(+), 38 deletions(-) diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index d1e84c5aec..29d9a60aa2 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -703,47 +703,24 @@ A jump table for the options with a short description can be found at |Q_op|. been set. *'background'* *'bg'* -'background' 'bg' string (default "dark" or "light", see below) +'background' 'bg' string (default "dark") global - When set to "dark", Vim will try to use colors that look good on a - dark background. When set to "light", Vim will try to use colors that - look good on a light background. Any other value is illegal. - Vim tries to set the default value according to the terminal used. - This will not always be correct. - Setting this option does not change the background color, it tells Vim - what the background color looks like. For changing the background - color, see |:hi-normal|. + When set to "dark" or "light", Nvim will adjust the default color + groups for a dark or light background, respectively. - When 'background' is set Vim will adjust the default color groups for - the new value. But the colors used for syntax highlighting will not - change. *g:colors_name* + This option does NOT change the background color, it tells Nvim what + the "inherited" (terminal/GUI) background looks like. + See |:hi-normal| if you want to set the background color explicitly. + *g:colors_name* When a color scheme is loaded (the "g:colors_name" variable is set) setting 'background' will cause the color scheme to be reloaded. If the color scheme adjusts to the value of 'background' this will work. However, if the color scheme sets 'background' itself the effect may be undone. First delete the "g:colors_name" variable when needed. - When setting 'background' to the default value with: > - :set background& -< Vim will guess the value. In the GUI this should work correctly, - in other cases Vim might not be able to guess the right value. - - When starting the GUI, the default value for 'background' will be - "light". When the value is not set in the gvimrc, and Vim detects - that the background is actually quite dark, 'background' is set to - "dark". But this happens only AFTER the gvimrc file has been read - (because the window needs to be opened to find the actual background - color). To get around this, force the GUI window to be opened by - putting a ":gui" command in the gvimrc file, before where the value - of 'background' is used (e.g., before ":syntax on"). - - For Windows the default is "dark". "dark" should be used if $COLORFGBG - suggests a dark background (not yet implemented). Otherwise the default - is "light". - Normally this option would be set in the vimrc file. Possibly depending on the terminal name. Example: > - :if $TERM == "xterm" + :if $TERM ==# "xterm" : set background=dark :endif < When this option is set, the default settings for the highlight groups diff --git a/runtime/doc/vim_diff.txt b/runtime/doc/vim_diff.txt index 4fbfb0d7a0..3915763eed 100644 --- a/runtime/doc/vim_diff.txt +++ b/runtime/doc/vim_diff.txt @@ -27,6 +27,7 @@ a complete and centralized reference of those differences. - 'autoindent' is set by default - 'autoread' is set by default +- 'background' always defaults to "dark" - 'backspace' defaults to "indent,eol,start" - 'backupdir' defaults to .,~/.local/share/nvim/backup (|xdg|) - 'belloff' defaults to "all" diff --git a/src/nvim/options.lua b/src/nvim/options.lua index bc7f1a2b0a..b0575df7ec 100644 --- a/src/nvim/options.lua +++ b/src/nvim/options.lua @@ -132,10 +132,10 @@ return { { full_name='background', abbreviation='bg', type='string', scope={'global'}, - vi_def=true, + vim=true, redraw={'all_windows'}, varname='p_bg', - defaults={if_true={vi="light"}} + defaults={if_true={vi="light",vim="dark"}} }, { full_name='backspace', abbreviation='bs', diff --git a/test/functional/terminal/helpers.lua b/test/functional/terminal/helpers.lua index bd24b9785d..ae8d4704e4 100644 --- a/test/functional/terminal/helpers.lua +++ b/test/functional/terminal/helpers.lua @@ -52,7 +52,7 @@ local function screen_setup(extra_rows, command, cols) [7] = {foreground = 130}, [8] = {foreground = 15, background = 1}, -- error message [9] = {foreground = 4}, - [10] = {foreground = 2}, -- "Press ENTER" in embedded :terminal session. + [10] = {foreground = 121}, -- "Press ENTER" in embedded :terminal session. }) screen:attach({rgb=false}) diff --git a/test/functional/terminal/tui_spec.lua b/test/functional/terminal/tui_spec.lua index 365bd2a0be..a47fed0442 100644 --- a/test/functional/terminal/tui_spec.lua +++ b/test/functional/terminal/tui_spec.lua @@ -134,15 +134,17 @@ describe('tui', function() feed_data('\022\007') -- ctrl+g feed_data('\022\022') -- ctrl+v feed_data('\022\013') -- ctrl+m + local attrs = screen:get_default_attr_ids() + attrs[11] = {foreground = 81} screen:expect([[ - {9:^G^V^M}{1: } | + {11:^G^V^M}{1: } | {4:~ }| {4:~ }| {4:~ }| {5:[No Name] [+] }| {3:-- INSERT --} | {3:-- TERMINAL --} | - ]]) + ]], attrs) end) it('automatically sends for bracketed paste sequences', function() diff --git a/test/functional/ui/embed_spec.lua b/test/functional/ui/embed_spec.lua index 4fc93c3b63..a7f5cc2bfa 100644 --- a/test/functional/ui/embed_spec.lua +++ b/test/functional/ui/embed_spec.lua @@ -17,6 +17,7 @@ local function test_embed(ext_linegrid) [1] = {foreground = Screen.colors.Grey100, background = Screen.colors.Red}, [2] = {bold = true, foreground = Screen.colors.SeaGreen4}, [3] = {bold = true, foreground = Screen.colors.Blue1}, + [4] = {bold = true, foreground = Screen.colors.Green}, }) end @@ -56,7 +57,7 @@ local function test_embed(ext_linegrid) Error detected while processing pre-vimrc command line: | foo | {1:bar} | - {2:Press ENTER or type command to continue}^ | + {4:Press ENTER or type command to continue}^ | ]]) end) diff --git a/test/functional/ui/output_spec.lua b/test/functional/ui/output_spec.lua index 1850d436ac..aa99499ec6 100644 --- a/test/functional/ui/output_spec.lua +++ b/test/functional/ui/output_spec.lua @@ -68,7 +68,12 @@ describe("shell command :!", function() | {10:Press ENTER or type command to continue}{1: } | {3:-- TERMINAL --} | - ]]) + ]], { + -- test/functional/helpers.lua defaults to background=light. + [1] = {reverse = true}, + [3] = {bold = true}, + [10] = {foreground = 2}, + }) end) end) diff --git a/test/functional/ui/screen.lua b/test/functional/ui/screen.lua index af036913d8..e5b522e775 100644 --- a/test/functional/ui/screen.lua +++ b/test/functional/ui/screen.lua @@ -72,6 +72,7 @@ -- To debug screen tests, see Screen:redraw_debug(). local global_helpers = require('test.helpers') +local deepcopy = global_helpers.deepcopy local shallowcopy = global_helpers.shallowcopy local helpers = require('test.functional.helpers')(nil) local request, run, uimeths = helpers.request, helpers.run, helpers.uimeths @@ -176,6 +177,10 @@ function Screen:set_default_attr_ids(attr_ids) self._default_attr_ids = attr_ids end +function Screen:get_default_attr_ids() + return deepcopy(self._default_attr_ids) +end + function Screen:set_default_attr_ignore(attr_ignore) self._default_attr_ignore = attr_ignore end