2020年12月28日月曜日

PPx+howmでtodo管理

僕はPPx+howmでメモ環境を構築している(参考:MoE)。これに

  • 一行編集からタイトルを指定してhowmファイルを作成
  • 一行編集からhowmファイルのタイトルを変更

を追加して、todo管理もできるようにする。




 準備


以下をScriptフォルダに保存。それぞれ「タイトルを指定してhowmファイルを作成」「タイトルを変更」「タイトルを取得」するスクリプト。

settitle.js
//!*script

// howmファイルを作成する
// 第一引数:作成するフォルダ
// 第二引数:タイトル
// *script %0Script\makehowm.js,%1,homuhomu
// editor %*script(%0Script\makehowm.js,%1,%*now(date))

var fso = PPx.CreateObject("Scripting.FileSystemObject");
var dirname = PPx.Arguments.Item(0);
var filename = PPx.Extract("%*nowdatetime(Y-N-D-HMS)")+".howm";
var filepath = fso.BuildPath(dirname,filename);
var str="= ";

// 引数が複数あればそれをつなげる
for (var i = 1; i < PPx.Arguments.length; i++) {
  if (i==1){
    str += PPx.Arguments.Item(i);
  } else {
    str += ","+PPx.Arguments.Item(i);
  }
}

str += "\r\n\r\n\r\n["+PPx.Extract('%*now')+"]";

var file = fso.OpenTextFile(filepath, 2, true);
file.Write(str);
file.Close();
PPx.result = filename;

changetitle.js

//!*script
// 与えられたhowmファイルのタイトルを変更するスクリプト
// 第一引数:howmファイルパス
// 第二引数:変更するタイトル
// *script %0Script\changetitle.js,%R,homuhomu

var s="";
var str = "";
var filepath = PPx.Arguments.Item(0);
var fso = PPx.CreateObject("Scripting.FileSystemObject");
var f = fso.OpenTextFile(filepath, 1);

// 引数が複数あればそれをつなげる
for (var i = 1; i < PPx.Arguments.length; i++) {
  if (i==1){
    str=str + PPx.Arguments.Item(i);
  } else {
    str=str + ","+PPx.Arguments.Item(i);
  }
}

s = "= "+str+"\r\n";

f.ReadLine(); //空読みで一行目を飛ばす

while (!f.AtEndOfStream) {
s += f.ReadLine()+"\r\n"; //sに一行づつ読み込み
}
f.Close();

//PPx.Echo(s);

// 書き込み
var f2 = fso.OpenTextFile(filepath, 2);
f2.Write(s);
f2.Close();


gettitle.js

//!*script
// 与えられたhowmファイルの一行目の2文字~30字を切り取ったものを返すスクリプト
// 第一引数:howmファイルのパス
// %*script(%0Script\gettitle.js,%R)

var filepath = PPx.Arguments.Item(0);
var objFileSys = PPx.CreateObject("Scripting.FileSystemObject");
var objInFile = objFileSys.OpenTextFile(filepath, 1);
var str = objInFile.ReadLine().slice( 2,30 );
objInFile.Close();

PPx.result = str;


以下を編集して取り込み。パスは各自で読み替えてください。
KC_main	= {	; PPcメイン窓
\K	,*ifmatch "/D:\\Temp\\todo/",%1 %: *script %0Script\settitle.js,D:\\Temp\\todo,%"todo"%E %: *stop
	%K"@\K"
\E	,*ifmatch "/D:\\Temp\\todo/",%1 %: *script %0Script\changetitle.js,%R,%"todoの変更"%{%*script(%0Script\gettitle.js,%R)%}%: *stop
	%K"@\E"
}

_Command	= {	; ユーザコマンド・関数
todo	= *script %0Script\settitle.js,D:\Temp\todo,%*arg(1)
}


やり方


*todo メモの内容

でメモを作成。todoフォルダでShift+Kを押すと表示される一行編集に入力してもいい。


todoフォルダでhowmファイルにカーソルをあわせ、Shift+Eを押すとタイトルを変更できる。


追記 2021-01-28

*todo の引数がなければtodoフォルダを開く設定は以下のようになる。

_Command	= {	; ユーザコマンド・関数
todo	= *ifmatch !0,0%*arg(1) %: *script %0Script\settitle.js,C:\Users\tukasa\Dropbox\todo,%*arg(1) %: *stop
	*execute C,*jumppath "C:\Users\tukasa\Dropbox\todo" %: *focus C
}

2020年12月16日水曜日

キーバインドを含めてPPxをもっとあふっぽくする

キーバインド含めてもっとあふっぽくしてみた。



PPxをできるだけあふっぽくする」のときは色々スクリプトやModuleが必要だったりしたが、今回は基本不要。
AFXWKEY.TXTを見ながらやったからだいたい網羅してるはずだが、ややこしそうなのは実装してない。具体的には

・2列~9列表示(2~9):列指定はおそらくできない。表示形式はMC_celsで好きにカスタマイズできるのであえて指定する必要性もない気がする
・サムネイル表示トグル( shift+, ):*viewstyle サムネイル1(&T)でできるが、デフォの表示形式をどれにするか決めないと、通常表示とサムネイル表示のトグルが難しそうだなと思ってやってない
・保持画像(G):PPvのLOADEVENTでパスを取得、適当な変数に保存するとかすればいけるかなと思ったけどやってない
左右窓それぞれの履歴メニュー(H):履歴は*dirhistory(n)で取得できるがメニュー化するには多分スクリプトが必要普通にできました^^;
・画像表示場所切り替え(M):「反対窓→両窓→メッセージ窓含めて全体表示」と切り替わるが、メッセージ窓含める/含めないの区別は無理?「反対窓→両窓」切り替えだけなら、エイリアスを利用すればいけそうではある
・小物メニュー

など。

やり方


以下を「編集して取込」してPPxを再起動するだけ。
ただ、Alt+Enterによる画像の「最大化/通常表示トグル」はPaper Plane xUI Window Moduleが必要。
ログ窓がほしいときはメニューバーの「view - レイアウト - ログ」で表示できる。
XC_celD	= _AUTO,_AUTO,1,7	; エントリ表示 文字,背景,カーソル,マーク
XC_dpmk	= 1	; エントリマスクを表示	0:しない 1:する
X_combo = 1 ; 複数 PPc を一体化 0:しない 1:する
X_mpane = 2,2 ; 一体化時の最大同時表示ペイン数,起動時のペイン数
X_inag = 0 ; 現在窓以外はグレー調に 0:しない 1:する
XC_page	= 1
XC_mvLR	= 4,1,0,B0100,0,B100	; [←][→]
CC_log	= _WHI,_BLA	; 共用ログ、アドレスバー(文字,背景)_AUTO可
XV_drag = 2,1,3,0 ; ドラッグ開始ボタン スクロール,選択,窓移動,ジェスチャ(右のみ)
  ; 0:使用しない 1:左 2:右 3:中/ホイール 4:左右同時 5:第4 6:第5
X_fles	= 1	; 画面のちらつき対策を 0:しない 1:する
XC_isea	= 0,1,1,0,0	; インクリメンタルサーチ動作 方法,位置,対象,ハイライト,ヒストリ保存
C_eInfo	= _AUTO,_DRED,_AUTO,_DBLA,_DBLU,_DCYA, _DBLA,_BRO,_GRE,_WHI,_AUTO,HA00000,_AUTO, _SBLU,_BRO,_CYA,_GRE,_RED,_MAG,_DRED, _AUTO 
X_bg	= { 
Bright	= 60
}

_others	= {	; その他設定
SyncViewID	= Y
}

_Command	= {	; ユーザコマンド・関数
afxview	= *ifmatch %NC,%NCBA#L %: *ppv -bootid:Y -parent:%N~ %*name(CD,"%R","%1") -k *execute C,*ppvoption sync on %: *stop
	*ppv -bootid:A -popup:%NC# %*name(CD,"%R","%1")
allview	= *ppv -bootid:A -popup:%NC# %*name(CD,"%R","%1")
halfview	= *ppv -bootid:Y -parent:%N~ %*name(CD,"%R","%1") -k *execute C,*ppvoption sync on
}

KC_main = { ; PPcメイン窓
TAB	,*ifmatch 0,0%NVY %: %K"@TAB" %: *stop
ENTER	,*ifmatch 0,0%NVY %: %K"@ENTER" %: *stop
	 %K"@\Y"
ESC	,*ifmatch 0,0%NVY %: %K"@PAUSE" %: *stop
	 *execute CA,*ppvoption sync off %: *focus CAEND = @F5
HOME = @\HOME
LEFT	,*ifmatch 0,0%NVY %: %K"@LEFT" %: *stop
	 %K"@UP"
RIGHT	,*ifmatch 0,0%NVY %: %K"@RIGHT" %: *stop
	 %K"@DOWN"
INS = @\INS
DEL = @\DEL
'-'	= @^D
NUM- ,*pairrate 50
A = @\HOME
D = @\D
E ,%"JMTE|Text edit"%Ob,editor %*name(CD,"%R","%1")
F = @\J
H = @^\LEFT
I ,*countsize
J = @0
L = @\L
N , %j%*tree(\\)
O	,*ifmatch "/^%*regexp("%FD","s/\\/\\\\/g")$/",%2 %: %J%*extract(~"%%R") %: *stop
	 %j%2
Q = @&F4
T , %j%*tree(%1)
W = @O
Z = CUSTOMIZE
':' = @F
'*' = @\F
'`' = @'+'
'\' = NULL
V_HDC , %J\
V_HE2 , %KC"^\F10
\END , %K~"@F5
\HOME = @\END
\A = @\END
\C , *ppcfile !copy,%M_pjump,A
\D = @D
\E ,*makefile %1\%"新規テキストの編集"%$E.txt %: %Ob editor %1\%"新規テキストの編集"%$E.txt
\F = @^W
\J = @L
\M ,*ppcfile !move,%M_pjump,A
\O	,*ifmatch "/^%*regexp("%FD","s/\\/\\\\/g")$/",%2 %: *execute ~,%%J%R %: *stop
	 *execute ~,%%j%1
\P , *pack "%2",indiv
\V = @I
\X = @H
^ENTER = @Z
^SPACE ,*range lastmark cursor
^END = @^F5
^LEFT ,*cursor 8,1,12,0,12,0
^UP = @PUP
^RIGHT ,*cursor 8,1,13,0,13,0
^DOWN = @PDOWN
^INS ,%z"#17:\"
^DEL ,%z"#10:\"
^V_HBA ,*cursor 16,1,5,1,5,0
^\END ,%K"@^F5"
^\LEFT = @^LEFT
^\UP = @DEL @UP @UP @INS @DOWN
^\RIGHT = @^RIGHT
^\DOWN = @DEL @INS @DOWN
^\V_HBA ,*cursor 16,-1,5,1,5,0
&ENTER , *ifmatch 0,0%NVY %: *stop
	 %K"@\Y" %: %Oi *ppv -bootid:A -popup:%NC# %*name(CD,"%R","%1") %: *maximize %NVA
&RIGHT ,*ifmatch %NC,%NCBA#L %: *pairrate +3 %: *stop
 *pairrate -3
&LEFT ,*ifmatch %NC,%NCBA#L %: *pairrate -3 %: *stop
 *pairrate +3
&Z ,*ppc -alone
&'\' ,%M_ClipPath
&\Z ,*ppc -runas -alone
^A = @&\A
^B = @&\B
^C = @&\C
^D = @&\D
^E = @&\E
^F = @&\F
^G = @&\G
^H = @&\H
^I = @&\I
^J = @&\J
^K = @&\K
^L = @&\L
^M = @&\M
^N = @&\N
^O = @&\O
^P = @&\P
^Q = @&\Q
^R = @&\R
^S = @&\S
^T = @&\T
^U = @&\U
^V = @&\V
^W = @&\W
^X = @&\X
^Y = @&\Y
^Z = @&\Z
^V_H31 = @&\1
^V_H32 = @&\2
^V_H33 = @&\3
^V_H34 = @&\4
^V_H35 = @&\5
^V_H36 = @&\6
^V_H37 = @&\7
^V_H38 = @&\8
^V_H39 = @&\9
}

KV_main = {
ENTER , %K"@Q" %: %KC"@DOWN"
ESC = @Q
2 , *viewoption -tab:2
4 , *viewoption -tab:4
8 , *viewoption -tab:8
\E , *viewoption -euc
\I , *viewoption -utf16be
\J , *viewoption -jis
\O , *viewoption -utf8
\S , *viewoption -sjis
\U , *viewoption -utf16
&Z , *ppc -alone
&\Z , *ppc -runas -alone
}

KV_crt = {
SPACE = @']'
E , %Ob editor %FCD %: %K"@Q"
H = @'['
L = @']'
F1 = @HOME
F2 = @END
F3 = @J
F4 = @F
F5 = @']'
\ENTER , %Ob editor %FCD %: %K"@Q"
\SPACE = @'['
\C = @C
\F = @B
\L = @'['
\N = @T
\T = @C
\F4 = @B
\F5 = @'['
^SPACE = @I
^PUP = @HOME
\PDOWN = @END
&UP , %KC"@UP@N"
&DOWN , %KC"@DOWN@N"
}

KV_page = {
SPACE = @']'
LEFT = @PUP
RIGHT = @PDOWN
E , %Ob editor %FCD %: %K"@Q"
H = @'['
L = @']'
F1 = @HOME
F2 = @END
F3 = @J
F4 = @F
F5 = @']'
\ENTER , %Ob editor %FCD %: %K"@Q"
\SPACE = @'['
\C = @C
\F = @B
\L = @'['
\N = @T
\T = @C
\F4 = @B
\F5 = @'['
^SPACE = @I
^PUP = @HOME
\PDOWN = @END
&UP , %KC"@UP@N"
&DOWN , %KC"@DOWN@N"
}

KV_img    = {
SPACE , %KC"@SPACE@N"
END , *zoom -1
HOME , *zoom 0
LEFT ,%KC"@UP@N"
UP ,%KC"@UP@N"
RIGHT ,%KC"@DOWN@N"
DOWN ,%KC"@DOWN@N"
G = @Q
L = @K
R = @L
'\' ,%M_WallPaper
\SPACE , %KC"@\SPACE@N"
\END , *zoom -1
^I , *cliptext %R
^W , *setcust X_bg:P_%*extract(C"%%n")=%FCD %: *customize X_bg:T_%*extract(C"%%n")=1
&ENTER , *togglewinsize
}

E_cr	= {	; [Enter]用判別
*	,*allview
TXT	,*allview
:UTEXT	,*allview
JPEG	,*afxview
:JPEG	,*afxview
BMP	,*afxview
:BMP	,*afxview
HOWM	,*allview
CFG	,*allview
INI	,*allview
PNG	,*afxview
:PNG	,*afxview
GIF	,*afxview
:GIF	,*afxview
}

-|M_ClipPath =

M_ClipPath    = {
ファイル名\t【カーソル上】    = *cliptext %R %: *linemessage Clip : %R
フルパスファイル名\t【カーソル上】    = *cliptext %FCD %: *linemessage Clip : %FCD
--    = 
フルパス名    = *cliptext %1 %: *linemessage Clip : %1
--    = 
ファイル名\t【マーク・スペース区切り】    = *cliptext %#FC %: *linemessage Clip : %#FC
フルパスファイル名\t【マーク・スペース区切り】    = *cliptext %#FCD %: *linemessage Clip : %#FCD
}

-|M_WallPaper =

M_WallPaper = { ** comment **
画像をクリップボードに転送 = %K"@^C"
情報をクリップボードに転送 = *cliptext %R 
ファイルに保存する = %K"@^S"
-- =
PPC[&A]の壁紙にする = *setcust X_bg:P_ca=%FCD %: *customize X_bg:T_ca=1
PPC[&B]の壁紙にする = *setcust X_bg:P_cb=%FCD %: *customize X_bg:T_cb=1
-- =
PPC[A]の壁紙をナシにする = *setcust X_bg:-|P_ca= %: *customize X_bg:-|T_ca=
PPC[B]の壁紙をナシにする = *setcust X_bg:-|P_cb= %: *customize X_bg:-|T_cb=
}

2020年12月11日金曜日

PPxをあふっぽくする改

少し時間に余裕ができると「PPxをあふとかだいなファイラーとかっぽくしてみるかー!」という気になる。以前はあふっぽい画像表示を*capturewindowや*fitwindowで実現してたが、最近(一年以上前だから最近ではない)-popupとか-parentとかが実装されたので、もっとあふっぽくできそうだ。

時間ができたらそのうち「キーバインドを含めてあふっぽくする」「できるだけあふっぽくする」とかもするつもり。


やり方

以下をクリップボードにコピーして、編集して取込をする。

X_combo = 1 ; 複数 PPc を一体化 0:しない 1:する
X_mpane = 2,2 ; 一体化時の最大同時表示ペイン数,起動時のペイン数
X_inag = 0 ; 現在窓以外はグレー調に 0:しない 1:する
XC_page	= 1
XC_mvLR	= 4,1,0,B0100,0,B100	; [←][→]

_others	= {	; その他設定
SyncViewID	= Y
}
_Command	= {	; ユーザコマンド・関数
afxview	= *ifmatch %NC,%NCBA#L %: *ppv -bootid:Y -parent:%N~ %*name(CD,"%R","%1") -k *execute C,*ppvoption sync on %: *stop
	*ppv -bootid:A -popup:%NC# %*name(CD,"%R","%1")
allview	= *ppv -bootid:A -popup:%NC# %*name(CD,"%R","%1")
halfview	= *ppv -bootid:Y -parent:%N~ %*name(CD,"%R","%1") -k *execute C,*ppvoption sync on
}
E_cr	= {	; [Enter]用判別
TXT	,*allview
:UTEXT	,*allview
JPEG	,*afxview
:JPEG	,*afxview
BMP	,*afxview
:BMP	,*afxview
HOWM	,*allview
CFG	,*allview
INI	,*allview
PNG	,*afxview
:PNG	,*afxview
GIF	,*afxview
:GIF	,*afxview
}

KC_main	= {	; PPcメイン窓
TAB	,*ifmatch 0,0%NVY %: %K"@TAB" %: *stop
RIGHT	,*ifmatch 0,0%NVY %: %K"@RIGHT" %: *stop
	 %K"@DOWN"
LEFT	,*ifmatch 0,0%NVY %: %K"@LEFT" %: *stop
	 %K"@UP"
ENTER	,*ifmatch 0,0%NVY %: %K"@ENTER" %: *stop
	 %K"@\Y"
}
KV_main	= {	; PPvメイン窓
ENTER , %K"@Q" %: %KC"@DOWN"
ESC = @Q
}

KV_page = {
LEFT ,%K"@PUP"
RIGHT ,%K"@PDOWN"
}

KV_img = {
UP ,%KC"@UP@N"
LEFT ,%KC"@UP@N"
DOWN ,%KC"@DOWN@N"
RIGHT ,%KC"@DOWN@N"
SPACE    ,%KC"@SPACE@N"
\SPACE    ,%KC"@\SPACE@N"
}