Bug 25013 - vim в xterm меняет раскраску файлов
Summary: vim в xterm меняет раскраску файлов
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: vim-enhanced (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: Gleb F-Malinovskiy
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-02-03 01:18 MSK by Kirill A. Shutemov
Modified: 2011-03-05 15:47 MSK (History)
11 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Kirill A. Shutemov 2011-02-03 01:18:56 MSK
vim (точнее vim-enhanced в xterm'е) при открытии файла отображает только statusline (или как там его) пока не нажмёшь любую клавишу (за исключением модификаторов). Затем всё приходит в норму.

Сломалось после обновления до 7.3.112-alt1.

Смена мэйнтейнера не осталась незамеченной. :(
Comment 1 Dmitry V. Levin 2011-02-03 01:39:25 MSK
Не воспроизводится.  Проверял в двух конфигурациях.

Основная:
$ echo $TERM
rxvt-unicode
$ readlink -ev /usr/bin/vim |xargs -r rpmquery -f
vim-console-7.3.112-alt1

Тестовая:
$ echo $TERM
xterm
$ hsh --init && hsh-install vim-enhanced && hsh-shell
Comment 2 Kirill A. Shutemov 2011-02-03 09:54:45 MSK
У меня в хэшере после нажатия, например, на Enter меняется раскраска файлов (смотрел на /etc/bashrc). Это тоже не воспроизводится?
Comment 3 Vladimir Lettiev 2011-02-03 10:52:52 MSK
(In reply to comment #2)
> У меня в хэшере после нажатия, например, на Enter меняется раскраска файлов
> (смотрел на /etc/bashrc). Это тоже не воспроизводится?

У меня в xterm воспроизводится, а в gnome-terminal и urxvt нет.
Comment 4 Victor Forsyuk 2011-02-03 11:22:31 MSK
У меня не воспроизводится ни в одном из терминалов. Кирилл, попробуйте проверить от новосозданного юзера.
Comment 5 Dmitry V. Levin 2011-02-03 15:37:06 MSK
(In reply to comment #2)
> У меня в хэшере после нажатия, например, на Enter меняется раскраска файлов
> (смотрел на /etc/bashrc). Это тоже не воспроизводится?

Нет, не воспроизводится.
Comment 6 Dmitry V. Levin 2011-02-05 01:56:42 MSK
Гипотеза: наверное, у нас xterm'ы разных версий.
Я сумел воспроизвести мигание раскраски, только устанавливая xterm и rxvt-unicode из Сизифа в hasher, и запуская эти xterm/urxvt прямо внутри hasher.
Так что я склонен полагать, что дело тут не совсем в vim или даже совсем не в vim.
Comment 7 Dmitry V. Levin 2011-02-05 02:05:58 MSK
Совсем забыл что uxterm==xterm.
В urxvt не воспроизводится даже c версией из Сизифа внутри hasher.
Только с xterm и только c версией из Сизифа внутри hasher.
Comment 8 Dmitry V. Levin 2011-02-05 02:19:42 MSK
(In reply to comment #2)
> У меня в хэшере после нажатия, например, на Enter меняется раскраска файлов
> (смотрел на /etc/bashrc). Это тоже не воспроизводится?

У кого это воспроизводится, попробуйте запустить под strace'ом:
strace -e pause -o /dev/null vim /etc/bashrc
Изменится ли видимое поведение?
Comment 9 Kirill A. Shutemov 2011-02-05 02:41:56 MSK
> У кого это воспроизводится, попробуйте запустить под strace'ом:
> strace -e pause -o /dev/null vim /etc/bashrc
> Изменится ли видимое поведение?

нет.
Comment 10 Dmitry V. Levin 2011-02-05 02:46:39 MSK
(In reply to comment #9)
> > У кого это воспроизводится, попробуйте запустить под strace'ом:
> > strace -e pause -o /dev/null vim /etc/bashrc
> > Изменится ли видимое поведение?
> 
> нет.

А у меня мигание в сизифном xterm внутри hasher при запуске под strace пропадает.
Наверное, у нас ещё и ядра разные.

В общем, я не понимаю, как это нормально воспроизводить и что с этим делать.
Comment 11 Kirill A. Shutemov 2011-02-05 02:54:06 MSK
(In reply to comment #10)
> В общем, я не понимаю, как это нормально воспроизводить и что с этим делать.

Возможно, имеет смысл по-bisect'ить vim? Предыдущая версия же работает. Может наведёт на какие-то мысли...
Comment 12 Kirill A. Shutemov 2011-02-05 03:04:11 MSK
также воспроизводится в федоре с 7.3.107
Comment 13 Dmitry V. Levin 2011-02-05 03:07:32 MSK
(In reply to comment #11)
> (In reply to comment #10)
> > В общем, я не понимаю, как это нормально воспроизводить и что с этим делать.
> 
> Возможно, имеет смысл по-bisect'ить vim? Предыдущая версия же работает. Может
> наведёт на какие-то мысли...

Прежде чем бисектить, хорошо бы узнать, не меняется ли поведение vim в результате простой пересборки той версии, которая раньше работала без мигания.
Comment 14 Kirill A. Shutemov 2011-02-05 03:28:07 MSK
Откатил 91'ый патч. Как будто бы починилось.
Comment 15 Dmitry V. Levin 2011-02-17 04:23:27 MSK
(In reply to comment #14)
> Откатил 91'ый патч. Как будто бы починилось.

Ты предлагаешь откатить этот коммит?  Тогда хотелось бы понять, что именно он ломает и почему, чтобы это можно было как-то отрепортить.
Comment 16 Kirill A. Shutemov 2011-02-17 09:31:49 MSK
Мне сложно сказать почему именно этот патч.
Я нашёл его проверяя коммиты которые потенциально могут что-то похожее сломать. Угадал с первого раза.
Что именно делает этот коммит представляю слабо.
Comment 17 Dmitry V. Levin 2011-02-21 16:42:20 MSK
Оно и до патча 091 моргало, только сразу при старте, без ожидания.
Comment 18 Fr. Br. George 2011-02-22 16:12:14 MSK
(В ответ на комментарий №17)
> Оно и до патча 091 моргало, только сразу при старте, без ожидания.

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

В первый раз он раскрашивает картинку исходя из 8-цветного режима:
(цитата из редактирования спека xterm-а):
"\33[1;1H\33[33mProvides\33[m\33[35m:\33[m xvt, \33[35m%\33[m\33[36m_bindir\33[m/xvt\r\n\33[1m\33[34m~"
Во второй раз -- из многоцветного:
"\7\33[32;61H  \33[1;1H\33[m\33[H\33[2J\33[1;1H\33[38;5;130mProvides\33[m\33[35m:\33[m xvt, \33[35m%\33[m\33[36m_bindir\33[m/xvt\r\n\33[94m~"

Обратите внимание на числа перед Provides и ~ -- это цвета. Причём:
\33[33mProvides -- это цвет #3 (8 цветов)
\33[38;5;130mProvides -- это цвет #130 (256 цветов)
\33[34m~ -- это цвет #4 (8 цветов)
\33[94m~ -- это цвет #12 (16-цветный режим NB!)

У нас xterm собран с 256 цветами. По умолчанию собирается с 16. Но если собрать с 8, ситуация во второй раз станет такой:
"\7\33[32;61H  \33[1;1H\33[27m\33[m\33[H\33[2J\33[1;1H\33[33mProvides\33[m\33[35m:\33[m xvt, \33[35m%\33[m\33[36m_bindir\33[m/xvt\r\n\33[94m~:

Т. е. "~" рисуется опять исходя из 16-цветного режима. NB!

Делаю предположение, что где-то в недрах vim-а прибит или неправильно определяется режим xterm.
Comment 20 vx8400 2011-02-27 03:15:15 MSK
Моргает при второй перерисовке экрана. Например, после первого движения курсором.
После вызова syn_cterm_attr2entry() для всех символов в окне цвета становятся правильными. Backtrace:

          aep = syn_cterm_attr2entry(attr); at screen.c: 7271
        screen_start_highlight(attr); at screen.c: 7487
      screen_char( ...) at screen.c: 7445
    screen_puts_len(text, -1, row, col, attr); at screen.c:6694
  screen_puts(showcmd_buf, (int)Rows - 1, sc_col, 0); at normal.c:3999
 display_showcmd();  at normal.c: 3931
add_to_showcmd(typebuf.tb_buf[typebuf.tb_off at getchar.c:2762
#0  vgetorpeek (advance=1) at getchar.c:2855
#1  0x080e5921 in vgetc () at getchar.c:1557
#2  0x080e5d34 in safe_vgetc () at getchar.c:1763
#3  0x0813510a in normal_cmd (oap=0xbf93f130, toplevel=1) at normal.c:666
#4  0x080f6605 in main_loop (cmdwin=0, noexmode=0) at main.c:1260
#5  0x080f98fa in main (argc=2, argv=0xbf93f3a4) at main.c:963

syn_cterm_attr2entry() не вызывается из первого update_screen(), который рисует в xterm неправильными цветами:
http://lists.altlinux.org/pipermail/community/2011-February/669592.html

Куда вставить syn_cterm_attr2entry(), чтобы атрибуты устанавливались правильно до первого update_screen()?
Comment 21 Kirill A. Shutemov 2011-03-03 16:32:04 MSK
http://groups.google.com/group/vim_dev/msg/25a920eed6a143a9
Comment 22 Kirill A. Shutemov 2011-03-03 18:36:00 MSK
В 7.3.137 починили. Проверял на сборке от raorn@.
Comment 23 Dmitry V. Levin 2011-03-03 21:07:30 MSK
Собрал 7.3.137-alt1, можно проверить:
http://git.altlinux.org/repo/39769/
Comment 24 Repository Robot 2011-03-05 15:47:05 MSK
vim-4:7.3.137-alt1 -> sisyphus:

* Thu Mar 03 2011 Dmitry V. Levin <ldv@altlinux> 4:7.3.137-alt1
- Updated to 7.3.137 (closes: #25013).