2023年10月17日火曜日

rename時に特定の文字列を選択 or 数値を抽出

ファイル整理のために複数のファイルをリネームする際、「特定の文字列を別の文字列にする」「数値だけ取り出す」といった同じような操作を繰り返し行うことが多い。その作業を簡略化する。

準備

以下を編集して取込。

_Command = {
keywordrename = *rename "%R",%*input("%R" -title:"名前変更" -mode:e -select:l -k *find "%*arg(1)" -back)
intrename = *ifmatch 0,0%T %: *rename "%R",%*input("%*regexp("%R","/[^0-9]//g")" -title:"名前変更" -mode:e -select:fs) %: *stop
    *rename "%R",%*input("%*regexp("%Y","/[^0-9]//g").%T" -title:"名前変更" -mode:e -select:fs)
}

K_renamemode = {
R    ,*execute ,%si"renameexec"
ESC    ,*mapkey delete,K_renamemode %: *linemessage RENAME MODE END
0    ,*linemessage 通常のリネーム %: *string i,renameexec=%%K"@R"
1    ,*linemessage 指定したキーワードを選択状態に %: *string i,hoge= %"範囲選択するキーワード"%E %: *string i,renameexec=*keywordrename %%si"hoge"
2    ,*linemessage 数値を抽出 %: *string i,renameexec=*intrename
}

やり方

以下のコマンドを実行すると、Renameモードになる。

*mapkey use,K_renamemode %: *string i,renameexec=%%K"@R" %: *linemessage RENAME MODE [0-2]CHANGE MODE [R]RENAME [ESC]QUIT

キーバインドは以下の通り。

  • [R]:リネーム
  • [0]:通常のリネーム
  • [1]:指定したキーワードを選択状態に
  • [2]:数値を抽出
  • [ESC]:Renameモード終了

指定したキーワードを選択状態に

[1]を押すと表示される一行編集にキーワードを入力する。

[R]でリネームをする際、入力したキーワードが選択状態になる。

数値を抽出

[R]でリネームする際、ファイル名から抽出した数値が入力された状態になる。

2023年10月6日金曜日

ripgrep-allとPPxの連携

ripgrep-allでヒットしたファイルをPPcで表示したり、ハイライトしたりする。

必要なもの

nyagosはscoopとかchocolateyみたいなパッケージ管理ソフトでインストールするのがおすすめ。 ripgrep-allとPopplerについては以前の記事を参照。

準備

以下の2つのファイルをScriptフォルダに保存。

rga.lua

basename.js

やり方

ヒットしたファイルをPPcに表示

検索したいPDFフォルダに行き、以下のコマンドを実行。

*string o,tempfile=%*temp(name,f) %: %Oi nyagos -f %0Script\rga.lua "%E" "%1" %so"tempfile" %: *jumppath %so"tempfile"::listfile

ヒットしたファイルをハイライト表示

検索したいPDFフォルダに行き、以下のコマンドを実行。

*string o,tempfile=%*temp(name,f) %: %Ois nyagos -f %0Script\rga.lua "%E" "%1" %so"tempfile" %: *script %0Script\basename.js,%so"tempfile" %: *markentry -highlight:1 -list:%so"tempfile"

2023年10月5日木曜日

ripgrep-allをWindowsにインストール

複数のPDFからキーワード検索をするため、ripgrep-allをインストールした。 色々つまずいた上、ネット上ではあまり情報も載ってないようなのでその方法をメモ。おま環かもしれないが、公式に載ってるchocolateyを使う方法ではうまくいかなかった。

ripgrep-all

Releases ・ phiresky/ripgrep-allからripgrep_all-v1.0.0-alpha.5-x86_64-pc-windows-msvc.zipをダウンロード。

適当な場所に解凍し、環境変数のPATHを通す。

コマンドプロンプトやPowerShellで以下のコマンドを打ち込んで、パスが通っているか確認。

rga --version

以下のように表示されたらおk。

ripgrep-all 1.0.0-alpha.5

Poppler

PDFを検索するには、Popplerに入っているpdftotextが必要になる。

Releases · oschwartz10612/poppler-windowsからRelease-23.08.0-0.zipをダウンロード。

適当な場所に解凍し、環境変数のPATHを通す。

コマンドプロンプトやPowerShellで以下のコマンドを打ち込んで、パスが通っているか確認。

pdftotext -v

以下のように表示されたらおk。

pdftotext version 23.08.0
Copyright 2005-2023 The Poppler Developers - http://poppler.freedesktop.org
Copyright 1996-2011, 2022 Glyph & Cog, LLC

やり方

rga 検索キーワード 対象フォルダ

で検索できる。

参考

2023年8月20日日曜日

PPvの位置を一行編集で保存・再現

PPvの位置を一行編集で保存・再現できるようにする。コメントを付けることで、一行編集での検索をしやすくしている。

準備

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

seq.js

getwinpos.js

editwinpos.js

以下を編集して取込。

_Command	= {	; ユーザコマンド・関数
savewindowpos	= *setcust %*arg(1):l=%*windowrect(,l)
	*setcust %*arg(1):t=%*windowrect(,t)
	*setcust %*arg(1):w=%*windowrect(,w)
	*setcust %*arg(1):h=%*windowrect(,h)
	*setcust %*arg(1):comment=%*arg(2)
}

やり方

位置の登録

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

*savewindowpos S_ppvpos%*script(%0Script\seq.js,S_ppvpos,l),%"コメントを記入してください"%E

S_ppvpos0に位置と大きさとコメントが保存される。 次にこのコマンドを実行するとS_ppvpos1に、さらにその次はS_ppvpos2に ... と、位置情報はS_ppvpos+連番に保存される。

位置の再現

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

*string o,name=%*input("" -title:"PPvの位置を変更" -mode:e -k:"*completelist /set /file:%%*script(%%0Script\getwinpos.js,S_ppvpos) -match:6 ") %: *windowposition %N,%so"name"

登録したユーザデータを補完候補ファイルにした一行編集が起動する。

登録した情報の編集

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

*script %0Script\editwinpos.js,S_ppvpos,%*script(%0Script\getwinpos.js,S_ppvpos)

一行ごとに位置情報が記載されたテキストファイルがPPEで開く。編集、保存してからPPEを閉じると、編集内容がユーザデータに反映される。

2023-08-21追記

色々ミスがあったので全面的に修正。

2023年8月17日木曜日

特定のディレクトリ以下の背景色や壁紙を変更(*diroptionを使用)

前回のはディレクトリ名によっては機能しない場合があったので、真面目に考えてみた。

通常時の背景画像と背景色設定

これを設定しておかないと、背景色や背景画像を変えたディレクトリを抜けても、元に戻らない。以下のコマンドを一度実行する。これは背景画像なし、背景色もなしの設定。

*diroption -"*" cmd:"*deletecust X_bg:P_%%n %%: *deletecust X_bg:T_%%n %%: *color back"

特定のディレクトリ以下の背景色を変更

該当ディレクトリに行き、以下のコマンドを実行する。

*diroption -thisbranch cmd "*color back %"_DBLA: 暗灰  _DBLU: 暗青  _DRED: 暗赤/茶  _DMAG: 暗紫 _DGRE: 暗緑  _DCYA: 暗水  _DBRO: 暗黄"%{_DBLU%}"

もとに戻す場合は該当ディレクトリで以下のコマンドを実行。

*diroption -thisbranch cmd ""

特定のディレクトリ以下の背景画像を変更

以下を編集して取込。サブ窓用のユーザコマンド*opensubwinを登録しておく。

_Command	= {	; ユーザコマンド・関数
opensubwin	= *ppc -r -bootid:x -single -k *jumppath %*arg(1) %%: *fitwindow %NC,%%NC,20 %%: *mapkey use,K_subwin %%: *js "PPx.EntryIndex = 2" %%: *linemessage %*arg(2)
}

K_subwin	= {	** comment **
\ENTER	,*execute ,%*getcust(_User:temp_exec)
}

該当ディレクトリに行き、以下のコマンドを実行する。

*setcust _User:temp_exec=*execute %n,*diroption -thisbranch cmd "%(*setcust X_bg:T_%%%%n=20 %%%%: *setcust X_bg:P_%%%%n=%FCD %%%%: %%%%K"loadcust"%) %%: %%K"@Q" %: *opensubwin %1,壁紙にする画像ファイルを選択してください

サブ窓が開くので、壁紙にしたい画像ファイルにカーソルをあわせ、Shift+ENTERを押す。

F5を押して、背景画像が変更されていたら成功。

もとに戻す場合は該当ディレクトリで以下のコマンドを実行。

*diroption -thisbranch cmd ""

2023年8月8日火曜日

PPvでPDFのテキストを読む

PDFファイルをtext形式に変換してPPvに表示する。変換にはpdftotextというコマンドラインツールを使用。 なぜこんなことをするかというと、EPWING形式の辞書を引くためです。

準備

Releases ・ oschwartz10612/poppler-windowsからRelease-23.07.0-0.zipをダウンロード。適当な場所に解凍する。

以下を編集して取込。pdftotextのパスは各自読み替えてください。

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

_Command	= {	; ユーザコマンド・関数
pdftoppv	= *string o,tempfile=%*temp(name,f) %: %Oi pdftotext -f %*arg(2) -l %*arg(2) -layout -nopgbrk "%*arg(1)" %so"tempfile" %: *ppv -utf8 %so"tempfile" -k *string i,pagenum=%*arg(2) %%: *string i,name="%*arg(1)" %%: *string i,tempfile=%so"tempfile" %%: *mapkey use,K_forpdftoppv
pdftoppvnext	= %Oi pdftotext -f %*calc("%si"pagenum"+1") -l %*calc("%si"pagenum"+1") -layout -nopgbrk %si"name" %si"tempfile" %: *ppv -utf8 -r -bootid:%*rightstr("%n", 1) %si"tempfile" -k *string i,pagenum=%*calc("%si"pagenum"+1")
pdftoppvprev	= %Oi pdftotext -f %*calc("%si"pagenum"-1") -l %*calc("%si"pagenum"-1") -layout -nopgbrk %si"name" %si"tempfile" %: *ppv -utf8 -r -bootid:%*rightstr("%n", 1) %si"tempfile" -k *string i,pagenum=%*calc("%si"pagenum"-1")
pdftoppvjump	= %Oi pdftotext -f %en %"移動するページ数" %${%si"pagenum"%} -l %${%si"pagenum"%} -layout -nopgbrk %si"name" %si"tempfile" %: *ppv -utf8 -r -bootid:%*rightstr("%n", 1) %si"tempfile" -k *string i,pagenum=%${%si"pagenum"%}
}

K_forpdftoppv    = {
^LEFT    ,*pdftoppvprev
^RIGHT    ,*pdftoppvnext
J    ,*pdftoppvjump
}

やり方

PDFファイルにカーソルをあわせて以下を実行する。第一引数にはファイルパスを、第二引数にはページ数を指定する。

*pdftoppv %FCDN,1

PPvには以下の操作が追加される。

  • ^[←] 前のページ
  • ^[→] 次のページ
  • [J] 指定したページへ移動

おまけ:標準出力の場合

標準出力を利用する場合は以下のようになる。

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

_Command	= {	; ユーザコマンド・関数
pdftoppv	= *ppv "%*arg(1)" -esc:on -text -utf8 -document:"pdftotext -f %*arg(2) -l %*arg(2) -layout -nopgbrk %"%*arg(1)" - > %%si'TempFile'" -k *string i,pagenum=%*arg(2) %%: *mapkey use,K_forpdftoppv
pdftoppvnext	= *ppv -r -bootid:%*rightstr("%n", 1) %FCD -esc:on -text -utf8 -document:"pdftotext -f %*calc("%si"pagenum"+1") -l %*calc("%si"pagenum"+1") -layout -nopgbrk %%FCD - > %%si'TempFile'" -k *string i,pagenum=%*calc("%si"pagenum"+1")
pdftoppvprev	= *ppv -r -bootid:%*rightstr("%n", 1) %FCD -esc:on -text -utf8 -document:"pdftotext -f %*calc("%si"pagenum"-1") -l %*calc("%si"pagenum"-1") -layout -nopgbrk %%FCD - > %%si'TempFile'" -k *string i,pagenum=%*calc("%si"pagenum"-1")
pdftoppvjump	= *ppv -r -bootid:%*rightstr("%n", 1) %FCD -esc:on -text -utf8 -document:"pdftotext -f %en %"移動するページ数" %${%si"pagenum"%} -l %${%si"pagenum"%} -layout -nopgbrk %%FCD - > %%si'TempFile'" -k *string i,pagenum=%${%si"pagenum"%}
}

K_forpdftoppv    = {
^LEFT    ,*pdftoppvprev
^RIGHT    ,*pdftoppvnext
J    ,*pdftoppvjump
}

参考

2023年8月3日木曜日

特定のディレクトリ以下の背景色や壁紙を変更

特定のディレクトリ以下の背景色や壁紙が変更されるようにする。 通常、この手のカスタマイズは

  • 特定のディレクトリ以下で背景色や壁紙を変更
  • 別のディレクトリに行ったときに元に戻す

という処理が必要になり、まあまあ色々なことを考えてカスタマイズする必要があった。 最近「変えたいディレクトリでこれを実行したらそれでOK!」なコマンドを思いついたので記事にします。

準備

以下を編集して取込。

_Command	= {	; ユーザコマンド・関数
bgcolorchange	= *color back %*arg(1)
 *linecust backcolor,KC_main:LOADEVENT,*ifmatch "!/^%*regexp("%1","s/\\/\\\\/g")/",%%1 %%: *linecust backcolor,KC_main:LOADEVENT, %%: %%K"loadcust"
bgimagechange	= *string o,bgpath=%*getcust(X_bg:Path)
 *string o,bgtype=%*getcust(X_bg:Type)
 *setcust X_bg:Path=%*arg(1)
 *customize X_bg:Type=%*arg(2)
 *linecust bg,KC_main:LOADEVENT,*ifmatch "!/^%*regexp("%1","s/\\/\\\\/g")/",%%1 %%: *linecust bg,KC_main:LOADEVENT, %%: *setcust X_bg:Path=%so"bgpath" %%: *customize X_bg:Type=%so"bgtype"
}
  • *bgcolorchange 背景色変更用。第一引数には、_BLU等の色指定を入れる。
  • *bgimagechange 壁紙変更用。第一引数に壁紙のパスを、第二引数にX_bg:typeの数値を入れる。

パスによっては機能しない場合があるので、そのときは正規表現をいじる等、色々と調整してみてください。

やり方

特定のディレクトリ以下の背景色を変えたい場合は、そのディレクトリで以下を実行する。

*diroption -thisbranch cmd "*bgcolorchange _DBLU"

特定のディレクトリ以下の壁紙を変えたい場合は、そのディレクトリで以下を実行する。

*diroption -thisbranch cmd "*bgimagechange %0kabegami.jpg,1"

ちなみにこれらのディレクトリ別設定は以下で解除できる。

*diroption -thisbranch cmd ""

参考