2015年7月14日火曜日

ブックマークリストをローテート


挨拶


僕は、ブックマークをリストファイルの形で管理しており、それをメニューで呼び出せるようにしている(参考:ブックマークをリストファイルにして保存)。




今回は、ブックマークリストの切り替えを、メニューを介さずに行う方法を考察する。ちなみに、ブックマーク自体については


を参照のこと。

準備


上に載せたリンクから、

  • 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    ブックマークしたフォルダに順次移動 

の二つの操作だけで、たいていは目的のフォルダに行けて、効率性が上がるのではないか、ということです。


0 件のコメント:

コメントを投稿