View Issue Details

IDProjectCategoryView StatusLast Update
0003383WishesEditorpublic2018-11-15 08:26
Reporterandreyefgs Assigned To 
PrioritynormalSeverityminorReproducibilityalways
Status newResolutionopen 
Platformx64OSWindowsOS Version10
Product Version3.0 
Summary0003383: Управление приоритетами автодетекта при открытии файла в редакторе
DescriptionХотелось бы иметь в настройках редактора иметь опцию "Save file codepage"
Такая опция есть в настройках вьюера.
Это нужно для того, чтобы была возможность отключить запоминание кодировки для редактора, сейчас она запоминается.
В результате если перекодировать файл внешней программой (не изменяя имя) и повторно открыть файл редакторе FAR-а, то будет использована неверная кодировка (предыдущая).
И это происходит несмотря на включение "Autodetect code page" и наличие BOM.
Steps To Reproduce1)Создать текстовой файл в кодировке UTF-8 с BOM с любым контентом.
2)Открыть этот файл используя внутренний редактор FAR-а. Закрыть.
3)Перекодировать файл используя внешнюю программу (notepade++, к примеру) в UTF-16LE c BOM.
4)Снова открыть файл во внутреннем редакторе.
Будет использована неверная кодировка.
TagsNo tags attached.
Build

Relationships

related to 0003542 new Умное восстановение позиции при переоткрытии файла в другой кодировке 

Activities

shmuel

2017-01-17 14:33

developer   bugnote:0015164

Можно и без опции - просто давать BOM'у приоритет перед запомненной кодовой страницей.
Мне это кажется вполне логичным.

2useven10

2017-01-17 15:45

developer   bugnote:0015165

Last edited: 2017-01-17 15:47

> Мне это кажется вполне логичным.
>
А мне нет. Файлы бывают разные, например с мешаниной из кодовых страниц.
Если я задал запоминание позиции(+неявно кодировки), никакой ИИ не должен вмешиваться.
Разве что отдельной опцией для разрешения именно такого поведения.

Изначальная опция отказа от сохранения только кодовой страницы в редакторе
тоже сомнительна, поскольку кодовая страница для редакторв влияет
на отображение сохранённой позиции в редакторе, они НЕ независимы.
А если позицию не сохранять, то и сохранения кодировки не должно быть уже сейчас.

shmuel

2017-01-17 15:54

developer   bugnote:0015166

Для файла с мешаниной кодовых страниц BOM - это ошибка, его надо просто убрать. Такие файлы бывают, да, но как правило без BOM.

Я иногда могу поиграться в редакторе с выбором кодовых страниц, затем выхожу по Esc, при этом запоминается последняя выбранная, независимо от того, верна она или нет.

Практически всегда наличие BOM позволяет правильно определить кодировку. Для того BOM и был придуман. Всё остальное - от лукавого.

DrKnS

2017-01-17 16:01

administrator   bugnote:0015167

> кодовая страница для редакторв влияет на отображение сохранённой позиции в редакторе, они НЕ независимы

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

2useven10

2017-01-17 19:20

developer   bugnote:0015168

> Всё остальное - от лукавого.
>
Пример приведён, а излишняя категоричность для меня только верный признак
отсутствия аргументов.

> Позиция - это абсолютные координаты, строка и колонка
>
Позиция это место в файле/документе, а не 2 числа в неопределённых координатах.

> на какую букву они там лягут при смене кодировки - дело десятое.
>
На вкус и цвет приоритеты разные.

shmuel

2017-01-17 19:31

developer   bugnote:0015169

Пример приведён, а излишняя категоричность для меня только верный признак
отсутствия аргументов.

2useven10
Аргумент один - практическая целесообразность. Мне нынешний порядок приоритетов мешает. Я просто хочу, чтобы BOM имел главный приоритет у меня - никакие умные доводы, что это неправильно, меня просто не интересуют.

Сегодня написал макрос, обеспечивающий нужное мне поведение. Так что свои интересы обеспечил.

2useven10

2017-01-17 19:58

developer   bugnote:0015170

Я совсем не против возможности задания приоритетов.
Я против необратимого их изменения.

shmuel

2017-01-17 20:03

developer   bugnote:0015171

Вот и отлично. Пусть будет опция, и все будут довольны. :)

DrKnS

2017-01-17 20:22

administrator   bugnote:0015172

>> Позиция - это абсолютные координаты, строка и колонка
>>
> Позиция это место в файле/документе, а не 2 числа в неопределённых координатах.

"место в файле/документе" - это свой парсер/лексер/токенайзер надо иметь и запоминать весь контекст.

А то мало ли - враги откроют ваш файл блокнотом, допишут что-то в начало и всё поедет даже без смены кодировки.

2useven10

2017-01-17 20:47

developer   bugnote:0015173

Last edited: 2017-01-17 20:50

> А то мало ли - враги ...
>
Я предлагаю ограничить всемогущество врагов.
Допустим они не могут портить документ, когда я с ним работаю (выдергивать из под меня стул, ...).
Всё что могли они уже сделали, когда создавали документ, например (опять),
В одной строке документа чередуется текст 1251 и utf-8.
Моё скромное желание - перекючаясь между кодировками, оставаться в том же месте редактируемого файла,
а не отправляться в экспедицию на поиски курсора контекста.

DrKnS

2017-01-17 21:22

administrator   bugnote:0015174

> Моё скромное желание - перекючаясь между кодировками, оставаться в том же месте редактируемого файла

Я может упускаю что-то, но сейчас, например, если курсор стоял в третьей строке / пятой колонке, то куда ни переключайся, он там и останется, не?

2useven10

2017-01-18 08:49

developer   bugnote:0015175

> то куда ни переключайся, он там и останется, не?
>
Точно. Я как раз об этом.
Это неправильное (imho) поведение, демонстрирующее
ущербность абсолютизации бесконтекстных координат.

DrKnS

2017-01-18 10:07

administrator   bugnote:0015176

Т. е. если мы начнем сохранять их раздельно, то ничего не "поломается", т. к. и так "поломано", я правильно понимаю?

Можно заодно пример правильного поведения?
Если у нас курсор в утф8-файле стоял на букве ы в строке "пыво" и мы переключились в 1251, получив 8 непонятных закорючек, то где он должен оказаться?

2useven10

2017-01-18 10:16

developer   bugnote:0015177

1) поломаем ещё в одном месте.

2) курсор должен оказаться на первом из двух символов, в которые превратилась буква ы.
пыво

shmuel

2017-01-18 11:06

developer   bugnote:0015178

Полагаю, что работа с файлами, содержащими текст в разных кодировках, сама по себе является исключением из правил. Я бы такие файлы использовал исключительно для переноса их кусков в другие, скажем так, "нормальные" файлы. Поэтому не вижу смысла городить огород с "умным" сохранением позиции. (Just my 2 cents).

DrKnS

2017-01-18 11:20

administrator   bugnote:0015179

> курсор должен оказаться на первом из двух символов, в которые превратилась буква ы

Я не очень понимаю, как это реализовать без сохранения в истории куска текста от начала строки до позиции курсора, и согласен со shmuel что это является весьма нетипичным сценарием (для которых мы традиционно рекомендуем "пишите плагин").

andreyefgs

2017-01-18 11:34

reporter   bugnote:0015180

По поводу позиции.
Сейчас происходит так:


Обратите внимание где курсор.
Первая картинка - utf-8__bom, 2 - utf-16le_bom

И кстати, как вам такая идея:
1)кодировку запоминается всегда.
2)Но если запомненная кодировка конфликтует с BOM (utf-16le vs EFBBBF или utf-8 vs FEFF), то приоритет отдавать BOM и не производить переход на сохранённую позицию если в настройках включена опция "Save file position" для редактора.
3)Если конфликта нет, то делать как и прежде.

2useven10

2017-01-18 11:48

developer   bugnote:0015181

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

Вообще здесь это скорее уже отклонение от темы.
Желаемое поведение для автора тикета, достигается управлением приоритетами автодетекта.
При этом ничего не будет сломано.

DrKnS

2017-01-18 11:55

administrator   bugnote:0015182

Хотя да, имея сохраненную кодировку и позицию, при несовпадении выбранной кодировки с сохранённой пересчитать позицию вполне возможно.

2useven10

2017-01-18 12:02

developer   bugnote:0015183

Мне кажется логичным дать возможность выбора из 2-х вариантов приоритета:
как сейчас = [Saved] -> BOM -> IsUnicode -> UCD -> Default
и новым = BOM -> IsUnicode -> UCD -> [Saved] -> Default
при желании вариантов можно сделать больше...

shmuel

2017-01-18 12:51

developer   bugnote:0015184

> при желании вариантов можно сделать больше...

Если делать через far:config, то легко (одним параметром-строкой) можно задавать любой из 24=4! вариантов, обозначив каждый из них буквой. Вышеприведенные 2 варианта будут выглядеть соответственно как "SBIU" и "BIUS". В хелпе описать значение этих букв. (Мысли вслух).

JohnDoe

2017-10-30 19:38

updater   bugnote:0015774

Вообще здесь это скорее уже отклонение от темы.

2useven10
Создал отдельно
0003542.
Исправьте описание, если что не так.

Issue History

Date Modified Username Field Change
2017-01-17 14:23 andreyefgs New Issue
2017-01-17 14:33 shmuel Note Added: 0015164
2017-01-17 15:45 2useven10 Note Added: 0015165
2017-01-17 15:46 2useven10 Note Edited: 0015165
2017-01-17 15:47 2useven10 Note Edited: 0015165
2017-01-17 15:54 shmuel Note Added: 0015166
2017-01-17 16:01 DrKnS Note Added: 0015167
2017-01-17 19:20 2useven10 Note Added: 0015168
2017-01-17 19:31 shmuel Note Added: 0015169
2017-01-17 19:58 2useven10 Note Added: 0015170
2017-01-17 20:03 shmuel Note Added: 0015171
2017-01-17 20:22 DrKnS Note Added: 0015172
2017-01-17 20:47 2useven10 Note Added: 0015173
2017-01-17 20:50 2useven10 Note Edited: 0015173
2017-01-17 21:22 DrKnS Note Added: 0015174
2017-01-18 08:49 2useven10 Note Added: 0015175
2017-01-18 10:07 DrKnS Note Added: 0015176
2017-01-18 10:16 2useven10 Note Added: 0015177
2017-01-18 11:06 shmuel Note Added: 0015178
2017-01-18 11:20 DrKnS Note Added: 0015179
2017-01-18 11:34 andreyefgs Note Added: 0015180
2017-01-18 11:48 2useven10 Note Added: 0015181
2017-01-18 11:55 DrKnS Note Added: 0015182
2017-01-18 12:02 2useven10 Note Added: 0015183
2017-01-18 12:51 shmuel Note Added: 0015184
2017-10-30 19:19 JohnDoe Summary "Save file codepage" для редактора => Управление приоритетами автодетекта при открытии файла в редакторе
2017-10-30 19:38 JohnDoe Note Added: 0015774
2018-11-15 08:26 JohnDoe Relationship added related to 0003542