2013年12月31日火曜日

ドライブを順次変更する

あいさつ


つかさです。PPxでスクリプトを使わないとできなさそうなあふっぽいキーバインドを実現してみる編その4です。今回はドライブ順次変更。あふではCtrl+カーソル左右に割り当てられてます。

割りとよくありそうな機能だからヘルプをよく読めばもしかしたらスクリプトとか使わなくても普通にできる簡単なやり方がある気もしなくなくもない。

やりかた


以下の二つのファイルをScriptフォルダに保存。

NextVol.js

//!*script

var fs = PPx.CreateObject("Scripting.FileSystemObject");
var fn = PPx.Extract("%1");
var i;

var e = new Enumerator(fs.Drives);
var flds = new Array(); 
for (; !e.atEnd(); e.moveNext()) {
  if (e.item().DriveLetter == "A"){
  } else if (e.item().IsReady) {
    flds.push(e.item().DriveLetter);
  }
}
flds.sort(function(a, b){return a.toLowerCase() > b.toLowerCase()?1:-1;}); 
for(i = 0; i < flds.length; i++) {
  if( flds[i] == fn.slice(0,1) ) break;
}

if ( i == flds.length-1) i = -1;
var nextVol = flds[i + 1].charCodeAt(0) - 64;

PPx.Execute("%K\"@" + nextVol  + "\"");

PrevVol.js

//!*script

var fs = PPx.CreateObject("Scripting.FileSystemObject");
var fn = PPx.Extract("%1");
var i;

var e = new Enumerator(fs.Drives);
var flds = new Array(); 
for (; !e.atEnd(); e.moveNext()) {
  if (e.item().DriveLetter == "A"){
  } else if (e.item().IsReady) {
    flds.push(e.item().DriveLetter);
  }
}
flds.sort(function(a, b){return a.toLowerCase()>b.toLowerCase()?1:-1;}); 
for(i = 0; i < flds.length; i++) {
  if( flds[i] == fn.slice(0,1) ) break;
}

if ( i == 0 ) i = flds.length;
var nextVol = flds[i - 1].charCodeAt(0) - 64;

PPx.Execute("%K\"@" + nextVol  + "\"");

以下を編集して取込。あふと同じようにCtrl+カーソル左右でドライブ変更ができるようになる

KC_main = { ; PPcメイン窓
^LEFT ,*script %0\Script\PrevVol.js
^RIGHT ,*script %0\Script\NextVol.js
}

思ったこととか


あふと同じように、ディスクが入ってないドライブは無視するようにしている。あと、ドライブAは僕の環境だと読み込みに行くと時間食うので除外している。
Dなら4、Cなら3とドライブ文字を数値に変換して、%K"@4"の要領で移動しているのだが、力技っぽくてあまり気に入ってない。これってドライブの数が増えて10以上になったら都合が悪くなりそうな。さすがに試せないけど。だけど、%J"D:\"の要領で移動するとルートフォルダに移動してしまい、やりたい動作と少しずれる。
もっとうまいやり方あれば誰か教えてくだしあ


追記 14/01/07


作者さんからコメントいただきました

orz

0 件のコメント:

コメントを投稿