| 2chのスレで話題になっていたので
私も書いてみました。
/*
openMRU.js: 最近使ったファイルを開く
(Unicode 版専用)
使い方:
最初にスクリプトを実行すると、最近使ったファイルがリストされます。
リストされたファイル名のうち、
開きたいものの「行頭」に何か「1文字」を「挿入」してください。
それがチェックマークになります。
そしてこのスクリプトをもう一度実行すると、
チェックしたファイルを一度に開きます。
☆タスクバーにサクラを常駐していると、
最近使ったファイルのリストが古いことがあります。
*/
//____________________________________________________________________________
function ListMRU()
{
// MRU をリストして表示
// 改行文字を取得
var lc = Editor.GetLineCode();
if(lc == 0) lc = '\r\n';
else if(lc == 1) lc = '\r';
else lc = '\n';
// MRU を取得して
var asMRU = GetMRU(Editor.ExpandParameter('$I'));
// リストを書き出す
Editor.InsText('\t' + asMRU.join('\t*' + lc + '\t') + '\t*' + lc);
}
//____________________________________________________________________________
function GetMRU(sIniPath)
{
// sakuraW.ini から MRU リストを取り出す
var asMatch = LoadUTF8File(sIniPath).match(/^MRU\[\d+\]\.szPath=.*?$/gm);
var asMRU = [];
if(asMatch){
for(var i = 0; i < asMatch.length; ++i){
asMatch[i].search(/^MRU\[\d+\]\.szPath=(.*)/);
asMRU[i] = RegExp.$1;
}
}
return asMRU;
}
//____________________________________________________________________________
function LoadUTF8File(sFilePath)
{
// UTF8 のファイルを読み込む
return DecodeUTF8(LoadBinaryFile(sFilePath));
}
//____________________________________________________________________________
function LoadBinaryFile(sFilePath)
{
// バイナリデータを読み込む
fso = new ActiveXObject('Scripting.FileSystemObject');
// バイナリモードがないのでUNICODEで開く
var s = fso.OpenTextFile
( sFilePath
, 1 /*generic_read*/
, false /*open_existing*/
, true /*utf-16 le*/
).ReadAll();
// wchar_t[] -> byte[]
var a = [];
for(var i = 0; i < s.length; ++i){
var c = s.charCodeAt(i);
var k = 2 * i;
a[k] = c & 0xff;
a[k+1] = (c >> 8) & 0xff;
}
return a;
}
//____________________________________________________________________________
function DecodeUTF8(aUTF8)
{
// UTF8 のバイナリデータを、デコードする
var as = []; // デコードされた文字の配列
var iS = 0; // as のインデクス
var iA = 0; // aUTF8 のインデクス
while(iA < aUTF8.length){
var bytes;
var c = aUTF8[iA++];
if((c & 0x80) == 0){
bytes = 1; // 1バイト文字
}
else if((c & 0xe0) == 0xc0){
bytes = 2; // 2バイト文字
c &= 0x1f;
}
else if((c & 0xf0) == 0xe0){
bytes = 3; // 3バイト文字
c &= 0x0f;
}
else if((c & 0xf8) == 0xf0){
bytes = 4; // 4バイト文字
c &= 0x07;
}
else if((c & 0xfc) == 0xf8){
bytes = 5; // 5バイト文字
c &= 0x03;
}
else if((c & 0xfe) == 0xfc){
bytes = 6; // 6バイト文字
c &= 0x01;
}
else { // エラー
bytes = 1;
c = '?';
}
// 多バイト文字をデコード
for(var i = 1; i < bytes; ++i){
var t = aUTF8[iA++];
if((t & 0xc0) == 0x80){
c = (c << 6) + (t & 0x3f);
}
else{ // エラー
c = '?';
--iA;
}
}
as[iS++] = String.fromCharCode(c);
}
return as.join('');
}
//____________________________________________________________________________
// スタートアップ
// 初回起動か調べつつ、ファイルを開く
var isVirgin = true;
for(var i = 1; /*forever*/ ; ++i){
var s = Editor.GetLineStr(i);
if(s == '') break;
// ファイル名を取得
if(s.search(/^([^\t]?)\t(.*)\t\*$/m) < 0) continue
var sCheck = RegExp.$1;
var sFile = RegExp.$2;
// ファイル名の行があるなら、初回でない
isVirgin = false;
// チェックされていれば開く
if(sCheck != ''){
Editor.FileOpen(sFile);
}
}
// 初回起動なら、ファイルをリスト
if(isVirgin){
ListMRU();
}
// eof
|
|
ななし Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) |
|