2019年6月13日木曜日

一行編集からメニュー呼び出し


メニューを登録したキーは忘れる


マスクメニュー、ファイルパスコピーメニュー、などなどたくさんのメニューを僕は作ってきたはずだが、使い続けているものはほぼない。
なぜでしょう?登録キーを忘れてしまうからですね!YES!
ホットキーを工夫しようと2ストロークキーを利用してみようとメニューのメニューを作ろうと、無理なものは無理。そもそもメニューにしてまとめているのは、普段それほど使わないから。そんなのどうしたって忘れてしまう。

コマンドなら忘れないかも


だが!一行編集で、コマンドから呼び出せるようにしたならどうか?
かつてfenrirを使ってたときは、普段使わないソフトだろうと見つけることができた。同じことが一行編集を使えばできるのではないか、という思いつきです。

前準備


PPtrayを常駐し、一行編集をホットキーで起動できるようにしておく。以下はCtrl+Spaceで呼び出している。

K_tray = { ; PPtrayホットキー(キー指定 不可,V_xx 形式を推奨)
^' ' ,*if %*findwindowtitle("PPlauncher") %: *focus !"PPlauncher" %: *stop
 *execute,%*input("" -title:"PPlauncher" -mode:h)
}

やり方


とりあえずメニューを用意する。

A_exec = { ; エイリアス
qpdf = D:\bin\qpdf\bin\qpdf.exe
}

-|M_QPdf =

M_QPdf    = {    ** comment **
結合(&C)    = %Ob qpdf --empty --pages %#FCD -- %"アウトプットのファイル名"%{%|output%|.pdf%}
抽出    = %Ob qpdf --empty --pages %FCD %"抽出したいページを指定"%{1%|-2%} -- %"アウトプットファイル"%{%|output%|.pdf%}
回転    = %Ob qpdf --rotate=%"角度を指定"%{+90%|%} %FCD %"アウトプットファイル"%{%|output%|.pdf%}
}


ユーザーコマンドにわかりやすい名前で登録する。

_Command = { ; ユーザコマンド・関数
pdfmenu = *execute C,%%M_QPdf,C
}

履歴にコマンドを登録する。

*addhistory h,"*pdfmenu"


2019年6月11日火曜日

QpdfでPDFメニュー

Qpdfは、コマンドラインでPDFを操作するツールらしい
今まではPDFtkを使ってたが、久々に使うとなぜか思い通りの操作にならなかったので、試しにこっちを使ってみる

A_exec = { ; エイリアス
qpdf = D:\bin\qpdf\bin\qpdf.exe
}

-|M_QPdf =

M_QPdf    = {    ** comment **
結合(&C)    = %Ob qpdf --empty --pages %#FCD -- %"アウトプットのファイル名"%{%|output%|.pdf%}
抽出    = %Ob qpdf --empty --pages %FCD %"抽出したいページを指定"%{1%|-2%} -- %"アウトプットファイル"%{%|output%|.pdf%}
回転    = %Ob qpdf --rotate=%"角度を指定"%{+90%|%} %FCD %"アウトプットファイル"%{%|output%|.pdf%}
}

参考


Qpdf : コマンドラインのPDFツール

2019年2月1日金曜日

PPxをできるだけあふっぽくする



コンセプト


  • 思い立って、PPxをできるだけあふっぽくしてみた
  • 以前は自分がよく使うキーバインド以外は実装しなかったが、今回はAFXW.TXTを見ながらできるだけ網羅的にやってみた
  • ビューアは埋め込み方式

事前準備


1.PPxをインストールする
2.以下のPPx Moduleをインストールする

  • Paper Plane xUI Message Module
  • Paper Plane xUI Window Module
  • Paper Plane xUI Text Module
  • Paper Plane xUI Script Module

3.PPxフォルダにScriptという名前で空フォルダを作成する
4.ppxmemo - ファイル置き場から以下をダウンロードし、Scriptフォルダに移動する。

  • MarkCursor.js
  • MarkCursorR.js
  • afx_o.js
  • afx_shift_o.js
  • go_mark.js
  • go_markR.js
  • dirhistorymenu.js


設定の取り込み


  1. 以下のコードをクリップボードにコピーする
  2. カスタマイザーを起動(PPCUSTW.EXEを実行するか、メニューバーから「ツール - カスタマイズ」を選択)し、ファイルタブから「編集して取込」をクリック
  3. クリップボードの内容をペーストした状態で「編集して取込」ウィンドウが開く。左下にある「追加する」のCHECKを外し、OKを押す
  4. PPxを再起動する

X_combo = 1 ; 複数 PPc を一体化 0:しない 1:する
X_combos = B0000011000001000010000000001001,B0000000 ; 一体化時設定
X_mpane = 2,2 ; 一体化時の最大同時表示ペイン数,起動時のペイン数
X_inag = 0 ; 現在窓以外はグレー調に 0:しない 1:する
XC_celD = _AUTO,_AUTO,4,7 ; エントリ表示 文字,背景,カーソル,マーク
CC_log = _WHI,_BLA ; 共用ログ、アドレスバー(文字,背景)_AUTO可
C_eInfo = _AUTO,_DRED,_AUTO,_DBLA,_DBLU,_DCYA, _DBLA,_BRO,_BLU,_WHI,_AUTO,HA00000,_AUTO, _SBLU,_BRO,_CYA,_GRE,_RED,_MAG,_DRED, _AUTO 
XV_drag = 2,1,3,0 ; ドラッグ開始ボタン スクロール,選択,窓移動,ジェスチャ(右のみ)
  ; 0:使用しない 1:左 2:右 3:中/ホイール 4:左右同時 5:第4 6:第5

KC_main = { ; PPcメイン窓
&'\' ,%M_ClipPath
^ENTER = @Z
'_' ,*autodragdrop C#~,r
^UP = @PUP
^\LEFT = @^LEFT
&Z = @F11
H ,*ifmatch /.+/,%NVY %: %KVY"H" %: *stop
 *script %0Script\dirhistorymenu.js %: *execute ,%%j%%M_hoehoe,%1
HOME ,*ifmatch /.+/,%NVY %: %KVY"HOME" %: *stop
 %K"@HOME"
W = @O
'~' ,*cursor 16,-1,5,1,5,0
'^' ,*cursor 16,1,5,1,5,0
'`' = @'+'
'*' = @\F
\D = @D
^\END ,%K~"@^F5
^\RIGHT = @^RIGHT
^END = @^F5
DEL = @\DEL
INS = @\INS
B ,*ifmatch /.+/,%NVY %: %KVY"B" %: *stop
 %K"@B"
E ,%"Text edit"%Orib,editor %FDC
P ,*pack "%2%\|%X|" %Or-
\P ,%"Pack File Ex" %M_xpack
F12 ,%M_cust,C
Q = @&F4
Z = CUSTOMIZE
ESC ,*ifmatch /.+/,%NVY %: *ppvoption sync %: *stop
 %K"@PAUSE"
&RIGHT ,*pairrate -3
&LEFT ,*pairrate +3
'-' = NULL
I ,*countsize
\I ,*ifmatch /.+/,%NVY %: %KVY"\I" %: *stop
 *countsize
L ,*ifmatch /.+/,%NVY %: %KVY"L" %: *stop
 %K"@\L"
J ,*ifmatch /.+/,%NVY %: %KVY"J" %: *stop
 %j%M_pjump
\J ,*ifmatch /.+/,%NVY %: %KVY"\J" %: *stop
 %K"@L"
\F ,*ifmatch /.+/,%NVY %: %KVY"\F" %: *stop
 %K"@\F"
^\UP = @DEL @UP @UP @INS @DOWN
^\DOWN = @DEL @INS @DOWN
O ,*script %0\Script\afx_o.js
\O ,*ifmatch /.+/,%NVY %: %KVY"\O" %: *stop
 *script %0\Script\afx_shift_o.js
^A ,*ifmatch /.+/,%NVY %: %KVY"^A" %: *stop
 %K"@&\A"
^B = @&\B
^C ,*ifmatch /.+/,%NVY %: %KVY"^C" %: *stop
 %K"@&\C"
^D = @&\D
^E = @&\E
^F = @&\F
^G = @&\G
^H = @&\H
^DOWN = @PDOWN
^I = @&\I
^V_H4A = @&\J
^K = @&\K
^L = @&\L
^M = @&\M
^N = @&\N
^O = @&\O
^P = @&\P
^Q = @&\Q
^R = @&\R
^S = @&\S
^T = @&\T
^U = @&\U
^V ,*ifmatch /.+/,%NVY %: %KVY"^V" %: *stop
 %K"@&\V"
^W = @&\W
^X = @&\X
^Y = @&\Y
^Z = @&\Z
'\' ,*ifmatch /.+/,%NVY %: %M_WallPaper,1 %: *stop
 %K"@^\F10
^V_H31 = @&\1
\HOME = @\END
^V_H32 = @&\2
^V_H33 = @&\3
^V_H34 = @&\4
^V_H35 = @&\5
^V_H36 = @&\6
^V_H37 = @&\7
^V_H38 = @&\8
^V_H39 = @&\9
F ,*ifmatch /.+/,%NVY %: %KVY"F" %: *stop
 %K"@\J"
^' ' ,*script %0\Script\MarkCursor.js
^\SPACE ,*script %0\Script\MarkCursorR.js
^V_HBA ,*script %0\Script\go_mark.js
^\V_HBA ,*script %0\Script\go_markR.js
A = @\HOME
\A = @\END
END ,*ifmatch /.+/,%NVY %: %KVY"END" %: *stop
 %K"@F5"
\E ,*ifmatch /.+/,%NVY %: %KVY"\E" %: *stop
 *makefile %1\%"新規テキストの編集"%$E %: %Ob editor %1\%"新規テキストの編集"%$E
\X = @H
^INS ,%z"#17:\"
^DEL ,%z"#10:\"
\V = @I
\M ,*ppcfile !move,%M_pjump,A
\C ,*ifmatch /.+/,%NVY %: %KVY"\C" %: *stop
 *ppcfile !copy,%M_pjump,A
LEFT ,*cursor 4, -1,6,B0100,6,B0100
RIGHT ,*cursor 4, 1,6,B0100,6,B0100
D = @\D
V_HBD = @^D
NUM- ,*pairrate 50
PUP ,*ifmatch /.+/,%NVY %: %KVY"PUP" %: *stop
 %K"@PUP"
PDOWN ,*ifmatch /.+/,%NVY %: %KVY"PDOWN" %: *stop
 %K"@PDOWN"
^LEFT ,*ifmatch /.+/,%NVY %: %KVY"^LEFT" %: *stop
 *cursor 8,1,12,0,12,0
^PUP ,*ifmatch /.+/,%NVY %: %KVY"^PUP" %: *stop
 %K"@^PUP"
F2 ,*ifmatch /.+/,%NVY %: %KVY"F2" %: *stop
 %K"@F2"
^RIGHT ,*ifmatch /.+/,%NVY %: %KVY"^RIGHT" %: *stop
 *cursor 8,1,13,0,13,0
^PDOWN ,*ifmatch /.+/,%NVY %: %KVY"^PDOWN" %: *stop
 %K"@^PDOWN"
F3 ,*ifmatch /.+/,%NVY %: %KVY"F3" %: *stop
 %K"@F3"
F4 ,*ifmatch /.+/,%NVY %: %KVY"F4" %: *stop
 %K"@F4"
F5 ,*ifmatch /.+/,%NVY %: %KVY"F5" %: *stop
 %K"@F5"
SPACE ,*ifmatch /.+/,%NVY %: %KVY"SPACE" %: *stop
 %K"@SPACE"
^F4 ,*ifmatch /.+/,%NVY %: %KVY"^F4" %: *stop
 %K"@^F4"
\L ,*ifmatch /.+/,%NVY %: %KVY"\L" %: *stop
 %K"@\L"
\F5 ,*ifmatch /.+/,%NVY %: %KVY"\F5" %: *stop
 %K"@\F5"
\SPACE ,*ifmatch /.+/,%NVY %: %KVY"\SPACE" %: *stop
 %K"@\SPACE"
\S ,*ifmatch /.+/,%NVY %: %KVY"\S" %: *stop
 %K"@\S"
\U ,*ifmatch /.+/,%NVY %: %KVY"\U" %: *stop
 %K"@\U"
TAB ,*ifmatch /.+/,%NVY %: %KVY"TAB" %: *stop
 %K"@TAB"
2 ,*ifmatch /.+/,%NVY %: %KVY"2" %: *stop
 %K"@2"
4 ,*ifmatch /.+/,%NVY %: %KVY"4" %: *stop
 %K"@4"
8 ,*ifmatch /.+/,%NVY %: %KVY"8" %: *stop
 %K"@8"
\N ,*ifmatch /.+/,%NVY %: %KVY"\N" %: *stop
 %K"@\N"
\T ,*ifmatch /.+/,%NVY %: %KVY"\T" %: *stop
 %K"@\T"
^SPACE ,*ifmatch /.+/,%NVY %: %KVY"^SPACE" %: *stop
 %K"@^SPACE"
&ENTER ,*ifmatch /.+/,%NVY %: %KVY"&ENTER" %: *stop
 %K"@&ENTER"
R ,*ifmatch /.+/,%NVY %: %KVY"R" %: *stop
 %K"@R"
\END ,%K~"@F5"
}
KC_tree = { ; PPcツリー(キー制限有,V_xx 形式を推奨)
}
KC_incs = { ; PPcインクリメンタルサーチ(制限有)
}
K_list = { ; PPc AutoD&D(制限有)
}
KV_main = { ; PPvメイン窓
&ENTER ,*ifmatch /.+/,%NVX %: *closeppx "VX" %: *stop
 %Ox *ppv -bootid:X -k *ppv -r %FCD
ENTER ,*ifmatch "!/VL/",%n %: *stop
 *ifmatch "/CA/",%*extract(C"%%n") %: *closeppx "VL" %: *execute C,*pane newpane CB %%: *focus CA %: *stop
 *ifmatch "/CB/",%*extract(C"%%n") %: *closeppx "VL" %: *execute C,*pane newpane CA %%: *pane swappane %%: *focus CB
1 = @END
2 = @DOWN
3 = @PDOWN
4 = @LEFT
6 = @RIGHT
7 = @HOME
8 = @UP
9 = @PUP
E ,%"JMTE|Text edit"%Orib,editor %{%FDC%}
^LEFT ,%K-C"@UP@N"
^RIGHT ,%K-C"@DOWN@N"
^UP ,%K-C"@\SPACE@N"
^DOWN ,%K-C"@SPACE@N"
F12 ,%M_cust,C
}
KV_page = { ; PPvテキスト(ページ)追加設定
^' ' = @I
&Z ,%KC"@F11
&DOWN ,%K-C"@DOWN@N"
&UP ,%K-C"@UP@N"
\C = @C
\T = @C
\N = @U
\ENTER ,%"JMTE|Text edit"%Orib,editor %FDC
8 ,*viewoption -tab:8
4 ,*viewoption -tab:4
2 ,*viewoption -tab:2
TAB ,*RotateExecute id,*viewoption -hex,*viewoption -text
\O ,*viewoption -utf8
\I ,*viewoption -utf16be
\U ,*viewoption -utf16
\S ,*viewoption -sjis
\J ,*viewoption -jis
\E ,*viewoption -euc
\SPACE = @'['
\F5 = @'['
\L = @'['
H = @'['
\F4 = @B
\F = @B
SPACE = @']'
L = @']'
F5 = @']'
F4 = @F
F3 = @J
^LWIN = @END
^RIGHT = @END
F2 = @END
^PUP = @HOME
F1 = @HOME
^LEFT = @HOME
}
KV_crt = { ; PPvテキスト(キャレット)追加設定
^RIGHT = @END
^LEFT = @HOME
}
KV_img = { ; PPv画像追加設定
^W ,*ifmatch "/CA/",%*extract(C"%%n") %: %Q"現在の画像を壁紙にしますか?" %: *customize X_bg:P_ca=%FDC %: *customize X_bg:T_ca=1 %: *stop
 *ifmatch "/CB/",%*extract(C"%%n") %: %Q"現在の画像を壁紙にしますか?" %: *customize X_bg:P_cb=%FDC %: *customize X_bg:T_cb=1
F ,*togglewinsize
F4 ,*togglewinsize
L = @K
R = @L
END ,*zoom -1
HOME ,*zoom 0
\R = @K
'\' ,%M_WallPaper,1
\L = @L
}

E_cr = { ; [Enter]用判別
BAT ,%M_Ccr,!X
EXE ,%M_Ccr,O
COM ,%M_Ccr,!X
:EXE32C ,%M_Ccr,!X
:EXEX64C ,%M_Ccr,!X
:EXEDOS ,%M_Ccr,!X
:SCR ,%M_Ccr,O
:HELP ,%M_Ccr,O
. ,%M_Ccr,!V
DOC ,%M_Ccr,!V
TXT ,*allview
:UTEXT ,%M_Ccr,!V
:DOC95 ,%M_Ccr,!V
:DOC97 ,%M_Ccr,!V
:DOCX ,%v"%C\word\document.xml"
JPEG ,*ifmatch "/CA/",%n %: *halfview %: *stop
 *allview
:JPEG ,*ifmatch "/CA/",%n %: *halfview %: *stop
 *allview
BMP ,*ifmatch "/CA/",%n %: *halfview %: *stop
 *allview
:BMP ,*ifmatch "/CA/",%n %: *halfview %: *stop
 *allview
:DIR = C_DIR
:LHA = C_DIR
:PKZIP = C_DIR
:CAB = C_DIR
:XLF = C_DIR
GZ = C_DIR
7Z = C_DIR
CAB = C_DIR
RAR = C_DIR
:XVBS ,%"Script" *script %{%R%|%}
:XPLS ,%"Script" *script %{%R%|%}
MAKEFILE. ,%{MAKE %|%}
MAK ,%{MAKE -f%C%}
PNG ,*ifmatch "/CA/",%n %: *halfview %: *stop
 *allview
JPG ,*ifmatch "/CA/",%n %: *halfview %: *stop
 *allview
GIF ,*ifmatch "/CA/",%n %: *halfview %: *stop
 *allview
CPP ,*allview
H ,*allview
C ,*allview
L ,*allview
EL ,*allview
HTML ,*allview
HTM ,*allview
XYZZY ,*allview
EMACS ,*allview
SCM ,*allview
INI ,*allview
VBS ,*allview
JS ,*allview
PY ,*allview
PYW ,*allview
CFG ,*allview
LOG ,*allview
HOWM ,*allview
}

-|M_ClipPath =

M_ClipPath    = {    ** comment **
ファイル名\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 **
PPC全体の壁紙にする(&1) = *customize X_bg:P_ca=%FDC %: *customize X_bg:P_cb=%FDC %: *customize X_bg:T_ca=20 %: *customize X_bg:T_cb=20
PPC[&A]の壁紙にする = *customize X_bg:P_ca=%FDC %: *customize X_bg:T_ca=1
PPC[&B]の壁紙にする = *customize X_bg:P_cb=%FDC %: *customize X_bg:T_cb=1
-- =
PPC全体の壁紙をナシにする = *customize X_bg:-|P_ca= %: *customize X_bg:-|P_cb= %: *customize X_bg:-|T_ca= %: *customize X_bg:-|T_cb=
PPC[A]の壁紙をナシにする = *customize X_bg:-|P_ca= %: *customize X_bg:-|T_ca=
PPC[B]の壁紙をナシにする = *customize X_bg:-|P_cb= %: *customize X_bg:-|T_cb=
-- =
壁紙の明るさを調整する = *customize X_bg:Bright=%"明るさ(Bright)"%{%*getcust(X_bg:Bright)%}
}
X_win = { ; 表示形式全般 *layout
 ;  +--------B8:1=タイトルバーを表示させない
 ;  |+-------B7:1=(PPcのみ)簡易ヘッダを表示する
 ;  ||+------B6:1=(PPcのみ)標準の情報行を表示させない
 ;  |||+-----B5:1=標準のステータス行を表示させない
 ;  ||||+----B4:1=標準のツールバーを表示する(PPc:B_cdef,PPv:B_vdef)
 ;  |||||+---B3:1=(PPcのみ)スクロールバーの位置を下端<->右端で切替
 ;  ||||||+--B2:1=スクロールバーを表示させない
 ;  |||||||+-B1:1=タスクバー等で1つにまとめる(要PPtray)ただし不都合有り
 ;  ||||||||+B0:1=MenuBar表示
V = B100100100
}

_others = { ; その他設定
SyncViewID = Y
}
_Command = { ; ユーザコマンド・関数
allview = %Oi *ppv -bootid:L %*arg(1) %*name(CD,"%R","%1") %: *wait 100,1 %: *execute C,*capturewindow VL -pane:0 %: *execute C,*pane hide ~
halfview = *ifmatch /.+/,%NVY %: *ppvoption sync %: *stop
 %Oi *ppv -bootid:Y %*name(CD,"%R","%1") %: *ppvoption sync %: *wait 100,1 %: *capturewindow VY -pane:~ -selectnoactive
}

2019年1月30日水曜日

PPc上からPPvを操作

連動ビュー使用時、PPc上からPPvを操作する方法。
PageUpだとか検索だとかいった操作をPPvで行う場合、一々そちらにフォーカスを移すという動作が面倒なので、やってみた。

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

KC_main = { ; PPcメイン窓
PUP ,*ifmatch /.+/,%NVY %: %KVY"PUP" %: *stop
 %K"@PUP"
PDOWN ,*ifmatch /.+/,%NVY %: %KVY"PDOWN" %: *stop
 %K"@PDOWN"
F ,*ifmatch /.+/,%NVY %: %KVY"F" %: *stop
 %K"@F"
'[' ,*ifmatch /.+/,%NVY %: %KVY"[" %: *stop
 %K"@'['"
']' ,*ifmatch /.+/,%NVY %: %KVY"]" %: *stop
 %K"@']'"
'=' ,*ifmatch /.+/,%NVY %: %KVY"=" %: *stop
 %K"@'='"
}


このように、


  1. 連動ビュー用のPPvIDを決めておき
  2. *ifmatchでそのIDのPPvが存在してるか否かを判別。起動してればPPvを操作、してなければPPcを操作


とすればいい。

2019年1月20日日曜日

MakeComment.jsの自動実行!



僕はPPxとXyzzyでメモ環境を作っている(Memo on the Electron)。今回は、メモのタイトル表示に使うMakeComment.jsを自動実行する話。

準備


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

MakecommentA.js

//!*script
//カレントディレクトリに一行目とファイルパスを対応させたコメントファイル(00_INDEX.txt)を作成


var strLine = "\r\n";
var currentDir = PPx.Extract('%1');
var fs = PPx.CreateObject("Scripting.FileSystemObject");

// すべてのhowmファイルにコメントがついていれば終了
for (var i = 0; i < PPx.EntryAllCount; i++) {
  if (PPx.Entry(i).Name.match(/.howm$/i) && PPx.Entry(i).Comment.match(/^$/i))
    break;
  else if (i == PPx.EntryAllCount - 1)
    PPx.Quit();
}

for (var i = 0; i < PPx.EntryAllCount; i++) {
  var fullpath = fs.BuildPath(currentDir,PPx.Entry(i).Name);
  // ファイルあるいはフォルダが存在しない場合の処理
  if (!(fs.FolderExists(fullpath) || fs.FileExists(fullpath))) {
    continue;
  }
  // .あるいは..の処理
  else if (PPx.Entry(i).Name == "."){
    str = PPx.Entry(i).Name + "\t*\r\n";
    strLine =  strLine + str;
  } else if (PPx.Entry(i).Name == ".."){
    str = PPx.Entry(i).Name + "\t**\r\n";
    strLine =  strLine + str;
  }
  // サイズが0のファイルとディレクトリは読み込まない
  else if (PPx.Entry(i).Size == 0) {
    if (PPx.Entry(i).Comment != ""){
      str = PPx.Entry(i).Name + "\t" + PPx.Entry(i).Comment + "\r\n";
      strLine =  strLine + str;
    } else {
      str = PPx.Entry(i).Name + "\t" + PPx.Entry(i).Name + "\r\n";
      strLine =  strLine + str;
    }
  }
  // 拡張子がhowmのファイルを読み込む
  else if (PPx.Entry(i).Name.match(/.howm$/i)) {
    var entryName = PPx.Entry(i).Name;
    var objItem = currentDir + "\\" + entryName;
    // ファイルの内容を取得
    objInFile = fs.OpenTextFile(objItem, 1);
    // ファイル名+Tab+一行目の最初二文字~40字を切り取ったもの+改行をstrに代入
    var title = objInFile.ReadLine().slice( 2,40 );
    if (title == "") title = "-blank-"
    str = entryName + "\t" + title + "\r\n";
    strLine =  strLine + str;
    objInFile.Close();
  }
}

if (strLine == "\r\n"){
  PPx.Quit();
} else {
  strLine = strLine + '00_INDEX.txt\t *** COMMENT FILE ***';
}

// カレントディレクトリに00_INDEX.txtを作成
strCreateFile = fs.BuildPath(currentDir,"00_INDEX.txt");
fs.CreateTextFile(strCreateFile);

// 00_INDEX.txtに書き込み
objOutFile = fs.OpenTextFile(strCreateFile, 2);
objOutFile.Write(strLine);
objOutFile.Close();

// F5で更新
PPx.Execute("%K\"@[F5]\"")


最初に、コメント無しのhowmファイルがあるかどうかをチェック。なければ終了するようにする。フォルダを読み込むたびに、不要にコメントファイルを作成すると鬱陶しいからだ。

フォルダ設定


このスクリプトを自動実行したいフォルダに行き、以下のコマンドを実行。

*diroption -thisbranch


ディレクトリ別の設定メニューが表示されるので、「実行」を選択。


出てきた一行編集ウィンドウに、

*script %0\Script\MakeCommentA.js

と入力する。これで、そのディレクトリ以下でこのスクリプトを自動実行するようになる。



スクリプトの最後にF5で更新しているが、「すべてのhowmファイルにコメントがついていれば終了」がスクリプト内にあるから無限ループにはならない…はず?

参考


MakeComment.jsの自動実行? - つかさのほえほえ日記

2019年1月15日火曜日

フォルダ履歴ジャンプメニュー(動的)




PPcでフォルダ履歴メニューを表示し、選択したらパス移動する。
5年前にも同じことをしていたようなのだが、今回はスクリプトを使い、メニューを動的にした。履歴がない場合はその項目を表示しない。

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

dirhistorymenu.js

//!*script
// ディレクトリ履歴メニューを作成

PPx.Execute("*setcust -|M_hoehoe ="); // メニューの削除
for (var i = 0; i < 10; i++) {
  var name = PPx.Extract("%*dirhistory("+i+")");
  if (name){
    PPx.Execute("*setcust M_hoehoe:"+name.replace('\\t','\\\\t')+"="+name); // メニューの登録。\t は桁揃えになるので置換
    }
}

以下のコマンドを実行。

*script %0Script\dirhistorymenu.js %: *execute ,%%j%%M_hoehoe,%1

*executeをかませているのは、ショートカットにマクロ文字を使うため。

参考


フォルダ履歴ジャンプメニュー - つかさのほえほえ日記


2018年12月18日火曜日

PPxをもっとだいなファイラーっぽくする





コンセプト


  • PPxをできるだけだいなファイラーっぽくしてみる
  • 以前、見た目だけなんちゃってだいなっぽくしてみたが、今回はキーバインド、メニューを含めてだいなっぽくしてみた
  • ビューアは埋め込み表示にしている。埋め込まない方法についてはppxmemoの「2画面」以下のページを参照のこと
  • 多分ミスしている箇所あるからしばらくはちょくちょく修正するかも


具体的に


  • キーバインドは「だいなファイラーの紹介 - moewe」にあった「だいなまとめヘルプファイル」を参考にした
  • スクリプト等を使わないとできなさそうなものは未実装
  • メニューはコマンドがない箇所はクリックしても反応しない。オプションはクリックしたらカスタマイザーを起動するようにしている
  • Windowsの壁紙の変更の仕方がわからなかったので、それ関係は実装していない

やり方


  1. PPxをダウンロードし、インストールする。詳しくはppxmemoのintroを
  2. Window Module、Text Moduleをインストールする。詳しくは「ppxmemo - 機能拡張のためのソフトウェア」を
  3. 以下にあるコードをクリップボードにコピーする
  4. カスタマイザーを起動(PPCUSTW.EXEを実行するか、メニューバーから「ツール - カスタマイズ」を選択)し、ファイルタブから「編集して取込」をクリック
  5. クリップボードの内容をペーストした状態で「編集して取込」ウィンドウが開く。左下にある「追加する」のCHECKを外し、OKを押す
  6. PPxを再起動する




_Command = { ; ユーザコマンド・関数
allview = %Oi *ppv -bootid:L %*arg(1) %*name(CD,"%R","%1") %: *wait 100,1 %: *execute C,*capturewindow VL -pane:0 %: *execute C,*pane hide ~
halfview = *ifmatch /.+/,%NVY %: *ppvoption sync %: *stop
 %Oi *ppv -bootid:Y %*name(CD,"%R","%1") %: *ppvoption sync %: *wait 100,1 %: *capturewindow VY -pane:~ -selectnoactive
}
MC_celS = { ; エントリ表示 書式([;]メニュー)
だいな1 = M wF16,5 Z10 S1 T14 s1
だいな2 = M wF16,5 z10 S1 T14 s1
だいな3 = M wF16,5 zK10 S1 T14 s1
}
KC_main = { ; PPcメイン窓
B ,%"Binary menu" %M_bin
E ,%"JMTE|Text edit"%Orib,editor %FDC
I ,*ifmatch "option:e,attribure:d+" %: *countsize
L = @\L
N ,*makefile %${%1\%|%} %: %Ob notepad.exe %${%1\%|%}
P ,*pack "%2%\|%X|" %Or-
W = @F12
V ,*allview -hex
F4 = @D
F6 = @S
F7 = @F
F9 = @\L
F10 = @U
F11 ,*maximize %NC#
F12 ,*shownormal %NC#
ESC = @&F4
HOME = @\HOME
'@' ,%z
9 ,%j#18:\
LEFT ,*cursor 4, -1,6,B0100,6,B0100
RIGHT ,*cursor 4, 1,6,B0100,6,B0100
\ENTER = @Z
',' ,*RotateExecute dynastyle,*viewstyle だいな1,*viewstyle だいな2,*viewstyle だいな3
'~' ,*ifmatch "option:e,attribure:d+" %: *execute ~,*jumppath %FCD
\F1 = @A
\F2 = @I
\F3 = @M
\F8 ,%"JMTE|Text edit"%Orib,editor %FDC
\F9 ,*allview -hex
\F10 ,*pack "%2%\|%X|" %Or-
\HOME ,*unmarkentry
\RIGHT ,*cursor 8,1,13,0,13,0
\LEFT ,*cursor 8,1,12,0,12,0
\DOWN = @PDOWN
\UP = @PUP
^D ,*cursor 4, 1,6,B0100,6,B0100
^E = @UP
^F = @J
^M = @'+'
^S ,*cursor 4, -1,6,B0100,6,B0100
^X = @DOWN
^RIGHT ,*pairrate +1
^LEFT ,*pairrate -1
^DOWN ,*pairrate 50
^\RIGHT = @^RIGHT
^\LEFT = @^LEFT
}
KV_main = { ; PPvメイン窓
ENTER ,*ifmatch "!/VL/",%n %: *stop
 *ifmatch "/CA/",%*extract(C"%%n") %: *closeppx "VL" %: *execute C,*pane newpane CB %%: *focus CA %: *stop
 *ifmatch "/CB/",%*extract(C"%%n") %: *closeppx "VL" %: *execute C,*pane newpane CA %%: *pane swappane %%: *focus CB
SPACE ,*ifmatch "/VL/",%n %: %K-C"@DOWN@N"
BS ,*ifmatch "/VL/",%n %: %K-C"@UP@N"
F11 ,*maximize %NC#
F12 ,*shownormal %NC#
}
KV_page = { ; PPvテキスト(ページ)追加設定
B ,%K"@["
E ,%"JMTE|Text edit"%Orib,editor %FDC
I ,%K"@U"
L ,%K"@]"
T = @TAB
V ,%K"@C"
W ,%K"@;"
F3 = @']'
TAB ,*RotateExecute tbmode,*viewoption -hex,*viewoption -text
HOME ,%K"@^HOME"
\HOME ,%K"@^END"
\UP = @PUP
\DOWN = @PDOWN
^INS = @^C
}
KV_crt = { ; PPvテキスト(キャレット)追加設定
B ,%K"@["
E ,%"JMTE|Text edit"%Orib,editor %FDC
I ,%K"@U"
L ,%K"@]"
T = @TAB
V ,%K"@C"
W ,%K"@;"
F3 = @']'
TAB ,*RotateExecute tbmode,*viewoption -hex,*viewoption -text
HOME ,%K"@^HOME"
\HOME ,%K"@^END"
\UP = @PUP
\DOWN = @PDOWN
^INS = @^C
}
KV_img = { ; PPv画像追加設定
R ,%K-C"@R"
X = @L
Z = @K
HOME ,*RotateExecute id,*zoom 0,*zoom -1
}
E_cr = { ; [Enter]用判別
PNG ,*allview
:JPEG ,*allview
JPEG ,*allview
JPG ,*allview
:BMP ,*allview
BMP ,*allview
GIF ,*allview
TXT ,*allview
CPP ,*allview
H ,*allview
C ,*allview
L ,*allview
EL ,*allview
HTML ,*allview
HTM ,*allview
XYZZY ,*allview
EMACS ,*allview
SCM ,*allview
INI ,*allview
VBS ,*allview
JS ,*allview
PY ,*allview
PYW ,*allview
CFG ,*allview
LOG ,*allview
HOWM ,*allview
}

MC_menu = { ; PPc メニューバー、※指定すると初期メニューがなくなる
ファイル(&F) = %M_menuCFile
編集(&E) = %M_menuCEdit
ツール(&T) = %M_menuCTool
ウィンドウ(&W) = %M_menuCWindow
オプション(&O) = %K"CUSTOMIZE"
ヘルプ(&H) = %M_menuCHelp
}
M_menuCFile = { ** comment **
ドライブ情報...\t = %K"@I"
ドライブ移動(&W)...\t = %K"@\L"
ディレクトリサイズ\t = *countsize
}
M_menuCEdit = { ** comment **
すべて選択...\tK = *markentry
選択解除(&W)...\tShift+K = *unmarkentry
比較マーク\t = %K"@\O"
検索マーク\t = %K"@+"
壁紙に設定\t = 
機能一覧から\t = 
}
M_menuCTool = { ** comment **
ネットワークドライブの割当...\t = %K"NETUSE"
ネットワークドライブの切断(&W)...\t = %K"NETUNUSE"
ファイル検索\t = %K"@^W"
}
M_menuCWindow = { ** comment **
左右を均等にする...\tK = *pairrate 50
壁紙の更新(&W)...\tShift+K = 
}
M_menuCHelp = { ** comment **
目次...\tK = *help
about...\tShift+K = %K"ABOUT"
}

XC_stat = _AUTO,_AUTO,0,0,O"_GRE" R60 C / i"Marked" mn i"/" E0 S1 ms8 S1 i"Bytes" Df8 S1 i"Free" ; ステータス行
X_win = { ; 表示形式全般 *layout
CA = B001001001
CB = B001001001
}
F_mes = -16,0,0,0,400,0,0,0,128,3,2,1,17,MS 明朝 ; 汎用
C_entry = _WHI,_WHI,_CYA,_RED,_CYA, _MAG,_BLU,_GRE,_DWHI, _SBLU,_DBRO,_GRE,_RED,_MAG 
C_eInfo = _AUTO,_DRED,_AUTO,_DBLA,_DBLU,_DCYA,_DBLA,_BRO,_WHI,_WHI,_AUTO,_BLU,_AUTO, H404000,_BRO,_CYA,_GRE 
XC_celD = _AUTO,_AUTO,4,7 ; エントリ表示 文字,背景,カーソル,マーク 
X_inag = 0 ; 現在窓以外はグレー調に 0:しない 1:する
X_combo = 1 ; 複数 PPc を一体化 0:しない 1:する
X_combos = B0000000000001000010010000000000,B000 ; 一体化時の表示形式CC_log = _WHI,_BLA ; 共用ログ、アドレスバー(文字,背景)_AUTO可
X_mpane = 2,2 ; 一体化時の最大同時表示ペイン数,起動時のペイン数
XV_drag = 0,1,3,0 ; ドラッグ開始ボタン スクロール,選択,窓移動,ジェスチャ(右のみ)
  ; 0:使用しない 1:左 2:右 3:中/ホイール 4:左右同時 5:第4 6:第5
XC_dset = { 
* = B0000,0,0,0,-1,-1,B011111,B00000000000000000000000001,disp:"だいな1"
}