這是給漢書2000(不想升級漢書XP)的使用者用的
代碼: 選擇全部
;;======================================
;; 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"] ;; 組合出日期戳記