Я создаю расширение, которое форматирует вкладки редактора по-своему, используя класс ITextParagraphPropertiesFactoryService. Все работает просто отлично, ожидайте того факта, что когда пользователь вводит новую строку, ITextParagraphPropertiesFactoryService не влияет на новую строку
Для упрощения проблемы я создаю новый проект MEF, добавляю такой провайдер формата
[Export(typeof(ITextParagraphPropertiesFactoryService))]
[ContentType("text")]
[TextViewRole(PredefinedTextViewRoles.Document)]
internal class ElasticTabstopsProvider : ITextParagraphPropertiesFactoryService
{
/// <summary>
/// Creates an ElasticTabstopsFormatters for
/// the provided configuration.
/// </summary>
public TextParagraphProperties Create(IFormattedLineSource formattedLineSource, TextFormattingRunProperties textProperties,
IMappingSpan line, IMappingPoint lineStart, int lineSegment)
{
return new TextFormattingParagraphProperties(textProperties, 1);
}
}
И он меняет ширину всех вкладок в моем редакторе на 1. Отлично! Это то, чего я хочу. Но теперь, когда я нажимаю Enter (новая строка), новый курсор устанавливается в разделе Main, однако я ожидаю, что ширина вкладки будет равна 1.
После того, как я начинаю печатать, он переходит в ожидаемую позицию.
Вопрос в том, как я могу установить размер вкладки пустой строки для новой строки? Я пытаюсь переопределить ISmartIndentProvider
, но, похоже, игнорирую это значение.
Отладчик останавливается на точке останова в методе
int? GetDesiredIndentation(ITextSnapshotLine currentLine)
из ISmartIndent
, но отступ остается неизменным независимо от того, какое значение я возвращаю...