2019年11月29日金曜日

PPxでripgrep+peco


カレントフォルダ以下をriprepで検索し、pecoで絞り込んでPPVで表示できるようにする。
howmファイルをインクリメンタルサーチできたら便利かもなと思ったのがきっかけ




利用したツール



  • ripgrep:高速な検索ツール
  • busybox:いろいろなlinuxのシェルコマンドを使える
  • peco

rg.exe busybox64.exe peco.exeをPPXフォルダに置いておく。

コマンド


*ppb -c chcp 65001 %%: %%0rg.exe -n -M 40 --max-columns-preview --color never -E Shift_JIS %%E . | %%0peco.exe | %%0busybox64.exe awk -F : -e "{printf $1 \" -k *jumpline L\" $2}" | %%0PPBW.exe -c *ppv %%%%1\%%%%*stdin(-utf8)


参考


Paper Plane xUI(PPx)に一発でソースコード検索&表示できる「peco」改を移植した - Qiita

2019年11月26日火曜日

PDFCPUで複数画像ファイルを一つのPDFに

PDFCPUについては、hokorobiさんのコメントで存在を知った。
ImageMagick+QPDFなんて比べものにならないくらい早いしコマンドも簡単なので、こっちを使いましょう。

インストール


Releases ・ pdfcpu/pdfcpu ・ GitHubからWindows用のバイナリを入手し、適当な場所に解凍


コマンド


pdfcpu import out.pdf %#FC

画像ファイルをマークし、%#FCで渡す(レスポンスファイルや*.jpgといった形式は現時点では無理そう)。
渡すファイルの数が多すぎて、コマンドラインの文字数制限が心配なときは

*maxlength 32000 %: pdfcpu import out.pdf %#FC

とするといいかもしれない(多分)。

2019年11月24日日曜日

ImageMagickとQPDFで複数画像ファイルを一つのPDFに

複数の画像ファイルを一つのPDFにまとめるとき、今まではImageMagickを使っていた。
だが、100枚単位の画像でこの処理をすると、数十GBのキャッシュを食ってたので(おま環かもしれないけど)、

1.ImageMagickでそれぞれの画像ファイルを1ページのPDFに変換
2.QPDFでPDFを一つにまとめる

という過程を取るようにしてみる。

*set tmpdir=%'tmp'\PDFTEMP %:
 *set inputfile=%"PDFに変換するファイル"%{*.%|%t%|%} %:
 *makedir %'tmpdir' %:
 *ppb -c %%OBis %%'imagemagic' mogrify -path %%'tmpdir' -format pdf %%'inputfile' %%:
 *cd %%'tmpdir' %%:
 %%'qpdf' --empty %%1\output.pdf --pages *.pdf -- %%:
 *delete %%'tmpdir'

参考



2019年11月19日火曜日

RANGEEVENT

RANGEEVENT


エントリカーソル移動カスタマイズで、デフォルトにない動作や、分岐など複雑なことをしたいときは、RANGEEVENTを使う。

XC_mvLR = 4,1,4,B0000,16,B0000

KC_main = {
RANGEEVENT1 ,*linemessage rangeevent1
RANGEEVENT2 ,*linemessage rangeevent2
}

こうすると、カーソル左右で範囲外移動をしたときに KC_main の RANGEEVENT1 / RANGEEVENT2 が呼び出されるようになる。

PPCからPPVに窓間移動




二画面で反対窓にPPVを埋め込み表示している時用の設定。PPVが表示されていればPPVにフォーカスを。そうでなければ窓間移動をさせる。

XC_mvLR = 4,1,16,B0000,16,B0000

KC_main = {
RANGEEVENT1 ,*ifmatch %NC,%NC#L %: %K"@BS" %: *stop
 *ifmatch 0,0%NVY %: %K"@TAB" %: *stop
 *focus VY
RANGEEVENT2 ,*ifmatch %NC,%NC#R %: %K"@BS" %: *stop
 *ifmatch 0,0%NVY %: %K"@TAB" %: *stop
 *focus VY
}

KV_page = { ; PPvテキスト(ページ)追加設定
LEFT ,*focus C
RIGHT ,*focus C
}

ちなみに埋め込み設定は以下。

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

_Command = {
halfview = *ifmatch /.+/,%NVY %: *ppvoption sync %: *stop
 %Oi *ppv -bootid:Y %*name(CD,"%R","%1") %: *ppvoption sync %: *wait 100,1 %: *capturewindow VY -pane:~ -selectnoactive
}

E_cr = { ; [Enter]用判別
:JPEG ,
:BMP ,
:XJS ,
:XVBS ,
PNG ,*halfview
JPG ,*halfview
JPEG ,*halfview
BMP ,*halfview
GIF ,*halfview
TXT ,*halfview
XYZZY ,*halfview
INI ,*halfview
VBS ,*halfview
JS ,*halfview
PY ,*halfview
PYW ,*halfview
HOWM ,*halfview
CFG ,*halfview
LOG ,*halfview
}

2019年11月18日月曜日

エントリカーソル移動カスタマイズの考察

XC_mvXXでエントリカーソル移動をカスタマイズできる。

  • XC_mvUD カーソル↑↓の設定
  • XC_mvLR カーソル←→の設定
  • XC_mvPG Page Up/Page Downの設定
  • XC_mvSC スクロールバーの設定
  • XC_mvWH ホイールの設定

設定項目の分析


XC_mvLR = 4,1,4,B0000,0,B010 ; [←][→]


右の数値だが、これは2つ1セットで見る。


4,1が「通常時動作」、4,B0000が「画面外に移動したときの動作」、0,B010が「範囲外に移動したときの動作」である。


通常時動作


通常の動作。

最初の数値が移動の種類を。次の数値が移動量を示している。デフォルトでは、「左右の方向に1桁スクロールする」動作を単位量1で実行する。あまりここをいじることはないだろう。

 画面外動作



ファイル数が多いと、ファイルが複数ページに渡って表示される。そのとき生じる、カーソルが画面外にはみ出したときの動作をここで指定する。デフォルトでは「4:一桁分スクロール」をする。

範囲外動作


最初と最後のエントリを超えてさらに移動したり、あるいは左端と右端のエントリからさらに左、右へ移動したりといった、範囲外操作をした場合の動作指定。デフォルトでは停止をする。
親ディレクトリへの移動や、最初のエントリと最後のエントリでカーソルループさせたいときはここをいじる。

この画像では「親ディレクトリへ」「末端/先頭に到達していない時は移動する」設定になっている。

設定方法


①移動方法 ②移動量


通常時移動は、最初の数値で移動方法を。次の数値で移動量を設定する。

移動方法は以下。
↓単位 形態:既定値 ページ スクロール カーソル移動せずにスクロール
---------------------------------------------------------
±1行(上下)   0       1        2        3
±1桁(左右)   4       5        6        7
±1ページ     8       9       10       11
±1/10ページ 12      13       14       15

上方/下方のマーク 16
次/前に選択したマーク 17

③画面外、範囲外方法



画面外、範囲外ともに、最初の数値で動作を設定する。

  0:停止
  はみ出す場合は移動しません。
  1:画面反対(線対称)
  左端なら右端に、右端なら左端に水平方向移動します。ページ移動は行いません。
  2:画面反対(点対称)
  左上端なら右下端に、右下端なら左上端に移動します。ページ移動は行いません。
  3:一行分スクロール
  上下方向に1行スクロールします
  4:一桁分スクロール
  左右方向に1桁スクロールします
  5:ページ切替
  6:親ディレクトリへ
  7:ドライブ選択
  8:[←]/[→]使用
  9:page up/down使用
 10:前のPPcへ
 11:次のPPcへ
 12:前のドライブへ
 13:次のドライブへ
 14:反対窓のPPcへ
 15:半ページ切替
 16: KC_main の RANGEEVENT1 / RANGEEVENT2 を実行
 17: KC_main の RANGEEVENT3 / RANGEEVENT4 を実行
 18: KC_main の RANGEEVENT5 / RANGEEVENT6 を実行
 19: KC_main の RANGEEVENT7 / RANGEEVENT8 を実行


④画面外、範囲外他



2つ目の数値でその他の設定を行う。

 B0000
  ||||
  |||+-- 1=リピート無し→「方法」を実行  リピート中→停止
  ||+--- 1=末端/先頭に到達していない時は移動する
  |+---- 1=二枚窓時は窓間移動を優先(移動方向が隣接窓側なら窓移動)
  +----- 1=移動時にマークする(Explorer風選択,画面外他のみ有効)

2019年11月8日金曜日

ImageMagickにレスポンスファイルを渡す

レスポンスファイルを作ってImageMagickに渡すことで、マークファイルを一括処理する。

-|M_Picture =

A_exec = { ; エイリアス
imagemagic    = "C:\Program Files\ImageMagick-7.0.8-Q16\magick.exe"
}

M_Picture = { ** comment **
ペイント(&P) = mspaint %FCD
-- = 
左に90度回転(&L) = %Ob *cd %*name(DB,"%a*8FCDB") %: %'imagemagic' mogrify -auto-orient -rotate 270 @%*name(C,"%so"response"") %: *trimmark
右に90度回転(&R) = %Ob *cd %*name(DB,"%a*8FCDB") %: %'imagemagic' mogrify -auto-orient -rotate 90 @%*name(C,"%so"response"") %: *trimmark
拡大縮小 = %Ob *cd %*name(DB,"%a*8FCDB") %: %'imagemagic' mogrify -geometry %"数値を入力してください"%{30%}%% @%*name(C,"%so"response"") %: *trimmark
拡張子を変換 = %Ob *cd %*name(DB,"%a*8FCDB") %: %'imagemagic' mogrify -format %"拡張子を入力してください"%{%|%t%|%} @%*name(C,"%so"response"") %: *trimmark
-- = 
壁紙にする(&W) = *customize X_bg:Path=%FDC %: *customize X_bg:Type=10
}

E_scr = { ; \[Enter]用判別
JPG ,%M_Picture,A
PNG ,%M_Picture,A
JPEG ,%M_Picture,A
BMP ,%M_Picture,A
}

2019年11月6日水曜日

pecoでサブフォルダを検索しAIMP4へ

pecoはWindows版のバイナリ(peco_windows_amd64.zip)を使う。

*ppb -c chcp 65001 %%: dir /a:d /b | %%0peco.exe | %%0ppbw.exe -c D:\bin\AIMP4\AIMP.exe %%%%*name(DC,"%%%%*stdin(-utf8)")

これでサブフォルダを検索し、AIMP4に投げる。


以前のやり方だと「日本語表示が崩れる」「実行後PPbが閉じない」という問題があったが、それぞれ「chcpでUTF-8にする」「PPb -c command...の形式にする」ことで解決するようだ。

migemoを使う場合




peco/migemogrepからバイナリを取得。

User\ユーザー名\.config\peco

にconfig.jsonを作成し、次のように記述。

{
    "CustomFilter": {
        "Migemo": {
            "Cmd": "D:\\bin\\ppx\\migemogrep\\migemogrep.exe",
            "Args": [ "$QUERY" ],
            "BufferThreshold": 10000
        }
    }
}


これでフィルターにmigemoが追加される。あとはCtrl+Rでフィルターを切り替えるか、コマンドラインオプションで指定する。

*ppb -c chcp 65001 %%: dir /a:d /b | %%0peco.exe --initial-filter Migemo | %%0ppbw.exe -c D:\bin\AIMP4\AIMP.exe %%%%*name(DC,"%%%%*stdin(-utf8)")

参考


Paper Plane xUI で peco を使ってタブを切り替える - Qiita

2019年11月3日日曜日

一行編集でステップイン・アウト

以前、一行編集でステップイン・アウトをする方法を紹介したが、その後色々と大きな動きがあったので書き直し。
PPxスレPart.6のステップイン・アウト関連の一連のレスを参考にした。1.69+2以降で動作する。



一行編集のタイトルが「PPlauncher」で、内容がファイルパスかフォルダパスなら、カーソル左右でステップイン・アウトを。それ以外の場合は通常のカーソル移動をする。

K_lied = {
LEFT ,*ifmatch !PPlauncher,%W %: %K"@LEFT" %: *stop
 *ifmatch "option:e,a:d+,a:d-","%*edittext" %: %K"@END" %: %k"^\LEFT BS" %: *stop
 %K"@LEFT"
RIGHT ,*ifmatch !PPlauncher,%W %: %K"@RIGHT" %: *stop
 *ifmatch "option:e,a:d+,a:d-","%*edittext" %: *replace %*edittext%*addchar(\) %: %K"@F4@TAB" %: *stop
 %K"@RIGHT"
}