Как нарисовать непрерывную линию в терминале?

В Vim 8 добавлена ​​поддержка «вставки в квадратных скобках» (, при которой терминал заключает вставленный текст в escape-коды, которые указывают vim, что текст является вставкой, а не набранной строкой; см. Патч 8.0.0210). Похоже, что поведение по умолчанию — автоматически включать режим вставки перед принятием вставленного текста.

Вы можете отключить вставку в квадратных скобках и вернуться к старому поведению, добавив set t_BE=в свой файл vimrc.

0
31.12.2019, 19:14
4 ответа

У меня не установлено tree, но я получаю тот же эффект от cfdisk. Я вставил вывод из cfdisk в восьмеричный дамп od (). Эти символы — всего лишь мультибайты из моей локали, то есть LANG=en_GB.UTF-8.

Это вертикальная черта с ответвлением вправо, за которой следует горизонтальная непрерывная линия :342 224 234 342 224 200

Это нижний/правый угол, за которым следует такая же горизонталь :342 224 224 342 224 200

Перейти по этому URL-адресу:

www.ltg.ed.ac.uk/~richard/utf-8.cgi

и введите восьмеричное число 342 224 224

Или здесь:

www.obliquity.com/computer/html/unicode2500.html

Вам потребуется Google для «преобразовать кодовую точку Unicode в UTF -8».

Также попробуйте:echo -e '\0342\0224\0234\0342\0224\0200'

1
28.01.2020, 02:13

Он просто использует uni -кодовые символы :Unicode содержит примерно 2^24 символа. Он включает ASCII в качестве первых 128 символов, а затем включает символы всех языков (, включая математические ), в том числе некоторые вымышленные символы, символы рисования, смайлики и многое другое.

Вы можете искать символы в uni -коде символов рисования (, например. https://en.wikipedia.org/wiki/Box-drawing_character#Unicode), или просто скопируйте из примера.

Вот те же персонажи. На этом сайте они также не отображаются (, вероятно, шрифт ). Однако это один и тот же текст. Если вы вставите обратно в терминал, он будет выглядеть так же.

├── media
│   ├── cdrom
│   ├── other

Другие ответы дают альтернативный способ сделать это. Я не знаю плюсов и минусов каждого. Было бы неплохо их услышать.

2
28.01.2020, 02:13

Хотя другие ответы уже указывали вам на символы рисования прямоугольников, вы должны быть осторожны, используя жестко закодированные последовательности терминалов в своем приложении самостоятельно, как указано в этих ответах. Обратите внимание, что могут быть терминалы, которые просто не понимают эти последовательности и вместо этого будут выводить какую-то чепуху.

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

Если вы все еще хотите сделать это самостоятельно и без помощи терминальной базы данных, такой как libterminfo, у вас есть следующие возможности:

  • посмотрите, поддерживает ли терминал, к которому вы хотите обратиться, все последовательности + символы для отправки (, если нет, найдите замену ), повторите это для каждого терминала, который вы хотите поддерживать
  • если ваш целевой терминал (s )поддерживает Unicode (UTF -8 )вам может сойти с рук прямая вставка соответствующих символов Unicode (проверить, правильно ли отображается отправка U+2500)
0
28.01.2020, 02:13

Требуется специальное поле -для рисования символов, как прокомментировал другой пользователь. В терминале их можно вызвать командой printf. Например, чтобы воссоздать первые две строки примера treeв вопросе, это будет выглядеть так:

printf "\x1b(0\x74\x1b(B\x1b(0\x71\x1b(B\x1b(0\x71\x1b(B info\n"
printf "\x1b(0\x78\x1b(B   \x1b(0\x6d\x1b(B\x1b(0\x71\x1b(B\x1b(0\x71\x1b(B exclude\n"

Для списка символов рисования окна -,см. страницу википедии .

4
28.01.2020, 02:13

Теги

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