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