Karagy wrote:Как только вы произносите "вырезки/вставки" в хекс-редакторе - вы автоматически начинаете говорить именно о "чудо-редакторе".
Ну значит надо два hex редактора, даже три:
- один в режиме замены/добавления в конец файла;
- второй в режиме вставки работающий с большими файлами но без отмены редактирования;
- третий на базе редактора FAR работающий с малыми файлами, но с отменой редактирования.
Говоря о "вырезки/вставке" мы говорим про поле справа
grizlyk wrote:а справа текстовое поле в режиме замены или вставки
, которое есть просто текстовый редактор работающий в маленьком окне, даже тот же редактор, что уже встроен в FAR, подойдет (но надо чтобы он упарвляющие символы выводил как обычные), только данные с этого редактора отображаются сразу двумя видами (в терминах видов), а не одним.
1.
В режиме замены/дополнения переписываются байты в буфере / добавляется в конец буфера, код редактора при этом исчисляется сотнями байт (в правом поле кнопки в виде ASCII прямо пишутся как байты (плюс режим ввода кода ctrl+q), а в левом поле цифра/буква hex преобразуется в код и выполняется команда and+or с байтом в буфере в зависимости от того верхная тетрада или нижняя), ну какие тут плагины? Такой редактор очень полезен, он очень быстрый и работает с огромными файлами.
Код взаимодействия с FAR через интерфейс плагина для такого редактора будет больше места занимать и еще и требовать от пользователя знания внутреннего устройства FAR. Почему и удивляемся. Есть VC живой пример тому, непонятно почему в FAR не стали включать такой редактор изначально.
Лучше всего такое редактирование сделать для просмотрщика FAR (т.е. нажав в редакторе F4 попадаем в "редактор - просмотр - hexeditor", и наоборот при выходе, поскольку редактор FAR разбивает файл на строки, что создает проблемы при редактировании большого файла.
2.
В режиме вставки в правом поле, если не устраивает редактор FAR у которого есть отмена и повтор, но нет работы с большими файлами, то все зависит от структуры редактора, есть готовые решения для текстовых нестрочных редакторов даже 50 летней давности. Из досовских есть pview, hview и т.д. У каждого своя схема оптимизации работы с большими файлами, это я так понимаю указанная проблема чудо-редактирования, но в двух словах их работу наверное не описать, много подробностей.
Например, файл вместо строк делится на список буферов, каждый из буферов "начало/размер", которые выделяются в памяти по потребности и редактор при отображении работает с данными в этих буферах как с одним непрерывным массивом read/write_char(offset).
При вставке в позицию имеющийся буфер разделяется в позиции вставки в списке на два (может виртуально, тогда память не перераспределяется, для работы с памятью каждый виртуальный буфер связан с блоком памяти через счетчик владельцев), между ними вставляется новый буфер редактирования (в хипе например по 4К гранулярности).
При удалении, с места удаления буфер разделяется, в нижнем буфере изменяется размер, буфер из списка не удаляется пока не исчерпается размер, память не перераспределяется пока все владельцы не удалены.
Когда накапливается множество мелких буферов и начинаются тормоза (хотя при hex редактировании такое редко случается), их можно слить опять в один командой сохранить изменения.
Отмену наверное тоже можно сделать, если подумать, сохраняя старые буфера и дублируя их при модификации. В целом не похоже на чудо редактор, там нет индента, текстового форматирования и т.п. вещей, только вставка, замена и удаление символов, среди которых нет управляющих.
3.
Хорошо, практический вопрос, пусть есть плагин 99 года hexeditor, работающий не очень хорошо с большими файлами, потому что не через вьювер, а как этот плагин повесить в редакторе FAR на кнопку F4 (сейчас там quit)? Я потыкался, но ничего не нашел как это сделать.