crypt of decay - February 14th, 2022 [entries|archive|friends|userinfo]
ketmar

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

February 14th, 2022

но как, Холмс?! [Feb. 14th, 2022|12:23 am]
в принципе, редактор юзабелен. апи без особых проблем продолжает высовываться в скрипты, как довысуну — буду переносить хардкод. всё более-менее можно юзать, сейчас пользуюсь исключительно sxed, к edgap (прошлому) не возвращаюсь. но. есть проблема. нет ундо.

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

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

во-вторых, redo. я бы хотел, чтобы фрэйм сохранял изменения в выделеных блоках, и иногда даже движения курсора. но такие записи автоматически уничтожают redo-записи. получается, сделал undo, перепометил блок — и всё, redo уже сделать нельзя, хоть текст и не менялся. а текст всё-таки основная сущность. ну да, фрэйм получает событие «сейчас совершается унда», так что он может откатить и что-то своё, но вести во фрэйме параллельный ундо-лог… не нравится мне это.

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

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

да, в прошлом редакторе это тоже не было никак толком решено. но он не умел открывать несколько фрэймов для одного текста вообще, там буфер был намертво прибит гвоздями к интерфейсу просмотра и работы с ним. а redo там как раз было совершенно неюзабельно, потому что edgap писал все перемещения курсора и изменения выделений блока, поэтому redo разрушал почти сразу.
Link38 meows|meow!

navigation
[ viewing | February 14th, 2022 ]
[ go | Previous Day|Next Day ]