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)
    

    2022年12月31日土曜日

    PPv中心の連動ビュー(mapkey編)

    PPv中心の連動ビューには、「PPvを複数起動すると挙動が意図しないものになる」というデメリットがあった。これを避ける方法として、PPcとPPvのIDを一対一対応させる等色々試みてたが(参考:PPcとPPvのIDを一対一対応させる - つかさのほえほえ日記跡地)、*mapkeyで解決しそうだなと最近気づいた。

    準備

    以下を編集して取込。

    E_cr = { ; [Enter]用判別
    TXT ,*ppv %*name(CD,"%R","%1") -k *mapkey use,K_syncppv %%: *string i,ppcid=%%*rightstr("%n", 1)
    PNG ,*ppv %*name(CD,"%R","%1") -k *mapkey use,K_syncppv %%: *string i,ppcid=%%*rightstr("%n", 1)
    }
    
    K_syncppv	= {
    UP	,*execute C%si"ppcid",%%K"@UP" %: %v%*extract(C%si"ppcid""%(%*name(CD,"%R","%1")%)")
    DOWN	,*execute C%si"ppcid",%%K"@DOWN" % %v%*extract(C%si"ppcid""%(%*name(CD,"%R","%1")%)")
    LEFT	,*execute C%si"ppcid",%%K"@LEFT" % %v%*extract(C%si"ppcid""%(%*name(CD,"%R","%1")%)")
    RIGHT	,*execute C%si"ppcid",%%K"@RIGHT" % %v%*extract(C%si"ppcid""%(%*name(CD,"%R","%1")%)")
    SPACE    ,*execute C%si"ppcid",%%K"@SPACE" % %v%*extract(C%si"ppcid""%(%*name(CD,"%R","%1")%)")
    \SPACE    ,*execute C%si"ppcid",%%K"@\SPACE" % %v%*extract(C%si"ppcid""%(%*name(CD,"%R","%1")%)")
    }

    やり方

    PPcでE_crに登録した拡張子(ここではtxtかpng)にカーソルをあわせ、EnterでPPvを起動。PPvでカーソルを動かすと、起動元のPPcのカーソルが連動し、対応したファイルを表示する。

    2023-01-15追記

    シンプルに書き直した

    2022年12月5日月曜日

    サブ窓を使ってファイルを投げる

    Shift+Xでファイル判別をし、以下のように動作させる。

    • EXEファイル:サブ窓で選択したファイルあるいはフォルダを開き、そのパスを記憶
    • EXE以外:サブ窓で選択したEXEファイルで開き、拡張子ごとにパスを記憶
    • フォルダ:サブ窓で選択したEXEファイルで開き、そのパスを記憶

    例:xyzzy.exeにカーソルをあわせてShift+Xを押す。

    PPC[X]が開く。

    テキストファイルにカーソルをあわせてShift+Enter

    テキストファイルが開く。

    次にxyzzy.exeにカーソルをあわせてShift+Xを押した際、PPC[X]が以前選択したテキストファイルにカーソルをあわせた状態で開くことになる。

    _Command	= {	; ユーザコマンド・関数
    opensubwin	= *ppc -r -bootid:x -single -k *jumppath %*arg(1) -entry %%: *fitwindow %NC,%%NC,20 %%: *mapkey use,K_subwin %%: *linemessage %*arg(2)
    }
    
    E_subwin	= {
    *	,*setcust _User:temp_exec=%%Ob %%FCD %%*extract(%n"%%%%#FCD") %%: %%K"@Q" %%: *setcust S_ext2exe:%%*extract(%n"%%%%FT")=%%FCD
    	*opensubwin %*getcust(S_ext2exe:%FT),EXEファイルを選択してください
    EXE	,*setcust _User:temp_exec=%%Ob %%*extract(%n"%%%%FCD") %%#FCD %%: %%K"@Q" %%: *setcust S_exe2dist:%%*extract(%n"%%%%FCD")=%%1%\%%R
    	*opensubwin %*getcust(S_exe2dist:%FDC),実行対象のファイルあるいはフォルダを選択してください
    :DIR	,*setcust _User:temp_exec=%%Ob %%FCD %%*extract(%n"%%%%#FCD") %%: %%K"@Q" %%: *setcust S_dir2exe:%%*extract(%n"%%%%1")=%%FCD
    	*opensubwin %*getcust(S_dir2exe:%1),EXEファイルを選択してください
    }
    
    KC_main	= {	; PPcメイン窓
    \X	,%ME_subwin
    }
    
    K_subwin	= {
    \ENTER	,*execute ,%*getcust(_User:temp_exec)
    }
    
    
    

    2022年11月27日日曜日

    moeをgithub pagesに移転しました

    moeをgithub pagesに移行しました。


    それにあわせて色々と内容を見直してます。以前よりも導入が容易になっているので、メモの方法論に興味がある方はどうぞ!なにかあれば、ここのコメント欄に書くか、twitter、Mail等で連絡して下さい。

    私が運営している他のgithub pagesについてもよろしく! 

    2022年11月18日金曜日

    howmのタイトル表示方法変更

    最近、moeのHPをgoogleSiteからGitHub Pagesに移行しようと画策しており、その過程でスクリプトを見直している。 今までは、howmファイルのファイル名と一行目を対応させたコメントファイルを作成していたが、これを各エントリのコメントを変更するだけにする。コメントファイルは、XC_cwrtで自動作成すればいい。これなら、スクリプトをLOADEVENTに登録しても、以前のように無限ループに陥る心配をする必要がなくなるわけだ(多分)。

    やり方

    以下を編集して取込み。

    XC_cwrt    = 2    ; コメントファイル作成は    0:手動 1:確認有 2:自動

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

    title2comment.js

    //!*script
    
    // コメントのないhowmファイルの一行目をコメントに
    
    for (var a = PPx.Entry.AllEntry; !a.atEnd(); a.moveNext() ){
      // フォルダを除外
      if (a.Attributes & 16){
        continue;
      // .howmかつコメントがないファイルへの処理
      } else if (a.Name.match(/.howm$/i) && a.Comment.match(/^$/i)){
        var dir = PPx.Extract('%1');
        var entryName = a.Name;
        var f = dir + "\\" + entryName;
        // 一行目を読み込む。文字化けする場合は"sjis"を"utf-8"に
        var s = readFile(f, "sjis");
        // 2~40字を切り取ったものをコメントに
        a.Comment = s.slice( 2,40 );
      }
    }
    
    // ファイルの一行目を読み込む関数
    function readFile(fname, charset) {
      if (charset == undefined) {
        charset = "_autodetect_all";
      }
      var adTypeBinary = 1, adTypeText = 2;
      var adReadAll = -1,   adReadLine = -2;
      var s = new ActiveXObject("ADODB.Stream");
      s.Type = adTypeText;
      s.charset = charset;
      s.Open();
      s.LoadFromFile(fname);
      var text = s.ReadText(adReadLine);
      s.Close();
      return text;
    }

    howmファイルを入れているフォルダで以下を実行。

    *diroption -thisbranch cmd:"*script %0\Script\title2comment.js"