Почему параметр фона vim по умолчанию отличается при запуске в gnome-terminal и gnu-screen?

Я использую Ubuntu 16.04 LTS с установленным vim 7.4 и экраном. Мой вопрос заключается в том, почему, когда я открываю vim в терминале Ubuntu по умолчанию, опция background равна dark, а при открытии на экране gnu - light. Вы можете увидеть небольшие различия в подсветке синтаксиса при открытии в этих терминалах.

Откуда у него такие значения?

Пусть vim угадывает значения фона, оба дают light. (т.е. :set bg& bg? )

Я просмотрел vimfiles, но не нашел ничего подозрительного.

Может быть, он лежит где-то в конфигурационных файлах vim, но я еще не выяснил, или есть другой механизм установки параметра фона по умолчанию в vim?


Резюме

$ vim
:set bg?
  background=dark
:set bg&
:set bg?
  background=light
:q
$ screen
$ vim
:set bg?
  background=light   ???
:set bg&
:set bg?
  background=light

person KenIchi    schedule 09.03.2017    source источник


Ответы (2)


vim использует escape-последовательность из репертуара xterm, чтобы узнать, какой цвет фона, что вы можете увидеть в заблокировать term.c, начиная с комментария

    /* Check for background color response from the terminal:
     *
     *       {lead}11;rgb:{rrrr}/{gggg}/{bbbb}{tail}
     *
     * {lead} can be <Esc>] or OSC
     * {tail} can be '\007', <Esc>\ or STERM.

кульминацией которого является некоторый код (который я бы рекомендовал переписать...):

            {/* TODO: don't set option when already the right value */
                LOG_TR("Received RBG");
                rbg_status = RBG_GOT;
                set_option_value((char_u *)"bg", 0L, (char_u *)(
                    (3 * '6' < tp[j+7] + tp[j+12] + tp[j+17])
                     ? "light" : "dark"), 0);

который был добавлен в середине 2015 года:

commit b5c3265521749fda81ae4b052de35a0d1209cf50                                 
Author: Bram Moolenaar <[email protected]>                                           
Date:   Thu Jun 25 17:03:36 2015 +0200                                          

    patch 7.4.757                                                               
    Problem:    Cannot detect the background color of a terminal.               
    Solution:   Add T_RBG to request the background color if possible. (Lubomir 
                Rintel)

xterm исправление № 94 (март 1999 г.) добавлена ​​управляющая последовательность для запросов цвета:

расширить динамические последовательности управления цветами, чтобы позволить пользователям определять цвета и шрифт, которые в данный момент активны.

Разработчики VTE скопировали эту функцию в начале 2014 года (см. #567444).

Но экран GNU не распознает последовательность (или ее ответ), поэтому не пропускает ее.

Между прочим, vim мог сделать это несколькими способами. Я проверил, какой метод он использовал с strace.

person Thomas Dickey    schedule 09.03.2017
comment
Замечательный ответ, однако ;). Последовательности управления терминалом, как я мог забыть :) . Большое спасибо (у) - person KenIchi; 10.03.2017

С 1_:

[...]
For MS-DOS, Windows and OS/2 the default is "dark".
For other systems "dark" is used when 'term' is "linux",
"screen.linux", "cygwin" or "putty", or $COLORFGBG suggests a dark
background.  Otherwise the default is "light".
[...]
person romainl    schedule 09.03.2017
comment
Похоже, что envar $TERM здесь не действует. Я изменил его с «screen.xterm-256color» на «xterm-256color», что не имеет значения. - person KenIchi; 10.03.2017