|
前のマクロでは、ヒストリに常駐とかは考慮していませんでした。
ファイルメニューのように、表示個数に収まるように常駐を寄せて持ってくるのは、
同じようなロジックのマクロを作る必要があって大変面倒なことになります。
最近動作環境に追加した、ヒストリ常駐の動作の[上位に表示]のように一番上にもっ
てくるのであれば、比較的マクロを作るのもやりやすいです。
ファイル名部分とフォルダ名部分を分けるのは、文字列をどうにかすればそういうマ
クロはできると思いますが、左のツラを合わせるのは困難です。
メニューのフォントは普通はプロポーショナルフォントなので、空白で合わせるのは
無理で、タブ文字で合わせようとすると、勝手に右揃えになってしまいます。
ある程度妥協したマクロであれば以下のような感じになります。
一部jsで書いていて、別に使わなくてもできるのですが、こっちのほうが書きやすい
ので使ってしまいました。
FileSystemObjectも使わなくていいのですが、ファイル名とフォルダ名を分けるため
だけの手抜きの手法です。
$open="";
#i=0;
while(getfilehist(#i) != ""){
//あらかじめ変数に入れておいたほうが高速
$aHist[#i]=getfilehist(#i);
$aPin[#i]=getfilehist(#i,1);
#i=#i+1;
}
#m=#i;
js{
n=20;
m=getVar("#m");
c=0;
aFile=[];
aName=[];
fso=createobject("Scripting.FileSystemObject");
for(j=0;j<2;j++){ // 1周目常駐
for(i=0;i<m;i++){
file=getVar("$aHist["+i+"]");//getfilehist(i)
fPin=(getVar("$aPin["+i+"]")=="1");//getfilehist(i,1)
if(j==0 ? (!fPin) : fPin) continue;
aFile[c]=file;
aName[c]=(fPin?"★":" ")+"&"+c+" "+fso.GetFileName(file)+"\t"+fso.Get
ParentFolderName(file);
c ++;
if(c==n){
aName[c]="\x01\tファイルヒストリのつづき(&\\)";
c ++;
}
}
}
r=menuarray(aName, c);
if(r>0){
setVar("$open",aFile[r-1]);
}
fso=null;
}
if($open!=""){
openfile $open;
}
endmacro;
|
|