新規作成時のファイル名をカスタマイズできるようにする

  1. Mery 快適に使っています。
    新しいファイル作成時、ファイル名が「無題1」となるかと思いますが、これをカスタマイズすることはできますか。
    私の使い方として、Mery の自動保存機能を使って、OneDrive へファイルを溜め込むようにしているのですが
    複数台の PC で同じ OneDrive ディレクトリへファイルを溜め込もうとすると、
    PC_A の「無題1」が PC_B の「無題1」 に上書きされてしまいます。
    また、PC 再起動などで Mery を再起動した際にも、以前の「無題1」が今回作成した「無題1」に上書きされてしまうかと思います。

    例えば、新規作成時のファイル名を「日付-日時」のようなものにできると、ファイル名の衝突を限りなく排除でき、私の理想とするメモの溜め込み、自動保存ができるな、と考えています。
    そのようなマクロないし、機能があるようでしたら教えて下さい。

     |  HI-PON  |  返信
  2. Mery をご愛用いただきありがとうございます。

    [自動保存] の設定で [同名のファイルが存在する場合はファイル名を変更する] にチェックを入れておけば、上書きされるのは回避できますが、これだとどんどんファイルが増えていくのでダメっぽいですかね?

    新規作成時のファイル名ですが、一応、隠しオプションで変更することは可能です。

    [General]
    Untitled=無題

    ↑ Mery.ini にこれを追記すれば、指定した文字列が適用されます。

    Mery.ini の編集は Mery を終了 (常駐している場合は常駐も終了) させた状態で、Mery.ini をメモ帳などの Mery 以外のエディタで編集してください。

    でも、日付や日時を使うことはできないので、ファイル名の衝突回避といった目的では利用できそうにありませんね。

    上記のオプションのご要望 (Ver 2.6.1 のコメント欄にて) をいただいたときに、例えば「Untitled=無題-%number%」とか「Untitled=%date%」のような感じで日付などを含めて書式指定できる機能を提案していますが、そのときは特に需要がない感じだったので実装は見送ってますね ^^;

    マクロにもそういった機能は用意されていませんから、残念ながら現状の仕組みでは対応できないと思います。

     |  Kuro  |  返信
  3. こんなマクロはいかがでしょう。
    Meryを×64にしてからマクロに触れていないので、少々不安ですが、
    ファイル名の後ろに、年月日時分秒をつけて保存するマクロです。

    -----------------------------------------------
    #title = "保存&スナップショット"
    // saveAstemporary.js
    // 2013/01/19
    // 2013/02/23
    // 2014/04/04

    var s = Editor.ActiveDocument.Selection.Text;
    if ( s.length == 0 ){ document.save(); Quit() ;}
    Notify();
    // if ( document.Name != "" ){
    // document.save();
    // Editor.NewFile();
    // var newdoc = Editor.Documents.Item( Editor.Documents.Count - 1 );
    // newdoc.Write( s );
    // newdoc.save( new_Filename( document.FullName ) );
    // newdoc.saved = true;
    // newdoc.close();
    // Status = "saved !";
    // } else {
    // document.save( new_Filename( document.FullName ) );
    // };

    if ( document.Name != "" ){
    var this_file = document.FullName;
    document.save();
    var all_text = document.Text;
    document.Text = s;
    document.save( new_Filename( this_file ) );
    Editor.OpenFile( this_file );
    Status = "saved !";
    } else {
    document.save( new_Filename( document.FullName ) );
    };

    function new_Filename( filename ){
    var noname = "#MEMO#";
    var d = new Date;
    var tail = " - " + d.getYear() + p( d.getMonth() + 1 ) + p( d.getDate() ) + p( d.getHours() ) + p( d.getMinutes() ) + p( d.getSeconds() );

    var FSO = new ActiveXObject( "Scripting.FileSystemObject" );
    var parent_folder, basename, ext;
    if ( filename == undefined || !FSO.FileExists( filename ) ){
    parent_folder = new ActiveXObject( "WScript.Shell" ).SpecialFolders( "Desktop" )
    basename = noname;
    ext = "txt";
    } else {
    parent_folder = FSO.GetParentFolderName( filename );
    basename = FSO.GetBaseName( filename );
    ext = FSO.GetExtensionName( filename );
    };
    var s ="";
    s += parent_folder + "\\" + basename;
    s += tail;
    s += ( ext == "" )? "" : "." + ext;
    return s;

    function p( x ){ return ( "0" + x ).slice( -2 ) }
    }

    function Notify( soundFile ){
    if ( soundFile == undefined || soundFile.length == 0 ){
    soundFile = "C:\\Windows\\Media\\Notify.wav"
    }
    var strCommand = 'cmd /c "sndrec32 /embedding /play /close ' + soundFile + '"';
    new ActiveXObject( "WScript.Shell" ).Run( strCommand, 0, true );
    }

     |  手石  |  返信
スポンサーリンク