Редакторное событие сохранения файла?

Место, где разработчики плагинов могут поделиться своим опытом.
Post Reply
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Редакторное событие сохранения файла?

Post by citRiks »

Как насчет добавить редакторное событие сохранения файла?
в котором сохранение файла "как обычно" редактором может быть замещено пользовательским кодом/операцией.
Сделать это по аналогии с другими евентами, например,
как мне кажется что ConsoleInput event довольно близок по задаче и функционалу.

Use case.
Мы сидим в редакторе, делаем там например всякие кустарные фолдинги и враппинги,
и строки в результате представляют собой не то что должно сохранится в файл.
Если бы был такой евент сохранение, то можно было бы восстановить нужный порядок.
Перехватывать F2 не получится, потому что, например, есть еще и неперехватываемый editor.SaveFile().

Если будет интерес, то приведу более подробно желаемый функционал в Луа-коде.
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 times
Contact:

Редакторное событие сохранения файла?

Post by buniak_a_h »

Если Вы пользуетесь моими скриптами "в помощь макрописцам" в комплекте с Active Help, то найдите far.Flags.EE_SAVE и нажмите Ctrl+F1. Это - событие (из энциклопедии): Отредактированный файл собираются сохранять. Увы, передаётся таблица EditorSaveFile, в которой есть кодовая страница, но нет флажка BOM. Забыли, видимо…
В описании флага почему-то написано:
Функция ProcessEditorEventW должна вернуть 0.
Я ещё не пробовал, но по логике там должно быть нечто типа "можно/низзя сохранять"
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Редакторное событие сохранения файла?

Post by NightRoman »

Из энц., хотя и неявно, следует, что нельзя отменить сохранить файла. Хорошо, если это не так, тогда энц. должна бы это явно отметить.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Редакторное событие сохранения файла?

Post by NightRoman »

Есть похожий тикет -- https://bugs.farmanager.com/view.php?id=465
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 times
Contact:

Редакторное событие сохранения файла?

Post by buniak_a_h »

NightRoman, citRiks!
Проверил. Отменить, увы, нельзя. В описании export.ProcessEditorEvent написано:
Returns:
result: integer
Увы. по-моему, от result ничего не зависит.
Но, короче, событие такое есть.
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 times
Contact:

Редакторное событие сохранения файла?

Post by buniak_a_h »

NightRoman wrote: Fri 18 Sep, 2020 07:31 Есть похожий тикет -- https://bugs.farmanager.com/view.php?id=465
Тикет, вроде, о другом, но там упомянута некая зависимость от результата обработки события EE_SAVE. Хотя весь тикет относится только к редактирования не-файла (а массива строк), и в зависимости от результата обработки события EE_SAVE только очищается или нет флаг Changed.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Редакторное событие сохранения файла?

Post by NightRoman »

Тикет похожий. В случае со сверткой свернутое представление не нуждается в физическом файле на диске, так ведь?
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Редакторное событие сохранения файла?

Post by citRiks »

NightRoman wrote: Fri 18 Sep, 2020 07:46 Тикет похожий. В случае со сверткой свернутое представление не нуждается в физическом файле на диске, так ведь?
Да, основный смысл не получить событие от обработки которого ничего не зависит, а отменить сохранение, и сделать свое сохранение.
что же касается "не нуждается в сохранении", то на мой взгляд, еще как нуждается,
но сохранятся должно с обратными преобразованиями целиком конечно.
Наиболее примитивно предполагаемый сценарий такой:
1.) Фар шлет евент сохранения SAVE_INTENT если есть существующий обработчик, ждет ответа от обработчика не сохраняя файл
2.) Обработчик вернул на место спрятанные строки, и дал сигнал "добро" (вернул ноль, или ниль, не помню как принято)
3.) Фар сохраняет восстановленное, ему пофиг, тут логика не меняется
Упс, а вот тут кажется нужен еще один евент, "SAVE_DONE"
4.) Обработчик получает SAVE_DONE, прячет обратно то что должно быть спрятанно, восстанвливает позицию курсора.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Редакторное событие сохранения файла?

Post by citRiks »

NightRoman wrote: Fri 18 Sep, 2020 07:31 Есть похожий тикет -- https://bugs.farmanager.com/view.php?id=465
я не есть супер-хороший искальщик тикетов к сожалению, но именно этот тикет я видел,
и этот тикет совсем не то что я предлагаю, идеологически и практически, и думаю что сложнее в реализации.
А мне надо просто добавить тонкий "pre-save processing" что ли.
Проще говоря, мне не надо чтобы редактор начал считаться вдруг "безфайловым" на моем обычном текстовом файле,
в котором сделан обычный простой враппинг.
Хотя в других сценариях вами предложенное может быть безусловно полезным, и по вторoй мысли,
ваше предложение тоже не выглядит особо сложным
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 times
Contact:

Редакторное событие сохранения файла?

Post by buniak_a_h »

NightRoman wrote: Fri 18 Sep, 2020 07:46 свернутое представление не нуждается в физическом файле на диске, так ведь?
Начать редактирование без файла легко. Введите имя несуществующего файла - и вплоть до сохранения он так и будет только в памяти.
Конкретно о свёртке. Тут главное - не сохранить вместо исходного. Иначе можно случайно остаться с половиной файла. Я перехватываю клавиши сохранения, но, как правильно было указано, сохранить файл можно и без клавиатуры. Поэтому, конечно, лучше бы, чтоб возврат из обработчика события учитывался именно как разрешение/запрет сохранения. Так делается во многих других местах (например, в событиях диалога DN_CLOSE, DN_BTNCLICK).
Post Reply

Return to “Разработка плагинов”