Просмотрщик изображений с меньшим стилем для систем UNIX

У меня есть строка Markdown в JavaScript, и я бы хотел ее отобразить (с полужирным шрифтом и т.д.) в средстве просмотра less (или, я полагаю, more) для командной строки.

Например, со строкой

"hello\n" + 
"_____\n" + 
"*world*!"

Я хотел бы, чтобы выход всплывал с прокручиваемым контентом, который выглядит как

привет

мир

Возможно ли это, и если да, то как?

Ответ 1

Pandoc может конвертировать Markdown в страницы man groff.

Это (спасибо комментарию nenopera):

 pandoc -s -f markdown -t man foo.md | man -l -

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

Там могут быть другие конвертеры markdown-to-* roff; Пердок, как оказалось, оказался первым, что я нашел.

Другой альтернативой является команда markdown (apt-get install markdown в системах Debian), которая преобразует Markdown в HTML. Например:

markdown README.md | lynx -stdin

(при условии, что у вас есть веб-браузер на основе терминалов lynx).

Или (благодаря предложению Дэнни) вы можете сделать что-то вроде этого:

markdown README.md > README.html && xdg-open README.html

где xdg-open (в некоторых системах) открывает указанный файл или URL в предпочтительном приложении. Вероятно, это откроет README.html в вашем предпочтительном веб-браузере с графическим интерфейсом (который не совсем "менее стильный", но может оказаться полезным).

Ответ 2

Я попытался написать это в комментарии выше, но я не мог правильно отформатировать блок кода. Чтобы написать "меньше фильтра", попробуйте, например, сохранить следующее как ~/.lessfilter:

#!/bin/sh

case "$1" in
    *.md)
        extension-handler "$1"
        pandoc -s -f markdown -t man "$1"|groff -T utf8 -man -
        ;;
    *)
        # We don't handle this format.
        exit 1
esac

# No further processing by lesspipe necessary
exit 0

Затем вы можете ввести less FILENAME.md, и он будет отформатирован как man-страница.

Ответ 3

Если вы находитесь в цвета, то, возможно, это тоже стоит проверить:

terminal_markdown_viewer

1.png

Его можно использовать прямо из других программ или модулей python.

И у него много стилей, например, более 200 для уценки и кода, которые можно объединить.

pic2

Отказ

  • Это довольно альфа, могут быть все еще ошибки

  • Я автор этого, может быть, некоторым нравится: -)

Ответ 4

Совершенно другая альтернатива mad. Это оболочка script, которую я только что обнаружил. Он очень прост в установке, и он отлично отображает уценку в консоли.

Ответ 5

Я написал пару функций на основе Ответ Keith:

mdt() {
    markdown "$*" | lynx -stdin
}

mdb() {
    local TMPFILE=$(mktemp)
    markdown "$*" > $TMPFILE && ( xdg-open $TMPFILE > /dev/null 2>&1 & )
}

Если вы используете zsh, просто поместите эти две функции в ~/.zshrc, а затем вызовите их из своего терминала, например

mdt README.md
mdb README.md

"t" для "терминала", "b" - для браузера.

Ответ 6

Я лично использую этот script:

#!/bin/bash
id=$(uuidgen | cut -c -8)
markdown $1 > /tmp/md-$id
google-chrome --app=file:///tmp/md-$id

Он отображает уценку в HTML, помещает ее в файл в /tmp/md-... и открывает ее в сеансе chrome kiosk без панели URI и т.д. Вы просто передаете файл md в качестве аргумента или передаете его в stdin. Требуется уценка и Google Chrome. Хром также должен работать, но вам нужно заменить последнюю строку

chromium-browser --app=file:///tmp/md-$id

Если вы хотите получить представление об этом, вы можете использовать некоторый css, чтобы он выглядел хорошо, я отредактировал script и сделал его использование Bootstrap3 (overkill) из CDN.

#!/bin/bash
id=$(uuidgen | cut -c -8)
markdown $1 > /tmp/md-$id
sed -i "1i <html><head><style>body{padding:24px;}</style><link rel=\"stylesheet\" type=\"text/css\" href=\"http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css\"></head><body>" /tmp/md-$id
echo "</body>" >> /tmp/md-$id
google-chrome --app=file:///tmp/md-$id > /dev/null 2>&1 &

Ответ 8

Это псевдоним, который инкапсулирует функцию:

alias mdless='_mdless() { if [ -n "$1" ] ; then if [ -f "$1" ] ; then cat <(echo ".TH $1 7 `date --iso-8601` Dr.Beco Markdown") <(pandoc -t man $1) | groff -K utf8 -t -T utf8 -man 2>/dev/null | less ; fi ; fi ;}; _mdless '

Описание

  • alias mdless='...': создает псевдоним для mdless
  • _mdless() {...};: создает временную функцию, которая будет вызвана впоследствии
  • _mdless: в конце вызовите его (функция выше)

Внутри функции:

  • if [ -n "$1" ] ; then: если первый аргумент не равен нулю, тогда...
  • if [ -f "$1" ] ; then: также, если файл существует и является регулярным, тогда...
  • cat arg1 arg2 | groff...: cat отправляет эти два аргумента, конкатенированные с groff; аргументы:
    • arg1: <(echo ".TH $1 7 date --iso-8601 Dr.Beco Markdown"): что-то, что запускает файл, и groff будет понимать как примечания верхнего и нижнего колонтитула. Это заменяет пустой заголовок с -s на pandoc.
    • arg2: <(pandoc -t man $1): сам файл, отфильтрованный pandoc, выводящий стиль man файла $1
  • | groff -K utf8 -t -T utf8 -man 2>/dev/null: конкатенация полученного конкатенированного файла в groff:
    • -K utf8 поэтому groff понимает код входного файла
    • -t, чтобы он отображал правильные таблицы в файле
    • -T utf8, чтобы он выводил в правильном формате
    • -man, поэтому он использует пакет MACRO для вывода файла в формате man
    • 2>/dev/null игнорировать ошибки (в конце концов, его необработанный файл трансформируется человеком вручную, нам все равно, если мы увидим этот файл в не очень-уродливом формате).
  • | less: наконец, показывает файл с разбивкой на страницы с помощью less (я пытался избежать этого канала, используя groffer вместо groff, но groffer не так прочен, как less и некоторые файлы зависают или вообще не отображаются. Итак, пусть это пройдет через еще один канал, что за черт!

Добавьте его в свой ~/.bash_aliases (или похожий)

Ответ 9

Я отправлю мой unix page answer здесь:

IMHO сильно недооценил просмотрщик уценки командной строки markdown-cli.

Установка

npm install markdown-cli --global

Использование

markdown-cli <file>

Функции

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

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

Снимок экрана

example.png

Недостатки

Я понял следующие проблемы

  • кодовые блоки сплющены (все ведущие пробелы исчезают)
  • перед списками появляются две пустые строки.