@mlrpadilla問及在 JMP 沒有機會保存文件時如何恢復文件。在不可避免的計算機/JMP 關機情況下,如何恢復最近對 JMP 文件的工作?
一年前,我在使用 .JSL 腳本時也有過類似的經歷,當時一次電源故障讓我損失了幾個小時的工作時間。 我編寫了一個插件來定期查找打開的 JSL 文件並製作它們的快照。 它不會對 JMP 數據表進行快照。 而且它只適用於 Windows。 但從那以後,它已經為我保存了幾次 JSL。 它也至少讓我失望過一次(如下)。
FileSnapper 插件
安裝後,FileSnapper 加載項腳本每五分鐘(默認)運行一次,並查看打開的窗口以查找已修改的腳本窗口。 當它找到一個時,它會抓取文本並將其保存起來。
如果 JMP 沒有機會正常關閉,則會留下標記文件。 下次 JMP 啟動並找到標記時,JMP 將打開 FileSnapper 對話框,讓您查看是否有要恢復的快照。 您還可以從加載項菜單打開對話框並設置一些屬性(例如 5 分鐘間隔和 14 天保留期)。
怎麼運行的
為了盡可能保持 FileSnapper 不可見,它不使用 JSL 調度程序。 (調度程序打開一個窗口,只有一個調度程序您可能想用於其他事情。)相反,FileSnapper 使用 RunProgram 來獲得定期喚醒呼叫。 有很多迭代;當前版本使用 CMD.EXE 和 DOS等待命令在循環中每五分鐘將一些文本發送回 FileSnapper。 當 JMP 關閉時,它會發出信號等待使 CMD.EXE 快速退出的事件。 如果哨兵消失,CMD.EXE 也會終止。
標記文件使用一個小型 JMP 數據表。 該表已保存,但也作為私有表保持打開狀態。 如果運行 JMP 的第二個副本,它會檢測到該表已在另一個 JMP 副本中打開,並且 (1) 不會打開恢復對話框,並且 (2) 生成不同的標記文件。 如果找到任何未打開的哨兵,則刪除所有未打開的哨兵並打開恢復對話框。 您應該只收到一次恢復文件的提示。
加載項使用關閉掛鉤刪除哨兵並執行幾項操作以確保 RunProgram 終止。 可能會遺留一些診斷性 show() 調用,但您通常看不到它們的輸出,因為 JMP 正在關閉。 您可以使用視圖-> 加載項來啟用/禁用 FileSnapper 並在日誌窗口中查看它們。
backup() 函數每五分鐘從 RunProgram 調用一次。 Backup() 查找臟(修改)的編輯器窗口,將它們的內容與上次進行比較,如果更改則保存一個副本。 在 Documents 下為快照創建了一個特殊文件夾。 這些文件被標記為只讀,以幫助您不要嘗試使用它們,因為...
每次 FileSnapper 啟動時,它都會研究舊的快照文件。 FileSnapper 悄悄地刪除舊快照。 您可以控制日誌的嘈雜程度,但您不想讓 FileSnapper 記錄它創建的每個快照,因為您可能每五分鐘丟失一兩次擊鍵,而更多的日誌活動只會讓情況變得更糟。
對話窗口(在失敗後或從菜單中)顯示了最近到最舊快照的列表。 您可以 (1) 雙擊打開,或 (2) 單擊選擇。 如果您選擇一個文件,您可以右鍵單擊所選文件(右鍵單擊不選擇,真可惜!)並與現有文件進行比較。如果您選擇兩個文件,您可以右鍵單擊並比較兩個文件。 檢查比較窗口的標題以快速查看文件是否相同。 Compare to an existing file 不提示;它會在註冊表和一些已識別的目錄中查找名稱正確的文件。 它可能是也可能不是您要比較的文件。
但我仍然失去了一些工作。
在開發腳本時,您通常會按 escape 鍵來停止腳本。 FileSnapper 是一個腳本。 似乎沒有辦法阻止它偶爾處理轉義鍵並在錯誤的時間停止,五分鐘後再也不會運行。 FileSnapper 中有一個半生不熟的想法,讓它報告它已停止,但前提是在五分鐘後打開一個數據表。 就我而言,我在編寫腳本時並不經常使用數據表,因此我可能不會注意到。
有一次我將保留期設置為 100 天,並將快照頻率設置為 30 秒。 這太多了。 有超過 10,000 個文件,JMP 啟動可能需要 30 秒。 在對話框的選項中選擇您的疼痛程度。 按保存按鈕,然後關閉對話框。
我希望將其內置到 JMP 中,並且我希望有更好的回調計時器。 可以進行很多改進(例如對話框中的保存按鈕不提供任何反饋)。 它可能會或可能不會真正幫助某人。 如果您厭倦了偶爾錯過的擊鍵,您可以將其卸載。 同樣的view->add-ins菜單也會讓你查看源碼。 謝謝@賈斯汀奇爾頓用於指出項目中的 JSL 窗口如何工作。
加入。
我真的很喜歡這裡的環境運行前自動保存。
- 在 JSL 調試期間,我可以確保每隔幾分鐘保存一次 JSL 代碼(每次嘗試使其運行)
- 將 JSL 文件保存在雲中允許我獲取以前版本的代碼 - 以防萬一最後一個版本不正常......
