2023年1月30日月曜日

フォルダ構造とバックアップの方法

バックアップの方法についてのメモ。一年に一度程度、バックアップをしようと思い立つのだが、そのたびにやり方を忘れているので備忘録に。

フォルダ構造

僕はフォルダ構造を以下のようにしている。これは10年以上変わっていない。

[D:\]
 ├ [bin]
 ├ [data]
 ├ [work]
 ├ [temp]
 └ [download]
  • bin:実行ファイル関係
  • data:内容が変化しないファイル。画像、音楽、書籍、論文等の完成済みのもの
  • work:内容が変化するファイル。作業中で未完成のもの
  • temp:一時的なファイル。書庫の解凍をしたり、試しにダウンロードした実行ファイルをここに置いたりする
  • download:ダウンロードしたファイル

過去の記事を読むと、

  • ファイラでいじりやすいように単純なフォルダ構造にする
  • バックアップしやすいようにバックアップが必要なフォルダとそうでないフォルダを分ける
  • 時間経過によって破綻しないフォルダ構造にする

あたりを意識していたようだ。

バックアップの区分

  • workフォルダ:普段からバックアップ
  • dataフォルダ:たまにバックアップ

と分ける。

普段からバックアップ

workフォルダにある自作のファイルは、一度失うと取り返しがつかず、深刻なダメージを受けてしまう。最低でも一日おき、できればリアルタイムでバックアップをしたい。そこで、ここにあるファイルはDropBox等を用いてバックアップする。

たまにバックアップ

dataフォルダにあるファイルは、年に一度程度、外付けHDDに保存する。この外付けHDDは普段はPCにはつなげず、別の場所に保管しておく。 もちろん、NASとかRAIDとかを駆使して、workフォルダもdataフォルダも定期的に保存できればそれがいいが、そこまでしなくてもいいかと現状では思っている。

バックアップの手順

バックアップ時は以下の手順を取る。

ファイル整理

まず、tempフォルダとworkフォルダを整理する。 tempにあるファイルは、基本全て削除してもいいはずなので、ざっと確認したのちに削除する。 workフォルダにあるファイルは、dataフォルダに移動する。この際にカテゴリ分けも行う。

[Data]
 ├ [写真]
 ├ [Music]
 ├ [拾った画像]
 ├ [書籍]
 └ [ドキュメント]
     ├ [2022]
     ├ [2021]
     ├ [2020]
     ├ [2019]
     ├ [2018]
     ├ [2017]
     └ [2016]

こうしてtempフォルダ、workフォルダが空になり、必要なファイルがdataフォルダに移動した段階で、dataフォルダのバックアップを行う。

バックアップツール

僕はPPxのDirMirrorか、fastcopyを利用してバックアップを行っている。 カーソル下フォルダを反対窓にミラーリングする場合は、それぞれ以下のようになる。

  • PPx
*file DirMirror -dest:%2
  • fastcopy
%OB D:\bin\FastCopy\fcp.exe /cmd=sync /auto_close /bufsize=1024 /error_stop %#FCD /to=%2\

2023年1月27日金曜日

zoxide+nyagosでディレクトリ移動

某所で一時期話題になっていたzoxideを使ってみる。ppbだと標準出入力の扱いがややこしいので、nyagosを利用する。まずは

をインストールする。scoopとかchocolatey みたいなパッケージ管理ソフトを使うと、パスも勝手に通してくれて便利。

次に以下をPPxフォルダに保存。

jumppath.lua

hoge = nyagos.eval("zoxide query -i")
nyagos.exec(arg[1] .. "PPBW.EXE -c *execute C,*jumppath \"" .. hoge .. "\"")

以下を編集して取込。

KC_main = {
LOADEVENT ,*ifmatch "o:e,a:d",%1 %: %Obcd zoxide add "%1"
}
Mes0411	= {
EXEF	= 
}

以下を実行。

%Oq *run -noppb -pos:%*windowrect(,l),%*windowrect(,t) nyagos -f %0jumppath.lua %0

参考

追記

2023-04-22:書庫内のパスを登録しないようにした。

2023-05-06:登録パスに空白があってもパス変更ができるように修正。

2023年1月26日木曜日

PPvをPPcの中央に順次移動

PPvを起動中のPPcの中央に順次移動できるようにする。

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

next_ppc_id.js

以下を編集して取込。

KV_main	= {	; PPcメイン窓
^\RIGHT	,*ifmatch 0,0%*getcust(_User:center_id) %: *setcust _User:center_id=%*rightstr("%*extract(C"%%n")", 1)
	*string o,currentid=C_%*getcust(_User:center_id) %: *string o,newid=%*script(%0Script\next_ppc_id.js,%so"currentid") %: *string o,handle=%%NC%*rightstr("%so"newid"", 1) %: *fitwindow %*extract("%so"handle""),%N,20 %: *setcust _User:center_id=%*rightstr("%so"newid"", 1)
^\LEFT	,*ifmatch 0,0%*getcust(_User:center_id) %: *setcust _User:center_id=%*rightstr("%*extract(C"%%n")", 1)
	*string o,currentid=C_%*getcust(_User:center_id) %: *string o,newid=%*script(%0Script\next_ppc_id.js,%so"currentid") %: *string o,handle=%%NC%*rightstr("%so"newid"", 1) %: *fitwindow %*extract("%so"handle""),%N,20 %: *setcust _User:center_id=%*rightstr("%so"newid"", 1)
}

PPc[A] PPc[B] PPc[C]の三つが起動していた場合、PPv上でCtrl+Shift+カーソル左右で、

PPc[A]→PPc[B]→PPc[C]→PPc[A]→…

という順序でPPc中央に移動する。

2023年1月19日木曜日

ホイール操作でPPv表示ファイル切り替え

PPvのホイール操作で、PPc上の前・次のファイルを表示する「_others:pppv」という設定がある。これをPPvの隠しメニューに登録する。以下を編集して取込。

HM_ppv    = {    ; PPv
pppv    , _AUTO,_DBLU , *RotateCustomize _others:pppv,1,0 %: %K"loadcust"
}

隠しメニューのpppvをクリックすると、「PPvのホイール操作によるPPcの前・次のファイル表示」がトグルで切り替わる。

2023年1月12日木曜日

PPxでhowmの「予定表・todo」を実装する

howmファイルを並び替えることで、howmの「予定表・todo」をPPxでできるようにする。 howmの浮沈方式を採用しているが、正確に再現しているわけではない。

準備

以下をScriptフォルダに保存する。title2comment_all.jsはmoeにあるのと同じものなので、既に持っている場合は不要。

  • title2comment_all.js
  • settitle.js
  • Done.js
  • todosort.js

以下を編集して取込。

_Command	= {	; ユーザコマンド・関数
todo	= *script %0Script\settitle.js,%1,%*input("[%*now(date)]- " -title:"todo" -select:l) %: *setcust _User:todo=0
done	= *script %0\Script\Done.js
}

MC_celS    = {    ; エントリ表示 書式([;]メニュー)
todo	= B cF20,6 w50C u2,5 s1
}

KC_main = { ; PPcメイン窓
F6	,*script %0Script\title2comment_all.js %: *setcust XC_cwrt= 2
^R ,*comment "%ee%"コメントの編集"%{%*comment%|%}"
COMMENTEVENT2 ,*script %0Script\todoSort.js
}

実践

メモの作成

*todoを実行すると表示される一行編集に、内容を記入して[Enter]を押す。

すると、入力内容をタイトルにしたhowmファイルがフォルダ内に作成される。

書式は以下の通り。

種類 識別子 設定値
予定 @ [2023-01-15]@ 歯医者 予定が数日続く場合
締め切り ! [2023-01-15]! 手紙を書く 上昇するタイミング
todo + [2023-01-11]+ bluetoothアダプタ探す 上位に表示する日数
リマインダ - [2022-12-30]- ドライブの整理とバックアップ 上昇するタイミング
. [2022-12-23]. [2022-12-22]+ お金下ろす

ソート設定・表示設定

メモを「予定表・todo」形式で表示できるよう設定する。

  1. 「予定表・todo」用のフォルダで[F6]を押して、コメントファイルを作成する。
  2. [;]で表示形式メニューを表示し、「このパス以降」「todo」を選択する。
  3. 以下のコマンドを実行する。

*sortentry -thispath 27,1,0,B11111,1

Done!

完了した締切やtodoファイルをマークしたあと、*doneを実行する。すると、

[2022-12-24]- メガネの調整

が以下のようになり、優先度が最低まで下がる。

[2022-12-24]. [2023-01-04]- メガネの調整

その他

区切り線を追加したい場合

デフォルトでは、00_INDEX.TXTが完了済みのメモのすぐ上に来るようになっている。このファイルにカーソルをあわせて[Ctrl+R]を押して、「----------」とコメントを変更すれば、区切り線として機能させることができる。

さらに区切り線を追加したい場合は、SEPARATOR00000.TXTのようなファイルを作る。この数値部分をいじることて、表示の優先度を決めることができる。今日よりも7日前のメモと同じ優先度にしたいのであれば、SEPARATOR00007.TXT。14日前のメモと同じ優先度にしたいのであればSEPARATOR00014.TXTという具合だ。これらのファイルも、[Ctrl+R]からコメントを変更し、適当な区切り線を表示するようにしよう。

予定が数日ある場合

例えば飲み会が3日間続くのであれば

[2023-01-21]@3 飲み会

とする。 他の識別子についても、その後ろに設定値を付ければ挙動が変化するように一応実装はしてるが、うまく機能しないかもしれない。

ハイライト色

予定はハイライト7、締切はハイライト6を使っている。 ハイライト色を変えたい場合は、カスタマイザーを起動し、「色タブ - PPc エントリ背景/状態」から変更する。 todosort.jsをいじれば、ハイライト色を消したり、リマインダやtodoにもハイライト色をつけたりすることができる。

優先度について

1970年1月1日からの経過日数で計算している。

参考

2023年1月11日水曜日

PPvを単体で活用 - Everything編

PPvを単体で活用 - 表示ファイルの変更の続きです。今回はEverythingを利用してみる。

準備

Everything

  • voidtoolsからEverythingをダウンロード、インストールする。
  • 「ツール - オプション - ETP/FTPサーバ - ETP/FTPサーバを有効」にチェック
  • Everythingが起動してないとPPxから利用できないので、常時起動させておく
  • PPx

    TORO's Software library(Win32/Win64 PPx)からPPx Everything Search Moduleをダウンロード、インストールする

    以下のファイルをPPxフォルダに保存。補完候補ファイルとして利用する。

    everything_cmd.txt

    ext:jpg|jpeg|png|bmp|gif 
    ext:txt|cfg|ini|md|tex|js|html 
    dm:today ext:md|howm
    path:%0Doc ext:txt
    

    以下を編集して取込。動作を軽くするため、K_editのFIRSTEVENTで検索moduleをオフにしている。一行編集でもEverythingを使いたい場合は、この箇所を取り込まないように。

    KV_main	= {	; PPvメイン窓
    V	,*string o,name=%*input("" -title:"Everything Search" -k:"*completelist /set /file:%%0everything_cmd.txt") %: *ppc -r -bootid:x -single -k *whereis -text:"%so"name"" -type:5 %%: *mapkey use,K_syncwin %%: *ppvoption id %%*rightstr("%%n", 1) %%: *ppvoption sync on %%: *fitwindow %*extract("%%NV%*rightstr("%n", 1)"),%%NC,8
    }
    
    K_syncwin	= {
    ENTER	,*ifmatch "o:e,a:d+","%*name(CD,"%R","%1")" %: %K"@ENTER" %: *stop
    	%K"@Q
    }
    
    K_lied	= {
    FIRSTEVENT	,*completelist -module:off
    }
    

    やり方

    PPvで[V]を押すと一行編集が表示されるので、検索語を入力する。

    Everythingの検索結果を表示したPPcが、連動ビューONの状態で起動する。目的のファイルを見つけたら[ENTER]で閉じる。

    Everythingは拡張子で絞り込むこともできる。例えばテキストファイルを検索したい場合は、

    ext:txt|cfg|ini|md|tex|js|html  hogehoge
    

    画像ファイルを検索したい場合は、

    ext:jpg|jpeg|png|bmp|gif fugafuga
    

    とすればいい。

    また、時間を指定して検索することもできる。以下のようにすると、今日作成したmdファイルとhowmファイルを検索できる。

    dm:today ext:md|howm
    

    PPxフォルダにDocフォルダを作成、そこにPPXSCR.TXTやPPXWIN.TXTをいれておけば、カスタマイズをしていて「PPXSCR.TXTが見たい!」「PPXWIN.TXTはどこだ!」という際、以下で即座に表示できる。

    path:%0Doc ext:txt
    

    参考

    2023年1月3日火曜日

    PPvを単体で活用 - 表示ファイルの変更

    必要なときだけPPcを起動して、PPvの表示ファイルを切り替えられるようにする。これにより、PPcに紐付けられたビュアーとしてではない、PPv単体での活用が可能になる。

    以下を編集して取込。

    _Command	= {	; ユーザコマンド・関数
    opensyncwin	= *ppc -r -bootid:x -single -k *jumppath %*arg(1) %%: *mapkey use,K_syncwin %%: *ppvoption id %%*rightstr("%%n", 1) %%: *ppvoption sync on %%: *fitwindow %*extract("%%NV%*rightstr("%n", 1)"),%%NC,8
    }
    
    KV_main	= {	; PPvメイン窓
    O	,*opensyncwin %0
    }
    
    K_syncwin	= {
    ENTER	,*ifmatch "o:e,a:d+","%*name(CD,"%R","%1")" %: %K"@ENTER" %: *stop
    	%K"@Q
    }
    

    ユーザコマンド*opensyncwinにパスを渡すと、そのパスをPPcで表示する。ここではPPxフォルダのパスを渡している。

    操作は以下の通り。

    1. PPvを起動
    2. [O]を押すとPPcが連動ビューONで起動
    3. 目的のファイルを見つけたら[ENTER]でPPcが閉じる

    応用編

    *opensyncwinに渡すパスを変えてみよう。

    表示中のファイルパスを渡す

    PPvで表示中のファイルのパスを渡す。

    *opensyncwin %FCD
    

    ListFileを渡す

    予め作っておいたListFileを渡す。以下はPPxフォルダにあるforppv.txtを渡す場合。

    *opensyncwin %0forppv.txt
    

    ListFileは、*makelistfileを使うと作るのが簡単。

    例えば登録したいエントリをマークし、*makelistfile %0forppv.txt -basic -marked でListFileを作成することができる。 また、PPcでListFileを表示し、そこにエントリをコピーをすると、そのエントリを登録することができる。

    スクリプトで作成したListFileを渡す

    PPvの表示履歴を渡す。 以下をScriptフォルダに保存。

    ppvhistory.js

    //!*script
    // %hvnをListfile形式で一時ファイルに保存し、パスを返す
    // 例:*ppc -bootid:z -single %*script(%0\Script\ppvhistory.js)
    
    // 一時ファイルを作成
    var tempfile = PPx.Extract("%*temp\(\)ppvhis.txt");
    var strLine = ";ListFile\r\n";
    
    // %hvnを20まで取得
    for (var i = 0; i < 20; i++) {
      if (PPx.Extract("%hv"+i)!="") {
        strLine += PPx.Extract("%hv"+i)+ "\r\n";
      } else {
        break;
      }
    }
    
    // 一時ファイルに書き込み
    var fs = PPx.CreateObject("Scripting.FileSystemObject");
    var f = fs.OpenTextFile(tempfile, 2, true, -1); // unicodeで書き込み
    f.Write(strLine);
    f.Close();
    
    PPx.Result = tempfile;
    

    以下のコマンドをPPvから実行する。

    *opensyncwin %*script(%0\Script\ppvhistory.js)