Создание резервных копий редактируемого файла

Здесь обсуждается всё, что касается макросов.
Post Reply
User avatar
SUSim
Posts: 1550
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 5 times
Been thanked: 12 times

Создание резервных копий редактируемого файла

Post by SUSim »

Когдато был плагин создающий копию файла при редактировании, но аналога под x64 я не нашел, и своял макрос, точнее набор макросов :)
- первый вариант сразу создавал копию при F4 на файлеж;
- второй уже начал создавать копию при переключении из просмоторщика в редактор;

- в конце концов я пока остановился на макросе который содает резервную копию файла *.bak перед сохранением
ну и соответсвенно макрос стирающий все резервные копии в текуще папке :)
кому интересно смотрите и пользуйте :) Да замечания тоже очень приветствуются!

Code: Select all

;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;; Марос создания копии при возможном сохранении изменений файла. (теряется состояние активной 
;; панели и времена оригинала)
;;-------------------------------------------------------------------------------------------------
;; Третий вариант (копия только при сохранении и теряется только время оригинала)
;;-------------------------------------------------------------------------------------------------
%comment="Макрос создания *.bak файла при сохранении. (с) SimSU";
%comment="Назначается на F2, F6, F10, ShiftF10, Esc в редакторе.";
%save=0;
$IF ((Akey(1,0)=="F2")||(Akey(1,0)=="ShiftF10"))
  %save=1; %comment="Выбрали сохранение, тогда будем делать *.bak.";
$ELSE
  $AKey
  $WHILE (Dialog)
    mmode(1,0) %comment="Прерисовываем экран на каждом шаге.";
    %VK=waitkey(0,0);
    $IF (((%VK=="Enter")&&(Dlg.CurPos==3))||(%VK=="C")) 
      %save=1; %comment="Выбрали сохранение, тогда будем делать *.bak.";
      Esc %comment="Пока закрываем диалог без сохранения, *.bak надо делать перед сохранением.";
    $ELSE
      eval(%VK) %comment="Отрабатываем другие нажатия.";
    $END
  $END
  mmode(1,1)
$END
$IF (%save==1) 
  %comment="Будем делать *.bak если требуется и возможно.";
  $IF (!(Editor.State & 0x1) && !(Editor.State & 0x800) && (Editor.State & 0x8)) 
    %comment="Файл не новый, не модален и модифицирован, тогда делаем *.bak.";
    %filename=Editor.FileName;
    %i=0;
    %newext=".bak";
    $While (fexist(%filename+%newext)) %comment="Ищем свободное имя *.bak, *.bak1, ...";
      %i=%i+1;
      %newext=".bak"+itoa(%i);
    $END
    ShiftF4 print(%filename) Enter Right Enter %comment="Открываем во втором редакторе файл заново.";
    ShiftF4 CtrlDown $IF (ItemCount >> 1) ShiftDel Esc $Else ShiftDel $End Esc %comment="Чистим историю.";
    ShiftF2 print(%filename+%newext) Enter %comment="Сохраяем с новым расширением.";
    $IF (Dialog)
      Esc msgbox("Создание .bak файла","Не удалось создать",0x1)
    $END
    Esc %comment="Закрываем второй редактор.";
    ShiftF2 CtrlDown $IF (ItemCount >> 1) ShiftDel Esc $Else ShiftDel $End Esc %comment="Чистим историю.";
    AltF11 ShiftDel Esc %comment="Чистим историю.";
  $ELSE
    %comment="*.bak делать не требуется или невозможно.";
  $END
  %comment="Заново вызываем диалог и сохраняем.";
  $AKey 
  $IF (Dialog)
    Enter
  $END
$END
%comment="Макрос пока не предназначен для ShiftF2 (ShiftF2 Enter не создаст *.bak, так как подразумевается что имя будет изменено).";
%comment="Макрос сделает *.bak и при дополнительных запросах (например при Предупреждении о преобразовании символов) независимо от реакции пользователя, т.е могут создаваться лишние *.bak.";
;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Code: Select all

;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;; Макрос удаления старых копий отредактрованного файла
;;-------------------------------------------------------------------------------------------------
;; Другой вариант с сохранением пометок
;;-------------------------------------------------------------------------------------------------
%comment="Макрос удаления файлов (*.bak, *.bak1, ...). (с) SimSU";
%comment="Назначается на CtrlB в панелях.";
$IF (!APanel.Plugin)
  Clip(5,2) Clip(1,"") %comment="Вкючаем внутренний буфер обмена и очищаем его.";
  $IF (APanel.Selcount>0) %comment="Запоминаем имена выделенных файлов и чистим выделение.";
    CtrlShiftIns
    panel.select(0,0)
  $END
  panel.select(0,1,3,"/\\.(bak\\d*)$/i") %comment="Выделяем по маске bak файлы.";
  $IF (APanel.Selected) %comment="Если что-то выделилось то спрашиваем - будемли удалять?";
    $IF (msgbox("Удаление *.bak файов", "Bы хотите удалить все ("+itoa(APanel.SelCount)+" шт.) BAK файлы",0x20000)==1)
      F8 $Rep(1000) $IF(Dialog) Enter $END $END %comment="Удаляем, при вопросах говорим Ок.";
      $While (Dialog) %comment="Возникло очень много вопросов. Дальше будем пытать юзера :)";
        mmode(1,0)
        %VK=waitkey(0,0);
        eval(%VK)
      $END
      mmode(1,0)
    $END
  $END
  panel.select(0,0) panel.select(0,1,2,Clip(0)) %comment="Снимаем оставшееся выделение и выделяем запомненные файлы.";
$ELSE
  $AKey %comment="Для всего остального.";
$END
;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SimSU ··· ·· -- ··· ··-
User avatar
SUSim
Posts: 1550
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 5 times
Been thanked: 12 times

Re: Макросы от SimSU тут я SUSim

Post by SUSim »

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

Примечание модератора
Тема закрыта, т.к. актуальная Lua-версия для FAR3 входит в Набор макросов от SimSU.
SimSU ··· ·· -- ··· ··-
Post Reply

Return to “Обсуждение макросов”