おれのIT日記
2025/04/23 (水)
Linux
LinuxでもQXエディタやPaperPlainxUIを使いたい
LinuxからWineアプリを起動
こんなQX起動用のシェルを使っている。引数があればファイル名と判断して、winepathでWindowsアプリ用のドライブ指定名に変換して、QXに渡して起動。
#!/bin/bash
argv=$@
argc=$#
win_D=~/Documents/local_wine/_D
wine_prefix=~/.wine/_Win32/
qx_def=Wine_Mint
main ()
{
if [ $argc -gt 0 ]; then
for v in $argv
do
files=${files}"`WINEPREFIX="${wine_prefix}" winepath -w "$v"` "
done
fi
echo $files
cd ${win_D}/Win32App/Editor/QX
WINEPREFIX="${wine_prefix}" wine QXW32.exe -PQXW_${qx_def}.ini -FQXWMode_${qx_def}.ini -KQXWKey_${qx_def}.ini ${files} -#9592
}
main
QXというエディタは、愛用している人はよくご存知と思うが、本当は他にもいろいろな起動オプションが指定可能で、これだと自由度が下がってしまうのだが、おれの使い方だと、ファイル名を稀に指定する程度で、他はいつも同じ設定ファイル指定ぐらいだから、シェル上で決め打ちしている。
おれが使いたいオプションがあるとしたら行指定かなぁ。でも、行指定する場面というのは、必ず起動側のアプリが何かしらいる場面であり、bashから行数を手で指定する場面は、おれの場合は無いのね。
Paper Plain xUI、WinMerge、Bzエディタなどのバイナリエディタなども、従来のWindows上でのQXと同様、マクロから一発呼び出しで起動できるようにしている。QXは、utf8拡張マクロを導入して使っているが、他のテキストエディタに任せたい場合もあるので、マクロ呼び出しでカレント文書を他のアプリに渡して処理してから、QXに戻る癖がついている。
閑話休題
※ おれがQXから他アプリを起動する際に使っているマクロは、ねこみみ氏の POPLN_QX.mac です、感謝です。
※ さて、上記のような使い方をしていると、起動アプリに行数を渡してタグジャンプしたくなります(できれば桁数も)。そこで、超絶の神マクロを、勝手に稚拙な拡張をするようで恐縮なのですが、下記の注釈箇所の通り、$kと$lというふたつを勝手に拡張して利用しています。真似する方は、ねこみみ氏への感謝とリスペクトを表しつつ、自己責任でお願いします。
'(前略)
'-----------------------------------------------
' マクロ文字を含む文字列の展開
'-----------------------------------------------
function macstr$(strbuf$)
dim p,q,pp,buf$,ch$
p=1
do while 1
q=instr(p,strbuf$,"$")
if q=0 then
buf$=buf$+mid$(strbuf$,p): exit do
else
buf$=buf$+mid$(strbuf$,p,q-p)
ch$=mid$(strbuf$,q+1,1)
if ch$="c" then
buf$=buf$+","
elseif ch$="$" then
buf$=buf$+"$"
elseif @hwnd then
if ch$="P" then
buf$=buf$+@Pathname$
elseif ch$="F" then
buf$=buf$+@Filename$
elseif ch$="X" then
pp=inrstr(@Pathname$,".")
if pp then
buf$=buf$+left$(@Pathname$,pp-1)
else
buf$=buf$+@Pathname$
end if
elseif ch$="x" then
pp=inrstr(@Filename$,".")
if pp then
buf$=buf$+left$(@Filename$,pp-1)
else
buf$=buf$+@Filename$
end if
elseif ch$="d" then
pp=inrstr(@Pathname$,"\")
if pp then
buf$=buf$+left$(@Pathname$,pp-1)
else
buf$=buf$+curdir$()
end if
' =================================================================================
' 可変パラメータの独自追加 $k : カーソル桁 ただしタブがあると数え間違う。対策不能。
elseif ch$="k" then
buf$=buf$+cformat$("%d",@XDisplay)
' 可変パラメータの独自追加 $l : カレント行数
elseif ch$="l" then
buf$=buf$+cformat$("%d",@Line)
' ---------------------------------------------------------------------------------
end if
end if
p=q+2
end if
loop
macstr$=buf$
end function
'(後略)
WineアプリからLinuxアプリを起動
この日記は「おれ」「である」体で通してるんですが、流れ上、ここも丁寧語で書きます。
Paper Plain xUIや、ねこみみ氏のNyanFiなどの「ファイラー」は、ぜひ、Linuxでも使い続けたいものです。
実際、Wineで、ちゃんと動きます。
さて、ファイラーを使う以上、見つけたファイルを引数に、アプリを起動したくなりますな。
Wineで動くファイラーから、Wineで動くQXエディタを起動するのは、全く問題ありません。
しかし、例えば動画ファイルであれば、やっぱりLinuxネイティブのアプリを使いたいし、動画以外にもいろいろなファイルを扱う場面があり、何から何までWine環境で用意できるはずもなし、どうしてもLinuxアプリを起動したい場合が有ります。
この際、ファイル名は、Wineが理解するドライブ付きWindowsパス名を、Linuxネイティブのファイル名に変換せねばなりませんが、先に紹介したQX起動シェルでも使っていたwinepathが、ちゃんと変換してくれます。
あとは、かんたんなシェルを作っておいて、これを経由して、Linuxアプリを起動してます。
これは、Wineのサイトにあるドキュメントか何か、英語を斜め読みして覚えただけです。
#!/bin/sh
argv=$@
argc=$#
wine_prefix=~/.wine/_Win32/
$1 "`WINEPREFIX="${wine_prefix}" wine winepath -u "$2"`"
たとえばPPCWだと、デフォルトでzを押すとファイル名実行ですが、xを押すと、1行コマンド編集になり、選んだファイル名がセットされた状態になりますね。
"Daisy Holiday 2025-04-01.m4a"
ここで、上記のスクリプトを、頭に書き足してからEnterします。
ポイントは、上記で指定するスクリプトはLinuxのシェルであるけれども、起動を司る環境(この場合はPPCW)にとっては、Windowsアプリが理解できる名前でなければなりません。ただしパス区切り記号は、少なくともPPCWは、Linuxと同じ「/」(=スラッシュ)で理解してくれますのでたとえば、次のように打ちます。
D:/bin/run_linux.sh vlc "Daisy Holiday 2025-04-01.m4a"
上記の例は、直下に/binというディレクトリを持った所定の場所を、Dドライブとして登録している例です。
本当は、/home/xxxxx/binかもしれないし、/usr/local/binかもしれませんが、WINEがDドラとして到達できればOK。
もちろん、DでもXでもドライブ名は何でも構いません。winecfgで、GUIで設定できるので簡単ですね。
そして最初の引数vlcは、ご存知メディアプレーヤーの代表格ですが、ここを、ご自身の好きなアプリ名やシェル名にします。
私の場合は、上記を打つのも面倒なので、スクリプト自体を1文字にしたり直下に置くなどして使ってます。
PaperPlainの達人のあなたなら、きっと、もっと簡単に起動できるようショートカット登録するなど、なにか編み出してしまうことでしょう! やり方教えてほしいです。Paper Plain xUIについては、永遠の初心者なのでね。
以上、なんか出来そうなんだけど、面倒そうだな、で止まっていたアナタ。
あるいは、QXやPaper Plain xUI、そしてやたらとcmd.exeなどのCUI環境を愛しタイプしまくる、「誤ったWindowsの使い方」に親しんでいるアナタ。(おれのことか)
ちょっとした突破口を見つけるだけで、幸せなLinux生活の入口に立てると思います。
ご参考になさってください。