Экранированные тильды в новом текстовом редакторе работают с ошибками

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

Экранированный ` также вызывает проблемы.

Скопируйте и вставьте следующее в редактор с поддержкой форматирования, чтобы воспроизвести проблему:

Specifically, if I have some text that `` uses a ` (tilde) `` like this,
then pressing the <kbd>\`</kbd> key again later in the same paragraph
causes the inline code span to toggle about.

The escaped \` is also problematic.
1 лайк

Это сложный момент: \ на самом деле не имеет какой-либо особой семантики, насколько я могу судить, он просто преобразуется из \ в \\ в процессе кругового цикла.

@renato, возможно, у вас есть какие-то идеи по этому поводу, интересный крайний случай.

1 лайк

Это должно быть исправлено сейчас. Вы всё ещё можете воспроизвести эту проблему, запустив latest (например, на Meta/Try)?

2 лайка
` всё ещё ведёт себя немного странно для меня. В частности, ` превращается в \`, а затем, когда вы добавляете лишний `, всё закрывается.

Кажется, это действительно сложная задача, которую нужно решить полностью.

Извините, я вас не понимаю. \\ не должен экранировать его при вводе напрямую в визуальном редакторе.

В Markdown введите

\`hello

Затем переключитесь на богатый режим и введите

` 

Это создаст блок кода, и технически он должен отобразиться как

`hello`

2 лайка

Это работает как задумано: экранирование теряется при парсинге (при переключении из Markdown в форматированный текст), и это ожидаемое поведение, так как экранирование с помощью \ — это концепция Markdown/кода.

Поддерживаемый способ экранирования в режиме визуального редактора — использование backspace после срабатывания правила ввода: `как здесь`.

1 лайк

А, понял, спасибо за разъяснение

1 лайк

Да, это немного лучше, но всё ещё невозможно написать любой встроенный код, содержащий символ `, без каких-либо манипуляций после первой ошибки. Невозможно заранее использовать более одного символа `. Ввод того, что указано выше в теге `, или экранированного кода, который его создаёт (<kbd>\`</kbd>), — это идеальные примеры того, что практически невозможно сделать в режиме WYSIWYG, даже с манипуляциями.

Я понимаю, что можно использовать Backspace, чтобы отменить форматирование и неявно «экранировать» его, но мне трудно предсказать, когда форматирование применится. Например, `4*5*6` вводится естественно, если сразу перед ним стоит открытый символ `, но это не всегда так. 4*5*6=120 вводится хорошо, а 120=456 — нет (пятёрка там временно стала курсивом).

Что вы предлагаете делать в этих конкретных случаях? Есть ли у вас пример другого продукта, который решает эту задачу так, что мы могли бы почерпнуть вдохновение?

Вы можете ввести `, выделить его, а затем ввести ` или нажать cmd+E, чтобы переключить его в формат встроенной разметки.

Вы можете нажать cmd+E, а затем ввести `. Вы можете использовать cmd+E для переключения кодовой разметки для следующего вводимого символа, точно так же, как вы делаете это с cmd+B для жирного шрифта или cmd+I для курсива.

Правило ввода <kbd> автоматически выделяет пустой символ (чтобы браузер не удалял пустой узел автоматически), поэтому вам нужно сначала снять выделение (поскольку в данном случае нажатие ` создаёт встроенную разметку для выделения — хотя мы потенциально можем убрать это поведение, так как для этого есть cmd+E).

Я понимаю, что это может быть неидеально, но это компромиссы, обусловленные всеми особенностями Discourse. Мы открыты для предложений, если вы поделитесь тем, как, по вашему мнению, это должно работать.

Что ж, я создал эту тему, когда казалось, что включение WYSIWYG-редактора сделает моноширинным и редактор Markdown (см. Monospace font in the Markdown-only editor - #58 by mbauman). Я очень рад, что это больше не так и теперь это можно настроить, потому что, да, я никогда не встречал WYSIWYG-редактор Markdown, который мне нравился. Хотя сейчас уже почти дошли до этого. :slight_smile:

Я пишу очень много Markdown в очень многих текстовых полях (как в отрендеренном, так и в неотрендеренном виде… до того, что я почти считаю неотрендеренный Markdown «отформатированным»), и знаю, что я довольно редкий случай. Тем не менее, я считаю, что существует группа таких редких случаев, и мы обычно собираемся в контексте форумов по языкам программирования.

Самое ценное — сделать автоформатирование максимально предсказуемым, чтобы я мог понять, когда нужно нажать Backspace, но, по моему опыту, этому довольно сложно научиться.