@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 正在關閉。 您可以使用 view->add-ins 來啟用/禁用 FileSnapper 並在日誌窗口中觀察它們。
每五分鐘從 RunProgram 調用一次 backup() 函數。 Backup() 查找臟(修改)的編輯器窗口,將其內容與上次比較,如果更改則保存副本。 在 Documents 下為快照創建一個特殊文件夾。 這些文件被標記為只讀以幫助您不要嘗試使用它們,因為...
每次 FileSnapper 啟動時,它都會研究舊的快照文件。 FileSnapper 會悄悄刪除舊快照。 您可以控制日誌的噪音程度,但您不想讓 FileSnapper 記錄它創建的每個快照,因為您可能每五分鐘丟失一兩次擊鍵,而更多的日誌活動只會讓情況變得更糟。
對話窗口(發生故障後,或從菜單中)顯示最新到最舊的快照列表。 您可以 (1) 雙擊打開,或 (2) 單擊選擇。 如果您選擇一個文件,您可以右鍵單擊所選文件(右鍵單擊不會選擇,太糟糕了!)並與現有文件進行比較。如果您選擇兩個文件,您可以右鍵單擊並比較這兩個文件。 檢查比較窗口的標題以快速查看文件是否相同。 比較現有文件不提示;它在註冊表和一些已識別的目錄中查找正確名稱的文件。 它可能是也可能不是您要比較的文件。
但我還是丟了一些工作。
在開發腳本時,您經常會按 Escape 來停止腳本。 FileSnapper 是一個腳本。 似乎沒有辦法阻止它偶爾處理轉義鍵並在錯誤的時間停止,永遠不會在五分鐘後再次運行。 FileSnapper 有一個半生不熟的想法,即報告它已停止,但前提是五分鐘後打開數據表。 就我而言,我在編寫腳本時不經常使用數據表,所以我可能不會得到通知。
有一次,我將保留時間設置為 100 天,將快照頻率設置為 30 秒。 這太多了。 有超過 10,000 個文件,JMP 啟動可能需要 30 秒。 在對話框的選項中選擇您的疼痛程度。 按保存按鈕,然後關閉對話框。
我希望將它內置到 JMP 中,並且希望有更好的回調計時器。 可以進行很多改進(例如對話框中的保存按鈕不提供任何反饋)。 它可能會或可能不會真正幫助某人。 如果您厭倦了偶爾錯過的擊鍵,您可以將其卸載。 同樣的 view->add-ins 菜單也可以讓你查看源代碼。 謝謝@賈斯汀_奇爾頓用於指出項目中的 JSL 窗口是如何工作的。
加入。