2015年12月27日日曜日

txtをhowmに変換するスクリプト

テキストファイルをhowm形式に変換するスクリプトを作った。
変換したいファイルにマークして実行することで、カレントディレクトリにhowmファイルを新規作成する。

こういうテキストファイルが



こんな感じに。



やり方


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

txt2howm.js

//!*script
// マークしたtxtファイルからhowmファイルを新規作成

var currentDir  = PPx.Extract('%1');
var EntryObj = PPx.Entry;0
var RetCD = EntryObj.FirstMark; 
var objFileSys = PPx.CreateObject("Scripting.FileSystemObject");
var nowdate = PPx.Extract("%*nowdatetime(Y-N-D)");
var nowtime = parseInt(PPx.Extract("%*nowdatetime(HMS)"));

if (RetCD != 1){ // マークがないときはカーソル下のファイルを処理
  if (!PPx.EntryName.match(/.txt$/i)) { // txtファイルでなければ終了
    PPx.Echo("拡張子がtxtではありません");
    PPx.Quit();
  }
  var objItem = currentDir + "\\" + PPx.EntryName;
  var outputfile = PPx.Extract("%*nowdatetime(Y-N-D-HMS)")+".howm";

  // ファイルの内容を取得しhowm形式に変換
  objInFile = objFileSys.OpenTextFile(objItem, 1);
  var str = "= " + objInFile.ReadAll() + "\n\n[" + PPx.Extract("%*nowdatetime(Y-N-D H:M)") +"]";
  objInFile.Close();
  
  // カレントディレクトリにhowmファイルを作成
  strCreateFile = objFileSys.BuildPath(currentDir,outputfile);
  objFileSys.CreateTextFile(strCreateFile);

  // howmファイルに書き込み
  objOutFile = objFileSys.OpenTextFile(strCreateFile, 2);
  objOutFile.Write(str);
  objOutFile.Close();
} else { //マークがあるときは順番に処理
  i = 0
  while(true){
    var entryName = EntryObj.Name;
    var hoge = nowtime + i // ファイル名の重複を避けるための処理
    var objItem = currentDir  + "\\" + entryName;
    var outputfile = nowdate + "-" + hoge +".howm";

    if (!entryName.match(/.txt$/i)){ // 拡張子がtxtでなければスキップ
    }
    else {
      // ファイルの内容を取得しhowm形式に
      objInFile = objFileSys.OpenTextFile(objItem, 1);
      var str = "= " + objInFile.ReadAll() + "\n\n[" + PPx.Extract("%*nowdatetime(Y-N-D H:M)") +"]";
      objInFile.Close();
      
      // カレントディレクトリにhowmファイルを作成
      strCreateFile = objFileSys.BuildPath(currentDir,outputfile);
      objFileSys.CreateTextFile(strCreateFile);
      
      // howmファイルに書き込み
      objOutFile = objFileSys.OpenTextFile(strCreateFile, 2);
      objOutFile.Write(str);
      objOutFile.Close();
      
      i = i+1;
    }
    if(EntryObj.NextMark != 1) break; // 最後のマークなら終了
  }
}

変換したいテキストファイルにマークしてから



以下を実行。
*script %0\Script\txt2howm.js

カレントディレクトリにhowmファイルが新規作成される。



作った理由


僕は、たまにポメラでメモをとっている。それをhowm形式に直すとき、今までは一々手作業でコピペをしていた(SETZERのFIFOモードを起動し、一時コマンドClipFile.jsでコピー。あとは、howmの新規作成→ペーストを繰り返す)。

ファイル数が少ないうちはそれでも別に良かったのだが、今回30くらいメモを作ったので、もうこれ面倒だな!と思って作りました(こなみかん)

2015年12月18日金曜日

PPvの複数表示


つかさです。
今回やりたいのは、PPvの複数表示。こんな感じに、複数の画像ファイルやテキストファイルを並べて表示、ということがしたい。



PPv[A]は通常表示に、他のIDのPPvは一時的に表示したいファイルに利用する。

設定


以下を編集して取り込み。
KC_main = { ; PPcメイン窓
\Q ,*closeppx V*
TAB ,*ifmatch //,%NVA %: *focus VA %: *stop
 %K"@TAB"
}
KV_main = { ; PPvメイン窓
UP ,*ifmatch A,%*regexp(%n,"/.(.)/$1/") %: %K-C"@UP@N" %: *stop
DOWN ,*ifmatch A,%*regexp(%n,"/.(.)/$1/") %: %K-C "@DOWN @N" %: *stop
LEFT ,*ifmatch A,%*regexp(%n,"/.(.)/$1/") %: *execute C,*cursor 6, -1 %: %K-C"@N" %: *stop
RIGHT ,*ifmatch A,%*regexp(%n,"/.(.)/$1/") %: *execute C,*cursor 6, 1 %: %K-C"@N" %: *stop
SPACE ,*ifmatch A,%*regexp(%n,"/.(.)/$1/") %: %K-C"@SPACE@N" %: *stop
\SPACE ,*ifmatch A,%*regexp(%n,"/.(.)/$1/") %: %K-C"@\SPACE@N" %: *stop
ENTER ,%K"@Q"
F11 ,*ppv /noactive "%1\\%R" /k *focus VA
\Q ,*closeppx V*
TAB ,*focus C
FIRSTEVENT , *execute C,*ppvoption id a
CLOSEEVENT , *focus C
}
E_cr = { ; [Enter]用判別
:JPEG ,
:BMP ,
:XJS ,
:XVBS ,
PNG ,*ppv "%1\\%R"
JPG ,*ppv "%1\\%R"
JPEG ,*ppv "%1\\%R"
BMP ,*ppv "%1\\%R"
GIF ,*ppv "%1\\%R"
TXT ,*ppv "%1\\%R"
CPP ,*ppv "%1\\%R"
H ,*ppv "%1\\%R"
C ,*ppv "%1\\%R"
L ,*ppv "%1\\%R"
EL ,*ppv "%1\\%R"
HTML ,*ppv "%1\\%R"
HTM ,*ppv "%1\\%R"
XYZZY ,*ppv "%1\\%R"
EMACS ,*ppv "%1\\%R"
SCM ,*ppv "%1\\%R"
INI ,*ppv "%1\\%R"
VBS ,*ppv "%1\\%R"
JS ,*ppv "%1\\%R"
PY ,*ppv "%1\\%R"
PYW ,*ppv "%1\\%R"
HOWM ,*ppv "%1\\%R"
CFG ,*ppv "%1\\%R"
KIF ,*ppv "%1\\%R"
LOG ,*ppv "%1\\%R"
}

具体的にやったことは以下。
  • PPv上でF11でファイルを別IDのPPvで表示
  • PPv[A]以外ではカーソルキーを効かないように
  • PPv[A]があるときは、TabでPPc-PPv[A]間を切り替え
  • Shift+QでPPvをすべて終了
  • PPv起動時に、FIRSTEVENTで通常表示に使うPPvをPPv[A]に設定

想定してるやり方


画像やテキストファイルをPPv[A]閲覧中、あとで参照したいものがあったら、F11を押す。



すると、同じファイルをPPv[B]で表示する。



この時、フォーカスはPPv[A]のまま。そのままPPv[A]で連動ビューを続けることが可能。
またF11を押すと、今度は別のIDのPPvで表示する。



こうすることで、複数のファイルを見比べる、ということが実現できる。

2015年12月7日月曜日

月区分のごみ箱(deleted$)

前回言ってたやつです。

PPxには、deleted$というフォルダを作成してそこに保存する、という削除方法がある。
deleted$フォルダを月で区分し、その中にファイルを保存するようにすれば、後で参照するときに楽になるのではないか、と思いついた。



こんな感じですね。

スクリプトを使うまでもなく、*ppcfileで普通に行けそうです。以下のコマンドでおk。

*ppcfile !move,D:\Work\deleted$\%*nowdatetime(Y-N),/sameall:on /same:5 /querycreatedirectory:off

D:\Work\deleted$以下を月でフォルダ分けして、ファイル移動するようにしている。もし同名ファイルがあれば、末尾に数字を付ける。
ちなみに、前回やってたパスの分岐は次のようになる。

KC_main = { ; PPcメイン窓
D ,*ifmatch "/D:\\Work/",%1 %: *ppcfile !move,D:\Work\deleted$\%*nowdatetime(Y-N),/sameall:on /same:5 /querycreatedirectory:off %: *stop
 *ifmatch "/D:\\download/",%1 %: %K"@\D" %: *stop
 %K"@D"
}

2015年12月6日日曜日

パスで削除方法を変える

3つの削除方法


PPxには削除方法が幾つか用意されている。

1.エントリをごみ箱へ

エクスプローラーのごみ箱を使うやつです。Dでできる。

2.エントリの削除

ごみ箱を使わない削除。一度削除すると元に戻すことができない。Shift+Dでできる。

3.deleted$フォルダに移動

deleted$というフォルダを作成し、そこに削除ファイルを保存する。つまり、やってるのはファイル移動で実際には削除していない、ということですね。
以下のコマンドだと、カレントフォルダにdeleted$フォルダを作成する。

*file delete,,,/backup

deleted$フォルダがあっちこっちにできるのが嫌なら、処理先フォルダを指定する。例えばDataフォルダ以下にまとめたいなら、次のようになる。

*file delete,,"D:\Data",/backup

分岐させてみる


今までは、特に何も考えずに「2.エントリの削除」をしてたが、自分で作成したファイル等については、「3.deleted$フォルダに移動」のほうが安全かな、と思うようになった。というわけで、Dを押した時に

  • Workフォルダ(自作のファイルがあるフォルダ)……3.deleted$フォルダに移動
  • Downloadフォルダ……2.エントリの削除
  • それ以外……1.エントリをごみ箱へ

と分岐させてみる。
KC_main = { ; PPcメイン窓
D ,*ifmatch "/D:\\Work/",%1 %: *file !delete,,,/backup %: *stop
 *ifmatch "/D:\\download/",%1 %: %K"@\D" %: *stop
 %K"@D"
}

削除したファイルを後で探す時のことを考えると、もっと適切な方法があるかもしれない。少し考えてみよう。処理先フォルダを指定して、それをさらに月ごとにフォルダ分けするとかかなあ。スクリプト使えばすぐできそうですね。