Macro/投稿/218 のバックアップ(No.5)




新規作成時、一時ファイルに保存し自動保存機能を有効に

  • ページ: Macro/投稿
  • 作者: s_hiiragi?
  • カテゴリー: js
  • 投稿日: 2011-08-14 (日) 23:22:32

メッセージ

新規作成後の(無題)タブのままメモを書くというスタイルで使っていて、Windowsが強制終了した際にメモが消失するということが何度かあったため作成しました。

サクラエディタの自動保存機能は保存されているファイルに対しては有効ですが、未だ保存されていない(無題)タブに対しては何もしません。そこで、新規作成後に一時ファイルへ保存することで自動保存機能が働くようになります。

Windows XP+SakuraEditor2.0.0.2で動作確認しているため、Vista以降、保存場所によっては問題が起こるかもしれません。その場合、適宜保存先を変更してください。

注意:一時ファイルを誤って閉じたときは、新規タブを作成せずに一時ファイルを直接開いてください。 (一時ファイルは"無題_0"から順番に再利用しており、開く際に中身を空にするためです)

問題としては、最近開いたファイルの履歴を一時ファイルで汚してしまう点があります。

2012-04-18 version 2.0 マルチユーザ設定が有効なとき、ユーザ別の設定保存先に一時ファイルを保存するようにしました。 https://github.com/s-hiiragi/SakuraEditor-Macros/blob/master/backup_untitled_tab.js

filebackup_untitle_tab.js
  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
/**
 * @name         backup_untitle_tab.js
 * @description  サクラエディタの新規タブ内容をバックアップ
 * @require      SakuraEditor 2.0.0.2 以上
 * @author       s_hiiragi
 * @created      2011年8月13日 9:39:48
 * 
 * @summary
 *     サクラエディタにはファイルの自動保存機能があり、予期しないWindowsの終了に
 *   対して有効です。しかし、新規作成直後の(無題)タブに関しては、ファイルとして
 *   保存されていないため自動保存機能が効きません。
 *     このマクロはこの問題を解決します。新規作成時に一時ファイルに保存を行うこ
 *   とで自動保存機能が有効となります。
 *   
 *   注意点
 *     マクロ登録時、「自動実行:」の「新規/開ファイル後」にチェックを入れて
 *     ください (これを入れないと新規作成時にマクロを実行できません)
 */
(function () {
    var UNTITLED_DIR_NAME = 'untitled_files';
    var UNTITLED_PARENT_DIR = null;  // Default is a directory "sakura.exe" exists in.
    var UNTITLED_FILE_PREFIX = '無題_';
    
    var DEFAULT_CHARSET = 4;  // UTF-8
    var DEFAULT_NEWLINE = 1;  // CRLF
    
    var fso = new ActiveXObject('Scripting.FileSystemObject');
    
    
    // 無題タブかどうかチェック
    if (Editor.GetFilename() != '') return;
    
    var untitled_dir = UNTITLED_PARENT_DIR;
    if (!untitled_dir) {
        // サクラエディタ本体のあるディレクトリパスを取得
        var exe_dir = fso.GetParentFolderName(Editor.ExpandParameter('$S'));
        untitled_dir = fso.BuildPath(exe_dir, UNTITLED_DIR_NAME);
    }
    
    var save_index = -1;
    if (!fso.FolderExists(untitled_dir)) {
        // 無題ファイル保存先フォルダが存在しない場合
        
        // フォルダを作成
        fso.CreateFolder(untitled_dir);
        
        save_index = 0;
    }
    else {
        // 無題ファイル保存先フォルダが存在する
        
        // 若い添え字から順にファイルオープン可能か調べ、ファイルが存在しない
        // orロックされてない添え字を取得
        for (var i=0; i < 64; ++i) {  // 暴走防止のため、あえて制限を課しておく
            var save_path = fso.BuildPath(untitled_dir, UNTITLED_FILE_PREFIX + i);
            
            if (!fso.FileExists(save_path)) {
                save_index = i;
                break;
            }
            try {
                var file = fso.OpenTextFile(save_path, 2);
                file.Close();
                
                save_index = i;
                break;
            } catch (e) {
                // ファイルを書込みモードで開けない = 編集中と判断し、
                // 次の添え字のファイルを試す
//				Editor.TraceOut(
//					'Exception occured at OpenTextFile [index = ' + i + ']');
            }
        }
        if (save_index == -1) {
            var wshShell = new ActiveXObject('WScript.Shell');
            wshShell.Popup(
                '無題ファイル数の制限に達したため保存できませんでした', 0, 
                'サクラエディタマクロ - ' + fso.GetFileName(
                    Editor.ExpandParameter('$M')), 0 + 48);
            return;
        }
    }
    
    // 無題ファイルを保存
    var save_path = fso.BuildPath(untitled_dir, UNTITLED_FILE_PREFIX + save_index);
    Editor.FileSaveAs(save_path, DEFAULT_CHARSET, DEFAULT_NEWLINE);
})();

  • サクラエディタの共通設定で、ファイルの排他制御を”しない”に設定している場合、正しく動作しないようです。 -- 2014-01-17 (金) 15:21:03
  • 排他制御を”しない”に設定している場合、65行目のbreak;をコメントアウトすると動作します。ただ、一時ファイルの削除が行われなくなるので定期的に一時ファイルの削除を主導で行う必要があります -- 2014-12-19 (金) 10:09:50

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

    ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS