Значки переключателя вкладок размыты (Linux mint)

Здесь важно отметить тег вопроса. Это поведение характерно для терминала GNOME и любых других эмуляторов терминала, созданных на основе libvte. Вы не увидите этого ни в Xterm, ни в Unicode RXVT, ни в эмуляторе терминала, встроенном в ядро ​​Linux, ни в консоли FreeBSD.

В общем происходит вот что.

  1. Команда clearпросматривает terminfo/termcap и выдает соответствующие управляющие последовательности.
    1. Если запись terminfo/termcap имеет возможность E3it, она сначала записывает ее. Это выдает управляющие последовательности для очистки буфера прокрутки. Это и история, стоящая за этим, подробно задокументированы в странице руководства Dickey ncurses для команды clear.
    2. Затем он использует возможность clearдля очистки видимого экрана.
  2. Управляющие последовательности в записи terminfo/termcap определяются типом терминала; но, за исключением (редко встречающихся в настоящее время )терминалов, которые используют FormFeed для очистки экрана (, которых нет у DEC VT и их имитаторов ), они либо просто старые ECMA -48 последовательности или расширения к ним. Например :
    • Запись puttyопределяет E3=\E[3J, которая является управляющей последовательностью расширения Xterm.
    • Запись pcvtxxконсоли NetBSD является одной из многих, определяющих clear=\E[H\E[Jили что-то подобное.Это две обычные управляющие последовательности ECMA -48.
  3. Эмулятор терминала воздействует на управляющие последовательности. Согласно определению ECMA -48 и его расширению Xterm :
    • CSIH(CUP )устанавливает курсор в исходное положение.
    • CSI0J(ED 0 )или просто CSI Jстирает от текущей позиции курсора до конца экрана.
    • CSI2J(ED 2 )стирает весь экран.
    • CSI3J(ED 3 )стирает буфер прокрутки.

Что касается терминала GNOME, в частности:

  1. Тип терминала правильный gnome, но некоторые люди ошибочно оставляют его равным xterm.
  2. Запись gnometerminfo не определяет возможность E3, и на многих системах — до сих пор! - то же самое относится и к записи xterm, поскольку она не просочилась из Dickey terminfo . Итак, clearпросто записывает содержимое возможности clear.
  3. Содержимое возможности clearдля этих записей terminfo представляет собой управляющие последовательности для возврата курсора в исходное положение с последующим стиранием всего экрана.
  4. Но терминал GNOME не реализует правильную очистку всего экрана. В частности, библиотека, на которой он основан, libvte, не делает этого в коде своей VteTerminalPrivate::seq_clear_screen()функции . Вместо этого libvte прокручивает экран вниз на пустые строки всего экрана и перемещает позицию курсора на первую из этих пустых строк.

Вот почему вы видите то, что видите. libvte не стирает весь экран, когда ему говорят. Скорее, он делает что-то, что имеет внешнее сходство с этим, до тех пор, пока вы не сделаете в точности то, что здесь сделал вопрошающий :прокрутите окно терминала назад, чтобы посмотреть на буфер прокрутки назад. Тогда разница очевидна.

На других эмуляторах терминала, таких как Xterm и Unicode RXVT,управляющая последовательность ED 2 действительно стирает экран, стирая каждую позицию на экране сверху вниз и не изменяя буфер прокрутки. Но в эмуляторах терминала libvte он просто подталкивает текущий экран вверх в буфер прокрутки и добавляет пустые строки на один экран. Предыдущее содержимое экрана не стирается, а перемещается в буфер обратной прокрутки.

И если вы запустите команду clearдважды, она добавит два пустых строки на экране. Если ваш буфер обратной прокрутки достаточно велик, вы все еще можете найти исходное содержимое экрана, просто выше в буфере прокрутки.

Дополнительная литература

1
22.12.2015, 07:58
1 ответ

У меня была похожая проблема со значком PyCharm.

Если вы создали свой собственный лаунчер для файла приложения(.desktopв ~/.local/share/applications), вам необходимо убедиться, что у вас установлен правильный атрибут StartupWMClass.

Чтобы найти правильное значение, запустите приложение, затем откройте терминал и запустите xprop WM_CLASSи щелкните окно приложения. Убедитесь, что значение из терминала соответствует StartupWMClassв вашей программе запуска. Перезапустите приложение,и вы должны увидеть правильный значок.

0
05.11.2020, 07:53

Теги

Похожие вопросы