2023年11月24日金曜日

PPv窓間移動

[Tab]で起動中のPPvに順次フォーカスする。 以下をScriptフォルダにnextppv.jsという名前で保存。

以下を編集して取込。

KV_main    = {    ; PPvメイン窓
TAB    ,*selectppx %*script(%0Script\nextppv.js)
}

参考

十年くらい前に同じ機能のものを作ってたことに今気づいた(^_^;)

2023年11月9日木曜日

piCorePlayerのインストールと設定のメモ

ラズパイで音楽を再生するため、volumio、moode、muteと試してきた。 最近はpiCorePlayerを使っている。そのインストールと設定のメモ。

インストール

piCorePlayerのOSイメージをDownloads | piCorePlayer documentationからダウンロードし。Raspberry Pi ImagerでmicroSDカードに書き込む。

書き込みが終わったら、PCP_BOOT(ドライブ名:)を開く。wpa_supplicant.conf.sampleを複製し、wpa_supplicant.confにリネーム。wifiのssidとパスワードを追加する。ダブルクォーテーションは必要なので外さないこと

network={
    ssid="Wi-FiルーターのSSID"
    psk="Wi-Fiルーターへの接続暗号キー"
    key_mgmt=WPA-PSK
    auth_alg=OPEN
}

microSDカードを取り出し、ラズパイに差し込んで起動する。

piCorePlayer側の設定

Advanced IP Scannerやwifimanを使ってIPを調べ、ブラウザでアクセスする。

output device指定

  • Squeezelite Settingsタブへ
  • output deviceを指定してSAVE。僕の場合はAllo Boss DAC(and MiniBoss)になる。
  • MainpageでpiCorePlayerを再起動する。再起動後、Squeezelite is runningが緑になっていればOK

LMSのインストール

  • LMSタブへ。ページ最下段にあるbetaをクリックする
  • Install LMS on pCPを選択する。すると、「Not enough space. Press [OK] to start expanding your partition or [Cancel] to abort.」とポップアップで言われるのでOKを押す。すると、パーティションを変更できるページに飛ぶ。resizeを押すと再起動するので、しばらく待つ
  • もう一度Install LMS on pCPを選択。今度はインストールされる
  • MaimpageでpiCorePlayerを再起動する。再起動後、LMS is runningが緑になっていればOK

LMSの設定

  • LMSタブのLMS Web PageをクリックしてLMSの設定ページへ。初期設定は基本的にスキップでいい。
  • 右下のセッティングをクリックして、設定をする

youtubeプラグインのインストール

  • 設定からpluginタブを開く
  • youtubeにチェックを入れ、applyを押す。
  • restartしますか、というポップアップが出るのでYES

youtubeプラグインの設定

プレイヤーの設定

  • 右上のドロップダウンメニューからpiCorePlayerを選択

2023年11月8日水曜日

EverythingとPPxの連携

以下のように動作させる。

  • PPcの中心にEverythingを表示
  • 選択ファイルをPPcで開いたあと閉じる

準備

EverythingフォルダにあるEverything.iniを同フォルダに複製し、Everything2PPx.iniにリネーム。

Everything2PPx.iniをエディタで開き、該当行を以下のように変更。

open_folder_command2=$exec("D:\bin\ppx\PPCW.EXE" -r "%1")
open_file_command2=$exec("D:\bin\ppx\PPCW.EXE" -r -k $%J"%1")
close_on_execute=1

PPxでEverythingのエイリアスを登録。

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

やり方

PPcから以下のコマンドを実行。

%Oi *launch %'everything' -config Everything2PPx.ini %: *fitwindow %N,%*findwindowclass("EVERYTHING"),20 %: *focus #%*findwindowclass("EVERYTHING")

2023年11月3日金曜日

一行編集でzoxide

zoxideと一行編集を組み合わせ、利用頻度の高いディレクトリに素早く移動する。 以前はコンソールを利用していたが、「一行編集でコマンドを自動補完?」を組み合わせれば、migemoも使えるし起動も早いしで、こっちの方が使い勝手がいいかもしれないと思った。

準備

zoxideをインストールする。

以下を編集して取込。

_Command    = {
zoxidesearch    = *string o,name=%*input("" -title:"zoxide [^S]でリスト更新" -mode:e -k:"*completelist /set /file:%%0zoxidelist -match:6  %%: *mapkey use,K_zoxide")
    *ifmatch !0,0"%so"name"" %: *jumppath "%so"name""
}

-|K_zoxide=

K_zoxide = {
ENTER    ,*ifmatch -1,%*sendmessage(%N-L,392,0,0) %: %K"@DOWN @ENTER" %: *stop
    %K"@ENTER"
^S    ,*linemessage リストを更新します
    zoxide query -l > %0zoxidelist
}

KC_main = {
LOADEVENT ,*ifmatch "o:e,a:d",%1 %: %Obcd zoxide add "%1"
'@'    ,*zoxidesearch
}
Mes0411    = {
EXEF    = 
}

ディレクトリの履歴がある程度たまったら、以下のコマンドを実行し、履歴をファイルに書き出す。

zoxide query -l > %0zoxidelist

やり方

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

*zoxidesearch

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 ""

参考

2023年7月30日日曜日

PPvでEPWING形式の辞書を引く

PPvで、カーソル位置の/範囲選択した単語をEPWING形式の辞書で検索し、PPv[X]にその内容を表示する。

必要なもの

EBWIN4には、EPWING形式の辞書をあらかじめ登録しておこう。

準備

以下のファイルをScriptフォルダに保存する。EBWIN4のパスは環境に応じて読み替えてください。

dic.lua

selecttext.js

カーソル位置の単語を検索

単語が空白区切りになっている英文等の場合はこちらが便利。 [I]でキャレットモードにして、辞書を引きたい単語上にカーソルを置いてから、以下のコマンドを実行する。

*string o,tempfile=%*temp(name,f) %: %Oi nyagos -f %0Script\dic.lua %*script(%0Script\selectword.js) %so"tempfile" %: *ppv -utf8 -bootid:x -r %so"tempfile" -k *selectppx %n

一時ファイルが一々つくられるのが嫌な場合は、以下を適当なキーに登録して実行する。

*ifmatch "!o:e,a:d-",%si"tempfile" %: *string i,tempfile=%*temp(name,f)
%Oi nyagos -f %0Script\dic.lua %*script(%0Script\selectword.js) %si"tempfile"
*ppv -utf8 -bootid:x -r %si"tempfile" -k *selectppx %n

単語を範囲選択して検索

日本語で辞書を引くとき等は、単語の自動取得が難しいので、おそらくこちらの方法を取ることになる。

*string o,tempfile=%*temp(name,f) %: %Oi nyagos -f %0Script\dic.lua %*selecttext %so"tempfile" %: *ppv -utf8 -bootid:x -r %so"tempfile" -k *selectppx %n

参考

2023年7月29日土曜日

PPvで単語を考慮した折り返し

PPvで折り返し表示をしている場合、右端にある英単語が途中で改行される場合がある。 busyboxのfoldコマンドを利用してこれを解決する。

*ppv %C -esc:on -text -utf8 -document:"busybox fold -w 80 -s %%C > %%si'TempFile'"

nkfをかませる場合は以下のようになる。

*ppv %C -esc:on -text -utf8 -document:"nkf -w %%C | busybox fold -w 80 -s > %%si'TempFile'"

2023年7月28日金曜日

PPvでカーソル位置の単語(空白区切り)を取得

外国語の文献を読むとき、カーソル位置の単語を自動で取得できれば、それを辞書ソフトに投げることができて便利そうだなと思い、スクリプトを作った。

PPvをキャレットモードにし、以下のようなコマンドを打つ。

*linemessage %*script(%0Script\selectword.js)

2023年7月2日日曜日

PPv起動用PPc

カレントフォルダとは無関係な場所にあるファイルを、PPvで表示したい場合がある。

  • [ENTER] カーソルファイルをPPvで開き、自窓を閉じる

というキーバインドのPPcを用意することで、これを実現する。

準備

以下を編集して取込。

K_forppv    = {
ENTER    ,*ifmatch "o:e,a:d+","%*name(CD,"%R","%1")" %: %K"@ENTER" %: *stop
    *if %*js("PPx.result=PPx.SyncView") %: %Oi *windowsize %si"ppvid",%*windowrect(,w),%*calc("%*windowrect(,h)*2") %: *closeppx %n %: *stop
    %Oi *ppv %*name(CD,"%R","%1") -k *fitwindow %N,%%N,20 %%: *closeppx %n
\Y    ,*if %*js("PPx.result=PPx.SyncView") %: *ppvoption sync off %: *stop
    %Oi *ppv -k *setcust _User:id=%%*rightstr("%%n", 1) %: *fitwindow %N,%NV%*getcust(_User:id),30 %: *string i,ppvid=%NV%*getcust(_User:id) %: *ppvoption sync %*getcust(_User:id) %: *fitwindow %N,%NV%*getcust(_User:id),3
Q    ,*ppvoption sync off %: *closeppx %n
}

KV_main    = {    ; PPvメイン窓
O    ,%Oi *string i,ppcid=
 *windowsize %N,%*windowrect(,w),%*calc("%*windowrect(,h)/2")
 *ppc -r -bootid:v -single -k *jumppath %FD -entry:%FC %%: *string i,ppvid=%N %%: *mapkey use,K_forppv %%: *ppvoption sync %*rightstr("%n", 1)
 *fitwindow %N,%NCV,4
}

操作

以下のコマンドで、PPc[V]が開く。

*ppc -r -bootid:v -single -k *mapkey use,K_forppv

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

  • [ENTER] カーソルファイルをPPvで開き、自窓を閉じる
  • [\Y] 連動ビュー

連動ビュー中にEnterを押すとPPc[V]が閉じ、PPc[V]があったスペース分PPvが拡大する。

PPvには、以下のキーバインドが追加される。

  • [O] PPvの大きさが半分に。空いたスペースにPPc[V]を表示、かつ連動ビュー状態に

2023年6月24日土曜日

ファイル判別で項目にファイルパスを渡す方法の考察

前置き

PPxでは、%ME_xxx,filenameというように、ファイルパスを指定してのファイル判別ができる。ただ、個々の項目にそのファイルパスを渡す方法が難しいと思っていた。

最初に思いついたのは、ファイル判別をした後にfilenameを渡すやり方だ。

E_test	= {
*	,*launch
:DIR	,*ppc -r
TXT	,editor
}
%ME_test,"D:\Temp\hoge.txt" "D:\Temp\hoge.txt"

ただ、これだと起動オプションがfilenameの後ろに続く場合に困る。

次に思いついたのは、ユーザデータを利用するやり方だ。

E_test	= {
*	,*launch %*getcust(_User:hoge)
:DIR	,*ppc -r %*getcust(_User:hoge)
TXT	,editor %*getcust(_User:hoge)
}
*setcust _User:hoge="D:\Temp\hoge.txt" %: %ME_test

悪くはないが、構造がややこしい気がする。あとで手直しをするときに「このhogeってユーザデータなんだ…?」と思ってしまいそうだ。

以上のような理由で上の方法は使ってなかったが、最近ユーザコマンドを利用する方法を思いついたのでそれを紹介。

ユーザコマンドを利用する方法

以下を編集して取込。

_Command	= {
mypochis	= *execute ,%%M%*arg(1),%*arg(2)
}

-|E_test=

E_test	= {
*	,*launch %*arg(2)
:DIR	,*ppc -r %*arg(2)
TXT	,editor %*arg(2)
}

以下のコマンドを実行。

*mypochis E_test,"D:\Temp\hoge.txt"

これならシンプルで良さげ。

メニューを利用する場合

メニューを組み込みたい場合は、以下のようになる。

_Command	= {
mypochis	= *execute ,%%M%*arg(1),%*arg(2)
}

-|E_test=

E_test	= {
*	,*launch %*arg(2)
:DIR	,*ppc -r %*arg(2)
TXT	,editor %*arg(2)
JPG	,%M_myimage,M
PNG	,%M_myimage,M
}

-|M_myimage=

M_myimage	= {
MassiGra	= D:\bin\MassiGra\MassiGra.exe %*arg(2)
縮小	= D:\bin\Smahey\SmaHey.exe %*arg(2)
}

2023年6月19日月曜日

一行編集でコマンドを自動補完?

コマンドラインランチャでよくあるコマンドの自動補完を、以下のようにして擬似的に行う。

  • 補完候補リストの選択あり→選択中のアイテムを実行
  • 補完候補リストの選択なし→補完一覧リストの一番上を選択して実行

以下を編集して取込。

K_pplaunch = {
ENTER	,*ifmatch -1,%*sendmessage(%N-L,392,0,0) %: %K"@DOWN @ENTER" %: *stop
	%K"@ENTER"
^V	,*completelist -close %: *mapkey delete,K_pplaunch %: %K"@^V"
^D	,*deletehistory h,"%*edittext" %: *linemessage ヒストリから履歴を消去しました
}

以下のコマンドを実行する。補完候補ファイルはPPxフォルダ内のlaunch.txtという想定。

*string o,name=%*input("" -title:"PPlauncher" -mode:h -k:"*completelist /set /file:%%0launch.txt -match:6  %%: *mapkey use,K_pplaunch") %: *execute,%so"name"

[^V]はコピペのための処理。また、履歴に不要なものがあると意図しない動作をしうるので、[^D]で履歴を削除できるようにしている。 補完候補リストの選択位置の取得方法については、作者さんに教えていただいた。感謝!

2023年6月17日土曜日

一行編集で音楽ファイルを検索

一行編集でmigemoが使えるなら、音楽ファイルを検索してプレイヤーに投げるのにも使えるんじゃないか、と思いついた。

準備

音楽ファイルパスを各行に記載した補完候補ファイルを予め作成しておく。D:\Data\Music以下にmp3とflac形式で保存しているなら、以下のコマンドで作成できる。

*whereis -mask1:"a:d+;.mp3;.flac" -path:"D:\Data\Music" -dir:on -subdir:on -listfile:%0data\musicpath -name

以下を編集して取込。

_Command	= {
musicsearch	= *ifmatch 0,0%*getcust(_User:musicplayer) %: *setcust _User:musicplayer=%*input("D:\bin\AIMP5\AIMP.exe" -title:"音楽プレイヤーのパスを入力してください" -mode:e)
	*string o,name=%*input("" -title:"musicplayer - %*getcust(_User:musicplayer)" -mode:e -k:"*completelist /set /file:%%0data\\musicpath -match:6  %%: *mapkey use,K_musicplayer")
	*ifmatch !0,0%so"name" %: *launch %*getcust(_User:musicplayer) %so"name"
}

-|K_musicplayer=

K_musicplayer = {
ENTER	,*ifmatch -1,%*sendmessage(%N-L,392,0,0) %: %K"@DOWN @ENTER" %: *stop
	%K"@ENTER"
^O	,%M_musicplayer,P
^P	,%M_musicplayer,!START/STOP
LEFT	,*ifmatch !-1,%*sendmessage(%N-L,392,0,0) %: *replace %*name(D,%*edittext) %: %K"@^\A" %: *stop
	%K"@LEFT"
}

-|M_musicplayer=

M_musicplayer	= {
Playerの変更	=*setcust _User:musicplayer=%{%*getcust(_User:musicplayer)%|%} %: *setcaption musicplayer - %*getcust(_User:musicplayer)
AIMP5	=*setcust _User:musicplayer=D:\bin\AIMP5\AIMP.exe %: *setcaption musicplayer - %*getcust(_User:musicplayer)
AIMP5に追加	=*setcust _User:musicplayer=D:\bin\AIMP5\AIMP.exe /INSERT %: *setcaption musicplayer - %*getcust(_User:musicplayer)
--	= 
START/STOP	=D:\bin\AIMP5\AIMP.exe /PLAYPAUSE
--	= 
SCAN	=*whereis -mask1:"a:d+;.mp3;.flac" -path:"D:\Data\Music" -dir:on -subdir:on -listfile:%0data\musicpath -name
}

実行

*musicsearchで一行編集が開く。migemoでインクリメンタルサーチをしてENTERで、音楽プレイヤーで再生できる。 一行編集上でのその他のキーバインドは以下。

  • [Ctrl+O] 設定メニュー
  • [Ctrl+P] START/STOP
  • [LEFT] リスト選択時に階層を一つ上へ

2023年6月9日金曜日

一行編集の行頭コメント+migemo検索

コマンドの呼び出し方は忘却する

作ったコマンドをどうやって呼び出すか、という問題がある。 簡単なのは使っていないキーに登録することだが、そのコマンドが頻繁に使われないものである場合、そのキーを忘れてしまうわけだ。

  • キーバインドをコマンドに関係したものにする(RenameならRというように)
  • 2バインドキーを使う
  • エイリアスやユーザコマンドにして覚えやすい名前を付ける
  • メニューにしてまとめる

他、色々対策はありそうだが、僕の場合はどれも有効ではなかった。数ヶ月もすれば、どれも忘却してしまうからである。 最近は、補完候補ファイルにコマンドをまとめ、一行編集で呼び出すことでこの問題に対処していて、これはかなりうまくいっていた。行頭コメントとmigemo検索を利用すれば、さらに便利になりそうだと気づいたので、この記事で紹介する。

行頭コメント+migemo検索

一行編集には、任意の補完候補ファイルを読み込ませることができる。この補完候補ファイルには、以下のようにして行頭コメントを付けることができる。コメントが行頭にあれば、コマンドが長すぎてコメントが見えないという事態がなくなるのである。

;<comment>; text

migemo検索は、*completelistの-match:nオプションを使うとできるようになる。これにより、行頭コメントに日本語を使っても、それを検索できるわけだ。

*completelist -match:6

やり方

以下のような補完候補ファイルをPPxフォルダに保存する。

launch.txt

git
	add .
	commit -m"%*input("%*now" -title:"commit message")"
	push
	pull
	status
;<単独PPv用PPcを起動>; *ppc -r -bootid:v -single -k *mapkey use,K_forppv
;<反対窓にカーソル下フォルダを連動表示>; *mapkey use,K_openbyotherwin %: *string i,ppcid=%N %: *linecust obow,KC_main:SELECTEVENT,*ifmatch !0,0%(%si"ppcid" %: *execute ~,%%j%FCD%) %: %K"loadcust" %: *linemessage  Open by other Window MODE [ESC]QUIT
;<git add commit push>; *string o,commit_message="%*input("%*now" -title:"commit message")" %: %Os git add . %: git commit -m %so"commit_message" %: git push
;<aliasに登録>; *string o,name=%*input("%X" -title:"エイリアス名を入力してください" -mode:g) %: *alias %so"name"=%FCD
;<ハイライトモード>; *linecust highlight,KC_main:LOADEVENT,*ifmatch "o:e,a:d-","00_LISTFILE.txt" %%: *markentry -set:00_LISTFILE.txt %: *mapkey use,K_highlightmode %: *string i,hlnum=1 %: *linemessage HIGHLIGHT MODE [1-7]CHANGE COLOR ^[S]SAVE [ESC]QUIT
;<FastCopyモード>; *mapkey use,K_fastcopymode %: *linemessage FASTCOPY MODE [C]COPY [M]MOVE [D]DELETE [F2]MIRROR [ESC]QUIT
;<7-Zipモード>; *mapkey use,K_7zipmode %: *linemessage 7-Zip MODE [U]展開 [P]圧縮 [I]個別圧縮 [Esc]QUIT
;<markdownをhtmlに変換>; browser https://ikapper.github.io/md2html/
;<ダイアログで順次リネーム>; *script %0Script\rename.js
;<外部エディタでリネーム>; *script %0Script\batchRename.js
;<サブモニターを縦に>; *run -d:D:\bin\dc2 dc2.exe -configure="tate.xml"
;<サブモニターを横に>; *run -d:D:\bin\dc2 dc2.exe -configure="yoko.xml"
;<ゴミ箱メニュー>; %z"#10:\",B
;<rubyでローカルサーバーの起動>; C:\Ruby31-x64\bin\ruby.exe C:\Ruby31-x64\bin\bundle exec C:\Ruby31-x64\bin\jekyll serve -w --baseurl ""
editor %0launch.txt ;編集

以下のコマンドで、補完候補ファイルを読み込んで一行編集が起動。選択したコマンドが実行される。

*string o,name=%*input("" -title:"PPlauncher" -mode:h -k:"*completelist /set /file:%%0launch.txt -match:6 ") %: *execute,%so"name"

日本語の行頭コメントがあるため、長いコマンドであっても視認しやすい。さらに、migemoにより絞り込みも容易である。

2023年6月7日水曜日

反対窓にカーソル下フォルダを連動表示

現在窓のカーソルに連動して、反対窓でカーソル下フォルダを表示するようにする。 つかさのほえほえ日記: サブディレクトリを連動表示からの変化は以下の通り。

  • コマンドを実行したPPcでのみ有効に
  • SELECTEVENTを使うことで、マウスでの選択も有効に

以下を編集して取込。

K_openbyotherwin    = {
ESC    ,*mapkey delete,K_openbyotherwin %: *linecust obow,KC_main:SELECTEVENT, %: *linemessage Open by other Window MODE END

以下を実行する。

*mapkey use,K_openbyotherwin %: *string i,ppcid=%N %: *linecust obow,KC_main:SELECTEVENT,*ifmatch !0,0%(%si"ppcid" %: *execute ~,%%j%FCD%) %: %K"loadcust" %: *linemessage  Open by other Window MODE [ESC]QUIT

2023年5月9日火曜日

ハイライトモードを改良

つかさのほえほえ日記: ハイライトモードの使い勝手がいまいちだったので、改良した。大きな変更点は以下。

  • 00_LISTFILE.txtがディレクトリにある場合はハイライトを自動で再現
  • ハイライトエントリ上で[SPACE]でハイライト解除

まずは以下を編集して取込。

-|K_highlightmode =

K_highlightmode = {
SPACE	,*if !%si"hlnum" %: %K"@SPACE" %: *stop
	*if %*js("PPx.result=PPx.EntryHighlight") %: *markentry -highlight:0 %R %: %K"@DOWN" %: *stop
	*markentry -highlight:%si"hlnum" %R %: %K"@DOWN"
\SPACE	,*if !%si"hlnum" %: %K"@\SPACE" %: *stop
	*if %*js("PPx.result=PPx.EntryHighlight") %: *markentry -highlight:0 %R %: %K"@UP" %: *stop
	*markentry -highlight:%si"hlnum" %R %: %K"@UP"
^S	, *makelistfile 00_LISTFILE.txt -basic -highlight %: *linemessage ハイライトを保存しました
ESC	, *linecust highlight,KC_main:LOADEVENT, %: *mapkey delete,K_highlightmode %: *linemessage HIGHLIGHT MODE END
0	, *linemessage ファイルマークに変更しました %: *string i,hlnum=0
1	, *linemessage ハイライト1に変更しました %: *string i,hlnum=1
2	, *linemessage ハイライト2に変更しました %: *string i,hlnum=2
3	, *linemessage ハイライト3に変更しました %: *string i,hlnum=3
4	, *linemessage ハイライト4に変更しました %: *string i,hlnum=4
5	, *linemessage ハイライト5に変更しました %: *string i,hlnum=5
6	, *linemessage ハイライト6に変更しました %: *string i,hlnum=6
7	, *linemessage ハイライト7に変更しました %: *string i,hlnum=7
}

以下のコマンドを実行。

*linecust highlight,KC_main:LOADEVENT,*ifmatch "o:e,a:d-","00_LISTFILE.txt" %%: *markentry -set:00_LISTFILE.txt %: *mapkey use,K_highlightmode %: *string i,hlnum=1 %: *linemessage HIGHLIGHT MODE [1-7]CHANGE COLOR ^[S]SAVE [ESC]QUIT

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

  • [SPACE] カーソル位置のファイルをハイライト & [↓]
  • \[SPACE] カーソル位置のファイルをハイライト & [↓]
  • [数字] ハイライト色切り替え
  • ^[S] ハイライトを00_LISTFILE.txtに保存
  • [ESC] ハイライトモード終了

2023年4月28日金曜日

管理者権限のPPbを介してwifiをON/OFF

僕はasus t90chiという2in1PCを使っている。外で文章を打ち込む用途では、今でも最高の機種だと思っているのだが、一つだけ欠点があった。それは、チャタリングを起こしやすいこと。t90chi本体とキーボードをつなげているbluetoothが、wifiと干渉してチャタリングが起こしているらしい(多分)。文章を打ち込んでいる際、チャタリングを起こしてこおおおおおおおおおおおおおんなふうになるだけならまだしも、そのまま操作が効かなくなり、強制シャットダウンをするはめになることが多々ある。 これを解決するため、

  • 管理者権限のPPbをWindowsTerminalで起動し常駐
  • 管理者権限PPbを介してコマンドラインでwifiをオンオフ

できるようにする。どれだけ効果があるかは定かではない。

WindowsTerminalの設定

PPbのプロファイル作成

  • 名前をPPbに
  • コマンドラインにPPBW.EXEのパスを入力
  • 「このプロファイルを管理者として実行する」をオンに

スタートアップ

  • 既定のプロファイルをPPbに
  • 起動モードをフォーカスに

外観

  • 「ターミナルを最小化したときに通知領域で非表示にする」をオンに

やり方

  • WindowsTerminalを起動する。認証ダイアログが出るので許可する。
  • 以下のコマンドでwifiをオンオフする
netsh interface set interface "Wi-Fi" disable
netsh interface set interface "Wi-Fi" enabled

2023年4月6日木曜日

LIVA Z2 CMOSバッテリー交換

LIVA Z2を起動すると、「CMOS Settings Wrong」と言ってBIOS画面で止まるようになってしまった。CMOSバッテリーが切れてしまったらしい。起動のたびに時間を設定し直すのも面倒なので、LIVA Z2を分解して交換することにする。

必要なもの

  • ドライバー大小
  • ラジオペンチ
  • ピンセット
  • カッター
  • 両面テープ

ケースから取り出す

底部のネジをゆるめる。

下にスライドさせて外す。

中はこのようになっている。

2.5インチベイの取り外し

SSDの増設は、2.5インチベイに差し込むだけだ。

メモリ交換をするには、2.5インチベイを取り外す必要がある。 留具が引っかかっているだけなので、うまくずらして取り外そう。この際、基盤とつながっているコードが傷つかないように注意。

基盤からケーブル類を外す

メモリの増設や交換は、スロットに差し込むだけだ。

CMOSバッテリーを交換するには、さらに分解する必要がある。

まずは、真ん中にあるネジを外す。

次に、WiFiカードを取り外す。ネジを外して、スロットから引き抜こう。WiFiカードにつながってる二本の線は取れやすいので慎重に。取れた場合は、指で押し込めばつなげ直すことができる。

次に、2.5インチベイと基盤をつなげているコードを引き抜く。指でつかむのが難しい場合は、ピンセットを使うといい。

以上で、次のような状態になる。

ヒートシンクの取り外し

CMOSバッテリーは、この基盤の裏側、ヒートシンクの下にある。次は、ヒートシンクを取り外そう。

ヒートシンクとマザーボードを止めているのは、四箇所のプラスチックの留具だ。下から差し込むと、先が傘のように開いて固定する仕組みになっている。ラジオペンチで傘の先をつまんですぼめ、上から押し込むか、下から引っ張るかして取り外そう。

CMOSバッテリーの交換

基盤の裏面はこのようになっている。写真は既に取り外した状態だが、CMOSバッテリーはコネクタでつながっていて、電池は両面テープで固定されている。両面テープを外し、指でコネクタをつまんで取り外そう。

次に、新しく買ってきたCMOSバッテリーをコネクタに差し込み、両面テープで固定する。

注意点は、ケーブルに極性があること。プラスマイナスが逆だと動いてくれない。元からささっていたCMOSバッテリーと、買ってきたCMOSバッテリーを見比べ、ケーブルの色が逆になっている時は入れ替える必要がある。僕が買ったのは「TM CR2032 ケーブル2PINコネクタ付」という商品だったが、そのまま差し込んでも動かず、ケーブルを入れ替える必要があった。

コネクタの写真の箇所を、カッターかなにかで手前に少し曲げると、ケーブルを引き抜くことができる。引き抜いたら、左右を入れ替えて差し直そう。

CMOSバッテリーは5年くらいしたら切れてしまうようだ。ボタン電池をソケットに差し込むタイプのCMOSバッテリーも売っているようなので、後々のことを考えればそういうのを買う方がいいのかもしれない。

参考