LINUX.ORG.RU

Текстовые редакторы и флаг модификации

 , ,


0

2

Обычно, в текстовом редакторе заводят булеву переменную, которую при модификации устанавливают в значение «изменено». И звёздочку с именем файла показывают.

Если например открыть файл, нажать «пробел», а затем стереть пробел клавишей «backspace», то звёздочка в имени файла останется, показывая что модификации проводились.

Но! можно ведь не этот признак хранить, а хранить исходную контрольную сумму файла. После каждого изменения её пересчитывать, и если контрольная сумма совпадает с исходной, то звёздочку не показывать.

Некоторые скажут - это надо весь текст в памяти держать, а что если текст больше, чем мои 16 гигабайт памяти, а редактировать его надо?

В таком редакторе надо считать промежуточные суммы для загруженного буфера сразу после загрузки.

Да и просто большой файл можно на блоки поделить, чтобы не пересчитывать всё.

Как вам идея?


Ответ на: комментарий от yoghurt

А какие есть? Надо проводить мероприятия по снегозадержанию на сельскохозяйственных полях?

BarCat
() автор топика

И что тебя смущает? Ты внес изменение - получай звездочку. Контрольную сумму на каждый чих считать запаришься.

panter_dsd ★★★★
()
Ответ на: комментарий от panter_dsd

что тебя смущает?

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

Пользовательский интерфейс должен четко отображать чт происходит.

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

BarCat
() автор топика
Ответ на: комментарий от Deleted

Патчи в студию.

как ты думаешь, сколько всего в мире написано текстовых редакторов, к которым надо сделать патчи?

BarCat
() автор топика
Ответ на: комментарий от BarCat

Ты модифицировал? Модифицировал. Чо ты докопался до программы? Вот если бы ты Отменил свое действие, а прога бы не убрала флаг модификации, то можно было бы на нее гнать.

panter_dsd ★★★★
()
Ответ на: комментарий от BarCat

как ты думаешь, сколько всего в мире написано текстовых редакторов, к которым надо сделать патчи?

vim, emacs.

Deleted
()
Ответ на: комментарий от BarCat

Потому что. Напиши такой редактор, ибо в популярных твоя идея вряд ли найдёт поддержку.

olibjerd ★★★★★
()
Ответ на: комментарий от panter_dsd

Чо ты докопался до программы? Вот если бы ты Отменил свое действие

Так я отменил. Каким способом хочу, таким и отменяю. А программа должна быть понятливая.

BarCat
() автор топика
Ответ на: комментарий от panter_dsd

Это совершенно разные вещи.

Это для редактора разные.
А для меня - одинаковые.
Редактор неправ.

BarCat
() автор топика

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

проявляется это в том, что если файл поменять, как ты описал — ввести пробел, удалить, и сохранить — эклипс отказывается пересобрать APK.

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 1)

В принципе подобные вещи делает git, он может показывать изменные файлы относительно версии, которую закоммитили. И текстовые редакторы и IDE умеют подсвечивать файлы, которые git считает измененными. Это более полезно в процессе программирования, так как еще показываются измененные строки и таким образом видно измененный файл из вне редактора, например утилитой форматирования

vertexua ★★★★★
()
Ответ на: комментарий от Tark

А сам-то как думаешь?
- сравнивать по длине
- брать несколько разных сумм

Тебя же не напрягает, что ты дистрибутивы по контрольным суммам проверяешь

BarCat
() автор топика
Ответ на: комментарий от vertexua

В принципе подобные вещи делает git

вообще текстовые радакторы работают неправильно. Они хранят измененный текст. А должны хранить в памяти и последний текст и патчи (и согласованно их модифицировать). Т.е. нужен новый текстовый редактор с новой внутренней объектной моделью.

BarCat
() автор топика
Ответ на: комментарий от BarCat

Историю хранит любой редактор с Undo.

В Идее есть локальная история. Даже если никакого гита не подключено, в любой момент можешь откатиться к старым или новым изменениям и посмотреть диффы.

Только ты предлагаешь что-то еще, что именно — непонятно.

anonymous
()

Могу тебе предложить самый простой способ испытать твою идею: дописать модуль tabs редактора Atom, чуть изменить isModified в этом модуле и готово.

redhat
()

Тебе лень лишний раз (не)подтвердить сохранение документа при выходе и поэтому ты предлагаешь ещё сильнее греть атмосферу процессором при каждом чихе?
Ты уверен, что постоянное пересчитывание контрольных сумм окажется дешевле сохранения документа?

blexey ★★★★★
()
Ответ на: комментарий от blexey

ты предлагаешь ещё сильнее греть атмосферу процессором

Да, пусть морально страдает он, а не я

постоянное пересчитывание контрольных сумм окажется дешевле сохранения документа?

меня его проблемы не волнуют. Даже если будет ему долше, главное, что мне станет легче (и ещё 10 миллиардам людей на планете)

BarCat
() автор топика
Ответ на: комментарий от BarCat

За электричество платишь ты, а не он.
Тормоза тоже будут испытывать твои нервы, а не его.

А проще, наверно, вообще никак не заставлять юзера сохранять документ, как поступили в Sublime Text.

blexey ★★★★★
()
Ответ на: комментарий от blexey

Тормоза тоже будут испытывать твои нервы

докажи.
«Экспериментально установлено, что задержка менее 200 мс почти не воспринимается» (c) один из коммитетов по стандартизации

За электричество платишь ты

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

Тут надо сравнивать общие суммарные расходы времени всех пользователей и расходы одного девелопера на программирование.

BarCat
() автор топика

даже the stupid content tracker умеет отслеживать

anonymous
()

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

Пусть оно лучше BTC майнит — затраты теже, а проку больше.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от blexey

Там тебе быстро посчитают стоимость твоей фичи.

не смогут - скилла не хватит.

Если вообще возьмутся.

тут мне нравится подход команды exherbo. Они говорят - мы не хотим с вами общаться, мы хотим общаться только с теми, кто делает великие вещи, такие же как мы.

BarCat
() автор топика

Как вам идея?

В жизни не видел ничего более гениального. А теперь бери свою идею и иди отсюда.

Gotf ★★★
()

ну идея как идея.

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

modifiedFlag <- onDiskText == bufferText

где <- это зависимость в смысле FRP.

Работает и на современном железе вовсе не тормозит (не смотря на то, что там всё написано в таком же стиле — например, при каждом изменении полностью пересчитывается и перерисовывается та часть текста, что на экране).

anonymous
()
Ответ на: комментарий от BarCat

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

Все правильно, флаг показывает были ли вобще модификации, а не соответствует ли текущее состояние буфера с файлом содержимому файла.

loz ★★★★★
()

идиотская идея. «изменённый файл» значит, что я стёр старый файл, записал на его место новый, стал его хозяином, и сменил mtime, а может ещё и права доступа.

emulek
()
Ответ на: комментарий от BarCat

Пользовательский интерфейс должен четко отображать чт происходит.

а если файл на сервере за 1000км, то что, то, что программа файл туда-сюда гоняла, это «ничего не произошло», да?

emulek
()
Ответ на: комментарий от BarCat

Так я отменил. Каким способом хочу, таким и отменяю. А программа должна быть понятливая.

кстати, VIM, если отменять действия Undo, снимает пометку «изменён», если ты как раз на том изменении, которое в последнем сохранении.

emulek
()
Ответ на: комментарий от waker

и сохранить — эклипс отказывается пересобрать APK.

по идее, пересобирают make/cmake/qmake, и они смотрят только на mtime, иначе точно всё зависнет нафиг.

Но если ты юзаешь vim, вставишь пробел, нажмёшь Undo, и выйдешь, то vim НЕ сохраняет файл.

emulek
()
Ответ на: комментарий от BarCat

вообще текстовые радакторы работают неправильно. Они хранят измененный текст. А должны хранить в памяти и последний текст и патчи (и согласованно их модифицировать). Т.е. нужен новый текстовый редактор с новой внутренней объектной моделью.

это НЕ unix way

emulek
()
Ответ на: комментарий от BarCat

«Экспериментально установлено, что задержка менее 200 мс почти не воспринимается»

задержка может быть НАМНОГО больше, если твой HDD решил заснуть, а ты просто сидишь, и книжку читаешь. По твоим идейкам, редактор обязан посчитать SHA512 от ВСЕГО файла, если ты его тупо решил закрыть.

emulek
()
Ответ на: комментарий от emulek

по идее, пересобирают make/cmake/qmake

неа, андроидные проекты собираются встроенной билд-системой эклипсы.

Но если ты юзаешь vim, вставишь пробел, нажмёшь Undo, и выйдешь, то vim НЕ сохраняет файл.

а если нажму :w — сохраняет.

waker ★★★★★
()
Ответ на: комментарий от waker

андроидные проекты собираются встроенной билд-системой эклипсы.

наверняка это велосипед на тему gnu make.

а если нажму :w — сохраняет.

угу. Причём нет никакой разницы, менял-ты там содержимое, или нет.

emulek
()
Ответ на: комментарий от emulek

угу. Причём нет никакой разницы, менял-ты там содержимое, или нет.

абсолютно верно. а в эклипсе - разница есть. наконец-то до тебя дошло.

waker ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.