メッセージ

2004年10月28日の記事

2004/10/28(木)自動で名前を付けて保存するマクロ

秀丸で編集中のファイルに名前を付けて保存するのが面倒な時、自動で名前を付けて保存するマクロを考えてみた。日付をファイル名にすることも考えたが、紙2001のようにファイルの先頭にある文字列(先頭から半角16文字。全角だと8文字)でファイル名を付けると、ファイルの内容が分かるので便利だろう。

//autosave.mac
$dir = "C:\\temp";
if(basename == ""){
  gofiletop;
  replacedown "\n","",regular;
  #result = result;
  selectline;
  $text = gettext(seltopx,seltopy,selendx,selendy);
  if(#result == 1){undo;}
  if($text == ""){
    message "このファイルには何も書かれていません。\n保存できません。";
    endmacro;
  }else{
  #text = strlen($text);
  if(#text % 2 != 0){
    $text ="1" + $text;}
  $basename = leftstr($text,16);
  $filename = $dir + "\\" + $basename + ".txt";
  saveas $filename;
  }
}
endmacro;

先頭から16バイトまでに半角と全角が混じった文章で半角が奇数個の場合、拡張子.txtの付いたファイル名が付けられない。具体的には“「デビルマン」”というタイトルが1行目にあると、“「デビルマン・txt”と、ピリオド“.”ではなく、全角のナカテン“・”が付いたファイル名になってしまう。が7バイトなので、16バイト目の文字の半角分だけ取ろうとするからだ。仕方がないので、そういう場合は先頭に半角の1を付け加えて半角文字が偶数になるようにした。

一昨日書いたtDiary入力補助マクロの最初の部分に付け加えると吉か。ただし、日記によくあるリンクになっているタイトルの場合はファイル保存ができない。<&lta href="http;//…なんていう文字列はファイル名には使えませんね。ここを改良する必要があります。

で、そういう場合は日付+時間をファイル名にすることにした(いい加減な対応)。結局、サブルーチンを入れて長くなってしまった。改良版はautosave.mac.txtを参照。

秀丸ホームページのマクロライブラリを見てみたら、同じ趣旨のマクロが既に登録してあった。名前を付けて保存マクロ改。やっぱりね。内容か日付かでファイルを保存するところまで同じ。ま、僕のマクロはtDiary用ということで。