Понадобилось мне преобразовать табуляции в пробелы в некоем файлике. Можно было, конечно, поиском с заменой по регуляркам или даже символ табуляции в поле поиска вставить. Но вспомнил, что есть такая опция редактора: преобразовывать все пробелы в табы. Наряду с не преобразовывать и преобразовывать только новые. Применил. И оказалось, что опция прекрасно превращает табы в пробелы, но при этом не происходит признака изменения файла. Если нажать Esc, то файл закроется без вопросов и не сохранившись. Если нажать Ctrl+Z, то ничего не случится. Если редактировал большой файл, а потом сдуру применил эту опцию, то откатить её последствия можно только не сохраняя файл.
Сейчас вот проверил, создал файл, вписал в него чего-то, вставил пару табов, переключил опцию на полное преобразование, потом переключил на не преобразовывать, попробовал Ctrl+Z, и оказалось, что редактор ведёт себя так, словно табов в файле сроду не было. Т.е. откатывает изменения в словах, но там, где вставлялись табы, откатывается так, словно вставлялись пробелы.
Я считаю, что это неправильно. Содержимое файла при включении этой опции меняется, значит надо эти изменения записывать в стек undo/redo и признак изменения файла.
Конечно, при этом есть проблема, что откатывать бесполезно, если эта опция всё ещё включена, но тут можно что-нибудь придумать. Например, применять эту опцию и сразу же автоматически переставлять её в положение только новые табы в пробелы. Или уведомлять пользователя, что, мол, следующий откат делать бесполезно пока не поменяешь опцию.
FAR 5400 x64.
P.s. Переключение этой опции у меня с древних времён забито в пользовательское меню в виде скрипта:
Code: Select all
lua: Option = 1; Value = 0; V = Editor.Set(Option, Value);