aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2019-03-11 09:25:39 +0100
committerGitHub <noreply@github.com>2019-03-11 09:25:39 +0100
commitc0a29c3656b0951bd539520132fe76b7f4463268 (patch)
treea962525042184da905be1a2d29f2eff0686b3b36
parentc99bff5f56de2ecd87e7bf8da1ff3ba2c04255d7 (diff)
parent43184566aafdd3ed9e787775c83ba6b73faa0cf6 (diff)
downloadrneovim-c0a29c3656b0951bd539520132fe76b7f4463268.tar.gz
rneovim-c0a29c3656b0951bd539520132fe76b7f4463268.tar.bz2
rneovim-c0a29c3656b0951bd539520132fe76b7f4463268.zip
Merge #9708 from justinmk/tui-bg-detect
-rw-r--r--src/nvim/tui/input.c20
-rw-r--r--test/functional/terminal/tui_spec.lua25
2 files changed, 32 insertions, 13 deletions
diff --git a/src/nvim/tui/input.c b/src/nvim/tui/input.c
index 3eb88366d6..703feac305 100644
--- a/src/nvim/tui/input.c
+++ b/src/nvim/tui/input.c
@@ -10,6 +10,7 @@
#include "nvim/charset.h"
#include "nvim/main.h"
#include "nvim/aucmd.h"
+#include "nvim/ex_docmd.h"
#include "nvim/option.h"
#include "nvim/os/os.h"
#include "nvim/os/input.h"
@@ -357,15 +358,17 @@ static bool handle_forced_escape(TermInput *input)
static void set_bg_deferred(void **argv)
{
char *bgvalue = argv[0];
- if (starting) {
- // Wait until after startup, so OptionSet is triggered.
- loop_schedule(&main_loop, event_create(set_bg_deferred, 1, bgvalue));
- return;
- }
if (!option_was_set("bg") && !strequal((char *)p_bg, bgvalue)) {
// Value differs, apply it.
- set_option_value("bg", 0L, bgvalue, 0);
- reset_option_was_set("bg");
+ if (starting) {
+ // Wait until after startup, so OptionSet is triggered.
+ do_cmdline_cmd((bgvalue[0] == 'l')
+ ? "autocmd VimEnter * once nested set background=light"
+ : "autocmd VimEnter * once nested set background=dark");
+ } else {
+ set_option_value("bg", 0L, bgvalue, 0);
+ reset_option_was_set("bg");
+ }
}
}
@@ -424,7 +427,8 @@ static bool handle_background_color(TermInput *input)
double luminance = (0.299 * r) + (0.587 * g) + (0.114 * b); // CCIR 601
char *bgvalue = luminance < 0.5 ? "dark" : "light";
DLOG("bg response: %s", bgvalue);
- loop_schedule(&main_loop, event_create(set_bg_deferred, 1, bgvalue));
+ loop_schedule_deferred(&main_loop,
+ event_create(set_bg_deferred, 1, bgvalue));
} else {
DLOG("failed to parse bg response");
}
diff --git a/test/functional/terminal/tui_spec.lua b/test/functional/terminal/tui_spec.lua
index a0adb45630..2017c57828 100644
--- a/test/functional/terminal/tui_spec.lua
+++ b/test/functional/terminal/tui_spec.lua
@@ -839,8 +839,7 @@ describe('TUI background color', function()
it("triggers OptionSet event on terminal-response", function()
feed_data('\027:autocmd OptionSet background echo "did OptionSet, yay!"\n')
- -- The child Nvim is running asynchronously; wait for it to register the
- -- OptionSet handler.
+ -- Wait for the child Nvim to register the OptionSet handler.
feed_data('\027:autocmd OptionSet\n')
screen:expect({any='--- Autocommands ---'})
@@ -860,8 +859,14 @@ describe('TUI background color', function()
local function assert_bg(color, bg)
it('handles '..color..' as '..bg, function()
- feed_data('\027]11;rgb:'..color..'\007:echo &background\n')
- screen:expect(string.format([[
+ feed_data('\027:autocmd OptionSet background :echo &background\n')
+
+ -- Wait for the child Nvim to register the OptionSet handler.
+ feed_data('\027:autocmd OptionSet\n')
+ screen:expect({any='--- Autocommands ---'})
+
+ feed_data('\012') -- CTRL-L: clear the screen
+ local expected_grid = [[
{1: } |
{4:~ }|
{4:~ }|
@@ -869,7 +874,17 @@ describe('TUI background color', function()
{5:[No Name] 0,0-1 All}|
%-5s |
{3:-- TERMINAL --} |
- ]], bg))
+ ]]
+ screen:expect(string.format(expected_grid, ''))
+
+ feed_data('\027]11;rgb:'..color..'\007')
+ -- Because bg=dark is the default, we do NOT expect OptionSet event.
+ if bg == 'dark' then
+ screen:expect{unchanged=true,
+ grid=string.format(expected_grid, '')}
+ else
+ screen:expect(string.format(expected_grid, bg))
+ end
end)
end