[Profile] 加強資料安全的存檔模式簡化版

HyperEditor Q&A/技術交流
主題已鎖定
dllee
進階會員
文章: 43
註冊時間: 29日 5月 2003年, 08:34
聯繫:

直接把 pro 檔都放上來好了,用需要的請儘量使用 :D

文章 dllee »

對於漢書 XP 的使用者,請使用漢書內建的「設定存檔自動備份」功能會比較好,
這是給漢書2000(不想升級漢書XP)的使用者用的 :wink:

代碼: 選擇全部

;;======================================
;; SafeSaveS.pro   ?#91;強資料安全的存檔模式簡化版   v0.3  【漢書Profile】he7.04+
;;
;; 2003.05.29 (c)  by  李棟樑 <dllee@edirect168.com>  http://dllee.ktop.com.tw
;;======================================
;;
;; ■ 前言
;;
;;    在編輯檔案時,最最擔心的有以下幾點:
;;
;;       a. 突然當機,導致尚未儲存的資料付諸東水。
;;       b. 在一邊思考一邊輸入時,常常會有修改的動作,可能這時?#123;為不須要的
;;          部分就把它給刪除了,而之後,可能又?#123;為有用,又得再重新輸入。
;;
;;    在 a. 的狀況,改進的方法是系統自動存檔。漢書具有此一功能,其自動存檔
;;    只會存最後更新的一份,對於 b. 的狀況是沒有任何幫助的。
;;
;;    筆者以「時間戳記檔」的方式來?#91;強資料備份。
;;    時間戳記(TimeStamp),其格式為 [西元年]-[月]-[日]-[時分秒],例如:?#123;在是
;;    2001 年 5 月 20 日 下午 9 時 0 分 18 秒,則時間戳記為 2001-05-20-210018,
;;    若原始檔名為 MyWork.txt ,則此時的「時間戳記檔」檔名為
;;    MyWork.2001-05-20-210018.txt ,當你使用此存檔模式時,在你的工作目錄下就會
;;    多了許多這類的檔案,在你需要時,就可以重新編輯它。
;;    這樣雖然是比較占硬碟空間,不過自己辛苦建立的資料還是比較重要,而且?#123;在的
;;    硬碟真是又大又便宜(相對於筆者當年.....),用多一點點空間來換取自己的心血,
;;    相信是值得的。再說,筆者還有提供巨集,在您的工作完成後,即可將這些含有
;;    時間戳記的檔案一起刪除,以節省硬碟空間。
;;
;;    在漢書 8.x 版已提供相同的功能,可由主選單之 [檔案] → [?#93;定存檔自動備份]
;;    啟動或關閉此功能。
;;    ?#93;系統內建的功能比 Profile 版穩定,而且之前?#93;系統不支援,而改寫了
;;    預?#93;指令 _save, _file ,對於一些特殊的檔名還是會發生問題。
;;    故,本版只留下「每日備份」的部分。每日備份只有日期戳記,以上述的例子,
;;    檔名為:MyWork.2001-05-20.txt 會存在與 MyWork.txt 相同的目錄下。
;;    建議,如果您還需要「時間戳記檔」的功能,請更新到 8.x 以上的版本。
;;
;;
;; ■ 安裝方法
;;
;;    ○ 如果您沒有自己定義 my.pro 可以直接將本檔案改名成 my.pro 放在漢書的
;;       安裝目錄即可。
;;
;;    ○ 如果您有自己定義 my.pro ,請在 my.pro 的 def autoexec 中?#91;入以下的
;;       ?#93;定
;;
;;          def autoexec=[exist safesaves.pro]
;;                       [if %Exist][m safesaves.pro][end]
;;
;;       如果您還沒有定義 autoexec 則直接將上面一行文字去掉前面的空白及註解 ;;
;;       貼到您的 my.pro 中即可。
;;       如果您已定義 autoexec 則將上述的定義?#91;在您原本 autoexec 定義之後即可。
;;
;;
;; ■ 操作說明
;;
;;    在這個版本中,筆者使用 HE7.06 提供的讀寫 Registry 的功能,將?#93;定值存入
;;    Registry 中,如此就不會?#93;關掉重?#125;而失去?#93;定。
;;    以下操作說明,是以筆者內定定義為主,如果您看得懂 profile 定義,可參考
;;    最後的說明,自行修改定義。
;;
;;    □ 使用按鈕/功能鍵/自定工具列
;;
;;       ○ 自定工具 ?g 或 Ctrl-2 或 Ctrl-Alt-F2
;;
;;          儲存今日工作記錄檔,作為每日的工作備份與記錄。
;;          將目前編輯的檔案,另存「每日工作記錄檔」。其格式為
;;          主檔名.[西元年]-[月]-[日].副檔名
;;          如前例:若?#123;在是 2001 年 5 月 20 日 下午 9 時 0 分 18 秒,則
;;          「今日工作記錄檔」檔名為 MyWork.2001-05-20.txt
;;
;;
;;       ● 注意
;;          以上所有的按鍵功能,可能會?#93;為您所使用的中文輸入法,將該按鍵先行
;;          攔截,而導致按下該按鍵時沒有上述的反應,此時,可以先按 Ctrl-Space ,
;;          切回英文輸入狀態,作完想作的功能後,再按 Ctrl-Space 切回中文輸入。
;;          如筆者所使用的「自然輸入法」就會攔截 Ctrl-1,2,3,4,6,7,9 等按鍵,
;;          由於每一家的中文輸入法內建的熱鍵不同,狀況?#93;不同,無法一一作解釋,
;;          請在使用時自己多注意。
;;          解決的方法就是去改 profile 檔的按鍵定義,讓您所常用的功能鍵與中文
;;          輸入法的熱鍵分?#125;即可。
;;
;;
;; ■ 巨集/按鍵定義
;;
;;    icon2                   新增 自定工具?g 儲存今日工作記錄檔,作為每天工作的備份。
;;    c-f2                    新增 Ctrl-Alt-2 儲存今日工作記錄檔,作為每天工作的備份。
;;
;;    saveDayStampFile        儲存今日工作記錄檔,作為每天工作的備份。
;;    getNTSFileName          取得不含時間戳記的主檔名。放在 %@strNTSFileName
;;    getDayStampOnly         取得日期戳記。放在 %@strDayStamp
;;
;;
;; ■ 自行修改定義
;;
;;    □ 將 Ctrl-F2 與 Ctrl-Alt-F2 都定義成 icon2
;;       內定?#93;定為了與原 he7 儘量相同,所以保留了 Ctrl-F2  用來輸入「片語組」
;;       如果您像筆者一樣很少用「片語組」來輸入,則可以修改 c-f2 的?#93;定
;;       如下:
;;
;;          def c-f2=[key icon2]
;;
;;       您可以往下找到以上的?#93;定,原 c-f2 ?#91;上註解 ;;
;;       再將以上?#93;定的註解 ;; 取消即可。
;;
;;       he7 內定片語組在 Ctrl-F2 是輸入標點符號,此部分可以改用以下方式輸入
;;
;;          Ctrl- F2 =  、   請改用→        Alt- ' = 、
;;
;;
;; ■ 改版歷?#123;
;;
;;    □ 2003.05.29 v0.30
;;
;;       ○ 刪除原有 SafeSave.pro 大部分的功能,只保留「每日備份」。
;;          如此簡易好用的功能,適用的漢書版本較多,問題較少。 ^_^
;;
;;    □ 2002.01.15 v0.25
;;
;;       ○ 新增整體變數
;;             %@dHE2000Version           ;; 漢書 2000 的版本 (整數數值)
;;             %@fSupportComplexDialog    ;; 支援較複雜的 Dialog Box
;;
;;       ○ 修訂 getHEversion 取得漢書的版本。
;;          在 v7.07 版中的 [atod] 字串轉數字變成只支援整數,而且一些運算的
;;          結果好像?#93;取整數,為了使各版本都可以使用,於是全部改用整數來處理
;;          及判斷漢書的版本。
;;          ★ 在漢書 7.07 中載入 SafeSave 0.24 版會有「運算式錯誤」的訊息。
;;
;;       ○ 修訂 checkSafeSaveReg、checkSafeSaveIni 以 Release 日期作為
;;          新舊版本的判斷。
;;
;;       ○ 新增 SafeSaveSettingNew 及 SafeSaveSettingOld 由 settingSafeSave
;;          依漢書的版本自行選用,以提供新版使用者較多的功能選項。
;;
;;       ○ 增訂 askCurrFileToAutoSave、 setCurrFileToAutoSave 讓其他的巨集可以
;;          方便地?#93;定新的自動存檔檔案。
;;
;;       ○ 刪除 settingSafeSave_IWanted ,?#93;為漢書 7.07 版已修正了 [resetdialog]
;;          會當機的 BUG。
;;
;;    □ 2001.08.27 v0.24
;;
;;       ○ 新增 getHEversion 取得漢書的版本。
;;          ?#93;為讀寫 Registry 的功能只有在 v7.06(含)以上的版本在支援,而舊版
;;          漢書在?#125;啟時會出?#123;問題,本版主要是讓 v7.05/7.04 的使用者?#93;可以
;;          使用 SafeSave 的巨集。
;;
;;       ○ 新增 checkSafeSaveIni、readSafeSaveSettingIni、
;;          saveSafeSaveSettingIni 等指令,以讀寫 SafeSave.ini 檔。
;;          SafeSave.ini 檔案會放置在漢書安裝目錄下,可自行修改 %@strSSINI
;;          的?#93;定。為了配合 %@strSSINI 另新增 %@strSSREG 的變數,以減化
;;          讀寫 Registry 部分的指令。
;;          另修改 readSafeSaveSetting 及 saveSafeSaveSetting 使之先判斷漢書
;;          的版本,再決定使用 Registry 或是 SafeSave.ini。
;;
;;    □ 2001.05.29 v0.23
;;
;;       ○ 修改 clearAllsts 巨集,以同時刪除目前編輯目錄及內定目錄下的
;;          時間戳記檔。
;;
;;       ○ 修正 checkSafeSaveReg 在作舊版使用者判斷時,使用錯誤的 RegName
;;          導致每次重?#125;漢書就會重置?#93;定。
;;
;;    □ 2001.05.28 v0.22
;;
;;       ● 新增 findSTSNo、 oldestSTS、 keepMaxSTS 等巨集
;;       ○ 修改 _save、 _file、 settingSafeSave 等巨集
;;          完成可?#93;定單一檔案保留最多時間戳記檔的個數。
;;
;;       ○ 修改 _save、 _file、 settingSafeSave 等巨集
;;          使時間戳記檔可以存到內定的目錄或是目前編輯檔案的目錄。
;;
;;       ○ 修改  checkSafeSaveReg 讓舊版使用者可直接更新。
;;
;;       ★ 當?#93;定時間戳記存到內定目錄時,?#93;時間戳記檔並沒有記錄原始檔案的目錄,
;;          所以當編輯時間戳記檔時,無法作「同步更新」。
;;          如果?#93;要有同步更新的功能,則要再新增一個 STS 的?#93;定資料檔放在
;;          內定目錄,以供回存參考。
;;
;;    □ 2001.05.28 v0.21
;;
;;       ● 新增 _save , _file 的定義,使原本附?#91;在快速存檔(連按 F2 或 F3)的
;;          另存時間戳記的功能,?#93;能用於一般的 save 及 file 存檔,真正作到在
;;          存檔的同時判斷是否要另存時間戳記檔。
;;
;;       ● 修改 f2,f3 的定義,以配合 _save 及 _file 的使用。
;;
;;       ○ 取消 stsInSave、stsInQuickSave、stsInFSave、stsInQuickFSave
;;          等指令,?#93;已由 _save 、 _file 取代。
;;
;;       ○ 取消 filemsg、f2、f3 等舊指令的備份。
;;
;;======================================
;; 2003.05.29(c)v0.30 by 李棟樑<dllee@edirect168.com> http://dllee.ktop.com.tw
;;======================================

;;---------------------------------------------
;; 定義自定工具列2
;; ?g 或 Ctrl-2   儲存今日工作記錄檔,作為每天工作的備份。

set userhint2  儲存今日工作記錄檔,作為每天工作的備份。
def icon2=[saveDayStampFile]

;;---------------------------------------------
;; C-Fx 功能按鈕  重新定義 c-fx ,將原來沒有用到的 Ctrl-Alt-F2 定義成 icon2
;;
def c-f2=[if !%KeyAlt]'%@cf2'[else][key icon2][end]
;;---------------------------------------------
;; C-Fx 功能按鈕  重新定義 c-fx ,將 Ctrl-F2 與 Ctrl-Alt-F2 都定義成 icon2
;;
;;       Ctrl- F2 =  、   已取消請改用→        Alt- ' = 、
;;
;; def c-f2=[key icon2]

;;---------------------------------------------
;; 整體變數
%@strNTSFileName=" "           ;; 存檔的主檔名?#93;不含時間戳記)
%@strDayStamp=" "              ;; 日期戳記

;;---------------------------------------------
;; 將目前檔案另存一份「今日工作記錄檔」
;;
;;    saveDayStampFile  如果本檔的「今日工作記錄檔」已存在,會問是否蓋寫,
;;                      如果不存在,會問是否真的要存。
;;
def saveDayStampFile=
   [getNTSFileName] [getDayStampOnly]           ;; 取得檔案名稱及日期戳記
   [%flagSaveDayFile=0]                         ;; 重置存今日工作記錄檔旗標
   [exist "%FilePath\%@strNTSFileName.%@strDayStamp.%FileExt"]
   [if %Exist]                                  ;; 如果已經存過,詢問是否蓋寫
      [message_yn 已經儲存過「今日工作記錄檔」: %@strNTSFileName.%@strDayStamp.%FileExt。是否蓋寫?]
      [if %WaitKey == 'Y'][%flagSaveDayFile=1] [end]
   [else]                                       ;; 如果沒有存過,詢問是否要存
      [message_yn 是否將目前編輯的檔案另存一份「今日工作記錄檔」?]
      [if %WaitKey == 'Y'][%flagSaveDayFile=1] [end]
   [end]
   [if %flagSaveDayFile==1]
      [save "%FilePath\%@strNTSFileName.%@strDayStamp.%FileExt"]
      [message 今日工作記錄檔: %@strNTSFileName.%@strDayStamp.%FileExt 儲存完畢!]
      [delay 60]
   [end]

;;---------------------------------------------
;; getNTSFileName    取得(不含時間戳記的)檔案名稱
;;
def getNTSFileName=
   [strlen "%FileName"]                         ;; 檢查檔案是否已?#91;入了 TimeStamp
   [%fTimeStamp=0]                              ;; 預?#93;此檔案不含 TimeStamp 旗標
   ;; 判斷是否為「今日工作記錄檔」
   [%filenamelen=%Len-11]                          ;; ".yyyy-mm-dd" 共 11 個字
   [if %filenamelen > 0]                           ;; 主檔名至少大於 11 個字以上
      [strright  "%FileName" 11][%scheck=%String]  ;; 取主檔名的右邊 11 個字
      [strmiddle "%scheck"  1 1][%scheck1=%String] ;; 應為 "."
      [strmiddle "%scheck"  6 1][%scheck2=%String] ;; 應為 "-"
      [strmiddle "%scheck"  9 1][%scheck3=%String] ;; 應為 "-"
      [if (%scheck1=="." && %scheck2=="-" && %scheck3=="-")]
         [%fTimeStamp=1]                           ;; ?#93;定找到 TimeStamp 旗標
         [strleft "%FileName" %filenamelen]        ;; 取出真正的主檔名
         [%@strNTSFileName=%String]                ;; 存入主檔名字串變數
      [end]
   [end]
   [if %fTimeStamp == 0]                        ;; 原 %FileName 不含 TimeStamp
      [%@strNTSFileName=%FileName]              ;; 則檔名即是原檔名
   [end]


;;---------------------------------------------
;; getDayStampOnly   取得日期戳記
;;
def getDayStampOnly=
   [strmiddle %Date2 1 2][%year="20%String"]    ;; 前面補 20
   [strmiddle %Date2 4 2][%mon=%String]         ;; %Date2 目前的日期 "01/05/20"
   [strmiddle %Date2 7 2][%day=%String]         ;; strmiddle 是取字串中的數個字元
   [%@strDayStamp="%year-%mon-%day"]            ;; 組合出日期戳記

沒空更新的網頁...
http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
主題已鎖定