2023年7月30日日曜日

PPvでEPWING形式の辞書を引く

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

必要なもの

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

準備

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

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

単語が空白区切りになっている英文等の場合はこちらが便利。 [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] リスト選択時に階層を一つ上へ