tmux-256color обнаружены поврежденные данные в convert_strings

Вопрос или проблема

Я использую настраиваемую запись terminfo для tmux с 2020 года. Она выглядит следующим образом:

# Запись TERMINFO для tmux-256color, добавляющая escape-последовательности для курсивного текста.
#
# Установка:
#
#   tic tmux-256color.terminfo
#
# Использование:
#
#   export TERM=tmux-256color
#
tmux-256color|tmux с 256 цветами и курсивом,
        use=screen-256color,
        sitm=\E[3m, ritm=\E[23m,
        smso=\E[7m, rmso=\E[27m,

Сегодня я скомпилировал ее, наверное, впервые за долгое время с помощью tic -x …. Теперь, когда я запускаю оболочку в tmux, я получаю (дважды) сообщение об ошибке

"/Users/<me>/.terminfo/74/tmux-256color": поврежденные данные, найденные в convert_strings

которое я проследил до этого патча (также известного как ошибка, отчет, релиз)…

…но, похоже, все работает.

У меня открыта оболочка с предыдущей версии; сравнение старого infocmp -x с новым выводом показывает (с некоторым контекстом)

*** /tmp/a  2024-10-09 18:26:49.000000000 -0400
--- /tmp/b  2024-10-09 18:26:53.000000000 -0400
***************
*** 1,7 ****
  #       Восстановлено via infocmp из файла: /Users/<me>/.terminfo/74/tmux-256color
  tmux-256color|tmux с 256 цветами и курсивом,
!         am, km, mir, msgr, xenl,
          colors#256, cols#80, it#8, lines#24, ncv#3, pairs#32767,
          acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
          bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
          clear=\E[H\E[J, cnorm=\E[34h\E[?25h, cr=^M,
--- 1,7 ----
  #       Восстановлено via infocmp из файла: /Users/<me>/.terminfo/74/tmux-256color
  tmux-256color|tmux с 256 цветами и курсивом,
!         OTbs, OTpt, am, km, mir, msgr, xenl, , ,
          colors#256, cols#80, it#8, lines#24, ncv#3, pairs#32767,
          acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
          bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
          clear=\E[H\E[J, cnorm=\E[34h\E[?25h, cr=^M,

Я не знаю, что такое OTbs, OTpt,, и дополнительные запятые выглядят странно.

Теперь, если передать неправильный infocmp -x в xxd, то видно, что запятые содержат странные байты:

00000070: 7273 2061 6e64 2069 7461 6c69 632c 0a09  rs and italic,..
00000080: 4f54 6273 2c20 4f54 7074 2c20 616d 2c20  OTbs, OTpt, am,
00000090: 6b6d 2c20 6d69 722c 206d 7367 722c 2078  km, mir, msgr, x
000000a0: 656e 6c2c 201b 2842 2c20 2c0a 0963 6f6c  enl, .(B, ,..col

В частности, .(B, , — это 201b 2842 2c20 2c….

Единственная другая запись terminfo для tmux-256color, которую я имею на этой системе, — это запись из установленного через brew ncurses, версии 6.5, и file говорит, что это 32-битная запись. Мой infocmp не может ее прочитать, а копирование ее в ~/.terminfo/… делает так, что и другие программы (например, Vim) перестают понимать информацию о терминале.

Запись screen-256color основана на /usr/share/terminfo/73/screen-256color (комментарий “GNU Screen с 256 цветами”), и она также показывает как странные байты, так и странные OTbs, OTpt, в выводе infocmp -x как в старых, так и в новых оболочках. Я не трогал этот файл, насколько мне известно.

Странно, но изменение строки set -g default-terminal на screen-256color и затем запуск нового сервера с tmux -L test new показывает без ошибок. Тем не менее infocmp -x по-прежнему показывает странные байты и OTbs, OTpt,.

Мой эмулятор терминала — Alacritty 0.13.2, и я в настоящее время использую tmux 3.4. Операционная система — macOS 12.7.2.

Итог

Что пошло не так и как это исправить?

Ответ или решение

Судя по вашему описанию, проблема с ошибкой "corrupt data found in convert_strings" в tmux-256color возникает из-за изменения в формате терминофайлов в результате патча. Похоже, что ваш пользовательский терминофайл становится несовместимым с текущей версией ncurses, установленной на вашей системе.

Вот шаги, которые вы можете предпринять для решения проблемы:

  1. Проверьте совместимость: Убедитесь, что ваш пользовательский терминофайл tmux-256color.terminfo соответствует ожиданиям текущей версии ncurses. Возможно, вам потребуется обновить его, чтобы исключить новые поля или параметры, которые могли быть добавлены в недавних версиях.

  2. Исправьте терминофайл: Возможно, вам нужно будет внести изменения в tmux-256color.terminfo. Можете попробовать удалить или заменить строки, которые вызывают конфликты или ошибки. Например, удаление нетрадиционных параметров (таких как OTbs, OTpt), если они становятся причины проблем. Например, ваш терминофайл может выглядеть как-то так:

    tmux-256color|tmux with 256 colors and italic,
            use=screen-256color,
            sitm=\E[3m, ritm=\E[23m,
            smso=\E[7m, rmso=\E[27m,
            am, km, mir, msgr, xenl,
            colors#256, cols#80, it#8, lines#24, ncv#3, pairs#32767,
            acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
            bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
            clear=\E[H\E[J, cnorm=\E[34h\E[?25h, cr=^M,
  3. Сгенерируйте новый терминофайл: После внесения изменений с помощью tic -x может потребоваться пересоздать ваш терминофайл. Пример команды:

    tic -x tmux-256color.terminfo
  4. Очистите кеш терминалов: Если ваша система использует кеш для терминофайлов, возможно, вам придется очистить его или пересоздать его заново. Это можно сделать, удалив каталог, где он хранится. Например, для вашего пользователя:

    rm -rf ~/.terminfo
  5. Проверка после изменений: После выполнения этих шагов вы можете запустить infocmp tmux-256color и обратить внимание на вывод. Убедитесь, что он не содержит ошибок и лишних символов.

  6. Файлы терминалов из brew: Если вы продолжаете сталкиваться с конфликтами, убедитесь, что вы не имеете конфликтующих терминофайлов, поставляемых с brew. Вы можете попробовать удалить их или адаптировать, если они вызывают проблему.

Если эти шаги не помогут, вы можете рассмотреть возможность использования стандартного терминофайла без ваших модификаций, пока вы решаете проблему с совместимостью.

Если у вас есть дополнительные вопросы или нужны разъяснения по какому-либо из шагов, не стесняйтесь спрашивать!

Оцените материал
Добавить комментарий

Капча загружается...