挨拶
僕は、ブックマークをリストファイルの形で管理しており、それをメニューで呼び出せるようにしている(参考:
ブックマークをリストファイルにして保存)。
今回は、ブックマークリストの切り替えを、メニューを介さずに行う方法を考察する。ちなみに、ブックマーク自体については
を参照のこと。
準備
上に載せたリンクから、
- setalias.js
- resetalias.js
- rotateExecute3.js
- alias2file.js
- file2allias.js
- bookmarkmenu.js
をScriptフォルダに保存しておく。
今回、新しく導入するのは、次のスクリプト。これもScriptフォルダに保存する。
RotateSubFile.js
//!*script
// フォルダ内のファイルパスを順番に返す
// 第一引数:フォルダパス
// 第二引数:識別子
// 引数がなければ終了
if (PPx.Arguments.Length < 2){
PPx.SetPopLineMessage("引数が正しくありません。");
PPx.Quit(-1);
}
fs = PPx.CreateObject("Scripting.FileSystemObject");
var objFileSys = new ActiveXObject("Scripting.FileSystemObject");
var fn = PPx.Arguments.Item(0);
var id = PPx.Arguments.Item(1);
var CurrentFile;
// フォルダが存在しなければ終了
if (objFileSys.FolderExists(fn) == false) {
PPx.SetPopLineMessage(fn+"は存在しません");
PPx.Quit(-1);
}
// 同階層のフォルダのリストを取得
objFolder = objFileSys.GetFolder(fn);
e = new Enumerator(objFolder.Files);
flds = new Array();
for( ; !e.atEnd(); e.moveNext()) {
flds.push(e.item().Name);
}
// フォルダが空なら終了
if (!flds[0]) {
PPx.SetPopLineMessage("ファイルは存在しません");
PPx.Quit(-1);
}
// 識別子が空ならリストの一番目を代入
if (!PPx.Extract("%'"+id+"'")){
CurrentFile = flds[0];
} else {
CurrentFile = PPx.Extract("%'"+id+"'");
}
// ファイルの位置を取得
for(i = 0; i < flds.length; i++) {
if( flds[i] == CurrentFile ) break;
}
var nextFile = flds[Math.min(i+1, flds.length-1)]; // 次のファイルを取得
// カレントフォルダがリスト最後なら最初にループ
if (nextFile == CurrentFile) {
nextFile = flds[0];
}
PPx.Execute("*set "+id+" = "+ nextFile); // 識別子に次のファイルをセット
PPx.Result = fs.BuildPath(fn,nextFile); // 値を返す
スクリプトの説明
このスクリプトは、
の二つの引数を取る。与えられたフォルダパス内にあるファイルパスを、1つずつ順番に返すスクリプトだ。
%0\Script\RotateSubFile.js,%0\bookmark,blistid
とすると、PPxフォルダのBookmarkフォルダ内のファイルを、順番に返す。例えば、Bookmarikフォルダ内が以下のようだとする。
すると、このスクリプトを実行する度に、
default.txt → 基本.txt → メモ.txt → 画像フォルダ.txt → default.txt → 基本.txt ……
の順番で、フルパスを返す。
このスクリプトと、
file2alias.jsを組み合わせる。file2alias.jsは、第一引数にリストファイルのパスを、第二引数に変更したいエイリアスを取るスクリプト。そこで、この第一引数として、RotateSubFile.jsを与えれば、Bookmarkフォルダにあるリストを切り替えることができるわけだ。
*script %0\Script\file2alias.js,%*script("%0\Script\RotateSubFile.js","%0\bookmark","blistid"),bookmark
こんな感じですね。
編集して取込
次に、以下を編集して取込。
-|K_bookmark =
-|K_bookmarklist =
KC_main = { ; PPcメイン窓
^S ,*setnextkey K_bookmark
^X ,*setnextkey K_bookmarklist
}
K_bookmark = { ** comment **
S , *script %0\Script\setalias.js,bookmark,%%1
R , *script %0\Script\resetalias.js,bookmark
^S , %j %*script("%0\Script\rotateExecute3.js","homu","bookmark")
',' , *script %0\Script\bookmarkmenu.js
}
K_bookmarklist = { ** comment **
^X , *set name=%*script("%0\Script\RotateSubFile.js","%0\bookmark","blistid") %: *linemessage %*name(X,%'name') %: *script %0\Script\file2alias.js,%'name',bookmark
X ,*linemessage defaultに戻しました %: *script %0\Script\file2alias.js,%0\bookmark\default.txt,bookmark
}
使い方
キーコマンドは以下。
- C_x C_x ブックマークリストを順次切り替え
- C_x x ブックマークリストをdefault.txtに切り替え
- C_s s フォルダをブックマークに登録
- C_s r ブックマークをリセット
- C_s C_s ブックマークしたフォルダに順次移動
- C_s "," ブックマークメニューを開く
C_x C_x で、ブックマークリストが切り替わる。今どのリストなのかは、左上にlinemessageで表示されるので、使いたいリストに行き当たるまで何度もC_x C_x 。
目的のリストに行き当たれば、次はC_s C_s 。これで、ブックマークリストに登録されているフォルダに順次切り替わる。
想定している使い方
ファイラを使って行う作業は、わりと限られていると思う。僕の場合は、
- 画像ファイル管理
- 文書の作成
- ダウンロードしたファイルの利用
あたりだ。そして、それぞれの作業で使うフォルダというのも限られている。
- 画像管理……個々の画像フォルダ
- 文書の作成……メモフォルダ、ドキュメントフォルダ
- ダウンロードしたファイルの利用……ダウンロードフォルダ、一時展開用フォルダ、ソフトウェアフォルダ
といったように。
ならば、作業ごとにブックマークリストを作っておき、それを順次切り替えれば、普段行うフォルダ移動というのは、だいたい網羅できてしまうのではないか。そう思って、今回の仕組みを考えた。
つまり、そのようなブックマークリストを作っておけば、後は
- C_x C_x ブックマークリストを順次切り替え
- C_s C_s ブックマークしたフォルダに順次移動
の二つの操作だけで、たいていは目的のフォルダに行けて、効率性が上がるのではないか、ということです。