2013年12月29日日曜日

最初のエントリにカーソル移動 + α

以前作ったcursormove.jsを作り直す。(参考:カーソル移動を素早くする(改)

cursormove.jsは、最初のエントリにカーソル移動するためのスクリプト。ただそれだけだと寂しいので、

  • 最初のエントリで実行 → 最初のファイルへ
  • 最初のファイルで実行 → 番最後のエントリへ

とカーソル位置を移動するようにしている。


たとえばこのようなフォルダ構成だったら、①→②→③→①…という動きをする。

汎用性があるかどうかというと多分微妙なのだろうが、僕の中では使用頻度が高い。フォルダ構成その他で思うように機能しないことが多々あり、そのたびに少しずつ修正をしてきたが、元々のスクリプトがこんがらがってたので一新。

以下をScriptフォルダに保存。

CursorMove2.js

//!*script


// 最初のエントリ位置取得
var fn;
for (var i = 0; i < 3; i++) {
  if (PPx.Entry(i).Name != "." && (PPx.Entry(i).Name != "..") ) {
    fn = i
    break;
  }
}

// 最初のファイル位置取得
var ff;
for (var i = fn; i < PPx.EntryAllCount; i++) {
  if (PPx.GetFileInformation(PPx.Entry(i).Name) != ":DIR") {
    ff = i;
    break;
  }
}

// エントリが一つ以下なら終了
if (PPx.EntryDisplayDirectories + PPx.EntryDisplayFiles <= 1) PPx.Quit();

// ファイルのみの場合
if (PPx.EntryDisplayDirectories == 0) {  // 最初のエントリなら最後に
  if (fn == PPx.EntryIndex){
    PPx.EntryIndex = PPx.EntryAllCount - 1;
    PPx.Quit();
  } else {  // それ以外なら最初に
    PPx.EntryIndex = fn;
    PPx.Quit();
  }
}

// ディレクトリのみの場合
if (PPx.EntryDisplayFiles == 0) {  // 最初のエントリなら最後に
  if (fn == PPx.EntryIndex){
    PPx.EntryIndex = PPx.EntryAllCount - 1;
    PPx.Quit();
  } else {  // それ以外なら最初に
    PPx.EntryIndex = fn;
    PPx.Quit();
  }
}

// ファイルとディレクトリがともにある場合

if (PPx.EntryIndex == fn){  // 最初のエントリなら最初のファイルに
  PPx.EntryIndex = ff;
} else if (PPx.EntryIndex == PPx.EntryAllCount - 1) {  // 最後のエントリなら最初のエントリに
  PPx.EntryIndex = fn;
} else if (PPx.EntryIndex == ff) {  // 最初のファイルなら最後のエントリに
  PPx.EntryIndex = PPx.EntryAllCount - 1;
} else {  // それ以外なら最初のエントリに
  PPx.EntryIndex = fn;
}

以下を編集して取込。 Ctrl+Eに割り振る。

KC_main = { ; PPcメイン窓
^E ,*script %0\Script\CursorMove2.js
}

0 件のコメント:

コメントを投稿