?

Log in

No account? Create an account
Два варианта Undo - В Северном Ледовитом
June 15th, 2014
14:14

[Link]

Previous Entry Share Next Entry
Два варианта Undo
А вот скажите, люди. В разных программах по-разному работает отмена последней команды (Undo).

Вариант 1: Если команда ничего не сделала (например, дана команда центровать текст, в то время как он уже и так отцентрован), то она в историю не записывается, и, соответственно, отменить её нет ни нужды, ни возможности. Такой вариант работает в Finale.

Вариант 2: Команда записывается в историю в любом случае, даже если ничего не сделала. Затем её можно последовательно отменять из истории. Этот вариант реализован в программах MS Word, Adobe InDesign, Sibelius.

(В программе Adobe Photoshop вообще в историю записывается каждый чих, вплоть до выделения рамочкой и входа / выхода из текстового режима, так что, можно считать, это экстремальный случай второго варианта.)


Какой из вариантов вам представляется более логичным и удобным?

Tags: , ,

(10 comments | Leave a comment)

Comments
 
[User Picture]
From:kivagant
Date:June 15th, 2014 05:43 pm (UTC)
(Link)
Если есть стопроцентная гарантия, что команда ничего не меняла — то хорошо, чтобы она не записывалась в историю. Если гарантия 99,9% — то лучше записывать. Вариант, например, как в MS Word, когда отправка на печать меняет историю и документ считается изменённым (вследствие чего его предлагается сохранить перед выходом) — это бред, который только пугает пользователя (он ведь ничего не менял, а тут вдруг надо что-то сохранять).

В Adobe бредово сделана история в том плане, что Ctrl+Z по-умолчанию отменяет только один шаг истории, а второе нажатие возвращает его обратно. Ничего меня так не выбешивало в их продуктах, как это.

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

Как-то так.
[User Picture]
From:ptrue
Date:June 16th, 2014 06:50 am (UTC)
(Link)
Спасибо. Примерно так и думал, но мне нужно было подтверждение.

В Adobe есть ведь и полная история по Ctrl-Alt-Z и Ctrl-Shift-Z. Другое дело, что непонятно, зачем вечно придерживаться совместимости с древней версией и держать однократное undo на Ctrl-Z.

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

Или, например, в Эксцеле при загрузке файла сразу оказывается подсвечена та ячейка, с которой работали перед сохранением файла. Однако смена рабочей ячейки не приводит к "загрязнению" файла и не записывается в историю. Однако тут есть и ещё некоторый вопрос. Допустим, пользователь поменял рабочую ячейку и хочет сохранить это в файле. Но содержимого файла он не менял. Поэтому флаг "грязный" у файла не выставлен, и сохранение невозможно. Это в случае, если программа позволяет сохранять только "грязный" файл. Или программа не должна проверять этот флаг, если пользователь принудительно сохраняет файл?
[User Picture]
From:kivagant
Date:June 16th, 2014 06:58 am (UTC)
(Link)
Эксель ведёт себя разумно в этом разрезе: история не засоряется переключением вкладок и выделением ячеек, но сохранять можно сколько угодно — и эти изменения успешно записываются. Так что изменения, не модифицирующие контент, просто не отображать в истории, позволять сохранять, но не требовать этого (как ворд при печати). Это логично и удобно.
(Deleted comment)
[User Picture]
From:ptrue
Date:June 16th, 2014 02:24 pm (UTC)
(Link)
Ок, спасибо!
[User Picture]
From:golger_i
Date:June 16th, 2014 02:00 pm (UTC)
(Link)
Вопрос: а что собственно записывается в историю? Только команда, или соответсрвующее ей состояние файла? То есть Undo вызывает загрузку предыдущего состояния файла, или выполнение команды, "обратной" последней?
[User Picture]
From:ptrue
Date:June 16th, 2014 02:27 pm (UTC)
(Link)
Зависит от ситуации.
В тех случаях, когда можно совершить обратную команду, мы записываем команду. Если это невозможно (например, пользователь удалил всё содержимое файла. Какая команда будет обратной?), то сохраняем состояние.

В некоторых программах сохраняют так называемый "инкремент", то есть изменение, произведённое в содержимом. Но не с любым содержимым это удаётся.
[User Picture]
From:golger_i
Date:June 16th, 2014 04:05 pm (UTC)
(Link)
Тогда в ситуации, когда обратная команда существует (хотя бы логически), я бы писал ее в историю, даже если файл не меняется. Потому что может быть полезно просто для того, чтобы вспомнить последовательность операций, которую, например, захотелось повторить на другом материале. А когда не существует, и файл не изменился, то не писать.
Но в любом случае меню сохранения файла пусть лучше всегда работает, даже если файл с прошлого сохранения не изменился.
[User Picture]
From:ptrue
Date:June 17th, 2014 10:30 am (UTC)
(Link)
А, ну тут вы хотите использовать кусок истории в качестве макроса, а это не совсем корректно, хотя и история и макрос состоят из одних и тех же команд. В случае если мы предоставим возможность копировать историю в макрос, то, вероятно, нам придётся записывать в историю даже операции-пустышки, поскольку, как вы совершенно справедливо заметили, в какой-то ситуации они будут пустышками, а какой-то другой -- могут что-то и выполнить.

Но, полагаю, что в любом случае копирование из истории в макросы не должно быть бездумным. Впрочем, разберёмся с этим, когда дойдём до макросов :)
[User Picture]
From:niclaus
Date:June 22nd, 2014 09:43 am (UTC)
(Link)
Как мне представляется:
история бесконечная (с момента создания файла), причём в обе стороны — undo/redo, доступно восстановление состояния документа в любой точке, а не только пошагово (Photoshop)
хранить только то, что привело к реальному изменению
самое главное: история записывается в рабочий файл с тем, что бы можно было бы восстановить все действия с сохранённым файлом после закрытия программы, перезагрузки, на другом компьютере и т.д.
[User Picture]
From:ptrue
Date:June 23rd, 2014 02:13 pm (UTC)
(Link)
Хорошая штука. Можно сделать.
Только это получается совершенно альтернативный способ хранения файла. Переход от одного способа к другому может получиться не слишком элегантным. Ладно, посмотрим :)
Powered by LiveJournal.com