外国語の文献を読むとき、カーソル位置の単語を自動で取得できれば、それを辞書ソフトに投げることができて便利そうだなと思い、スクリプトを作った。
PPvをキャレットモードにし、以下のようなコマンドを打つ。
*linemessage %*script(%0Script\selectword.js)
外国語の文献を読むとき、カーソル位置の単語を自動で取得できれば、それを辞書ソフトに投げることができて便利そうだなと思い、スクリプトを作った。
PPvをキャレットモードにし、以下のようなコマンドを打つ。
*linemessage %*script(%0Script\selectword.js)
カレントフォルダとは無関係な場所にあるファイルを、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を押すとPPc[V]が閉じ、PPc[V]があったスペース分PPvが拡大する。
PPvには、以下のキーバインドが追加される。
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)
}
コマンドラインランチャでよくあるコマンドの自動補完を、以下のようにして擬似的に行う。
以下を編集して取込。
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]で履歴を削除できるようにしている。 補完候補リストの選択位置の取得方法については、作者さんに教えていただいた。感謝!
一行編集で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で、音楽プレイヤーで再生できる。 一行編集上でのその他のキーバインドは以下。
作ったコマンドをどうやって呼び出すか、という問題がある。 簡単なのは使っていないキーに登録することだが、そのコマンドが頻繁に使われないものである場合、そのキーを忘れてしまうわけだ。
他、色々対策はありそうだが、僕の場合はどれも有効ではなかった。数ヶ月もすれば、どれも忘却してしまうからである。 最近は、補完候補ファイルにコマンドをまとめ、一行編集で呼び出すことでこの問題に対処していて、これはかなりうまくいっていた。行頭コメントと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により絞り込みも容易である。
現在窓のカーソルに連動して、反対窓でカーソル下フォルダを表示するようにする。 つかさのほえほえ日記: サブディレクトリを連動表示からの変化は以下の通り。
以下を編集して取込。
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