[ 新規に投稿する ]

ファイルプレビュー用アプリ「QuickLook」との連携についてNo.08395
mac さん 20/02/07 16:58 [ コメントを投稿する ]
  こんにちは。
いつも便利に利用させてもらっています。

「QuickLook」なる、macOSのQuickLookに良く似たファイルプレビュー用アプリがあるのですが
このアプリと秀丸ファイラーの連携をなんとか改善できないか、相談があります。


このアプリ「QuickLook」は、Windows標準のExplorer上から起動(スペースキー押下)させると
矢印キーやマウス操作によるExplorer上のフォーカス遷移に応じてプレビュー対象が同期してくれます。
デスクトップやコモンダイアログ等でも同様に機能します。

ところが、秀丸ファイラから起動した場合はフォーカス遷移と同期できません。
※現状、下記のパスをブックマークに登録しスペースキーに割り当てて起動させています
  "%LOCALAPPDATA%\Programs\QuickLook\QuickLook.exe" "%d%b"


Explorerと同様に連携できるよう、秀丸ファイラー側で手当てできないでしょうか。



尚、github上で他のファイルマネージャーアプリ開発者の方が連携方法を相談(下記参照)していて、
QuickLook作者からの解説に基づいて、連携に成功するまでの流れが記載されています。

ぜひとも下記のissueをご確認の上、対応についてご検討いただけると幸いです。



QuickLook[github]:
https://github.com/QL-Win/QuickLook

当該issue(#557):
https://github.com/QL-Win/QuickLook/issues/557
[ ]
RE:08395 ファイルプレビュー用アプリ「QuickLook」との連携にNo.08396
秀丸担当 さん 20/02/07 18:14 [ コメントを投稿する ]
 
QuickLook.exeがコマンドラインに対応しているのであれば、既に行われているように、起動そのものはブックマークに追加してキー割り当てできると思います。
試してみたところでは、別のファイルで実行したら切り替わり、同じ選択項目でもう一度実行すると閉じるのもできるようです。

ファイル一覧の選択が変わったときに自動的に実行するのは、できないです。
その都度スペースキーを押すなどをして実行する必要があります。
やるとしたら、アドイン的なソフトを作るとか、スクリプトで自動的な実行もできるようにするとか、何らかの秀丸ファイラーClassic側の対応が必要だと思います。
スクリプトを拡張して何かできないか検討してみます。
[ ]
RE:08396 ファイルプレビュー用アプリ「QuickLook」との連携にNo.08402
mac さん 20/02/10 08:26 [ コメントを投稿する ]
  お返事ありがとうございます。

ご確認いただいたとおり、解決したいのは「起動/閉じる」操作ではなく「フォーカス遷移時のプレビュー同期」になります。

秀丸ファイラ組み込みのプレビュー機能と比較して、ポップアップでより大きくプレビューできるところが気に入っています。
FLOSSとして公開されているとはいえ、一般化されていない特定の外部アプリとの連携はだいぶ無茶なお願いだとは思っておりますが
うまくできれば秀丸ファイラーそのものの利便性と相まって、より使いやすくなると思って相談させてもらいました。

ご検討よろしくお願いします。
[ ]
RE:08402 ファイルプレビュー用アプリ「QuickLook」との連携にNo.08404
秀丸担当 さん 20/02/13 11:41 [ コメントを投稿する ]
 
V1.52β8で一応最低限の対応可能なスクリプトの対応をしてみています。
上級者向け設定に自動起動スクリプトの設定を追加していて、ここに以下のようなjsファイルを指定すると一応それなりに動作はしました。
元記事によればパイプを使うといいということらしいのですが、試してみたところでは、パイクはうまく動作しないです。
下記のサンプルでは頻繁にexeを実行しています。

var hwnd=FindWindow("HwndWrapper[QuickLook.exe;;","",1);
if( hwnd != 0 && IsWindowVisible(hwnd) ){
    var objShell = new ActiveXObject("WScript.Shell");
    var exe =objShell.ExpandEnvironmentStrings("%LOCALAPPDATA%")
         + "\\Programs\\QuickLook\\QuickLook.exe";
    var iItem=GetNextItem(-1,2);
    if(iItem<0){
        //Message("選択がありません");
    } else {
        //Message("QuickLookあり");
        objShell.Run( exe + " " + GetItemPath(iItem) );
        objShell = null;
    }

} else {
    //Message("QuickLookなし");
}
[ ]
RE:08404 ファイルプレビュー用アプリ「QuickLook」との連携にNo.08405
mak_kawa さん 20/02/13 17:10 [ コメントを投稿する ]
  秀丸担当さん  &mac さん

横から失礼します.このスレッドを読んで QuickLook に興味がわき,さっそくβ8とともに入れてみました.秀丸担当さん提供のスクリプトも問題なく動作しています.

この秀丸ファイラーとの連携はけっこう便利ですね...素晴らしいです.

mac さん,ちょっとお聞きしたいのですが;

> "%LOCALAPPDATA%\Programs\QuickLook\QuickLook.exe" "%d%b"

このパラメータ,%f でもなく %1 でもないのは,何か利点というか理由があるのだと思いますが,ちょっと分かりませんでした.もちろん %d%b で問題なく動作するわけですが,よろしければご教示よろしく.
[ ]
RE:08405 ファイルプレビュー用アプリ「QuickLook」との連携にNo.08408
秀丸担当 さん 20/02/14 10:33 [ コメントを投稿する ]
 
スクリプトを試していただいてありがとうございます。
%d%bというのは、フルパスになっていれば、どちらでもいけると思います。
1つ気になったのが、ルートだと違うかもしれないです。
c:\test.txtだと、%dが「c:\」で、%bは「\test.txt」なので、\が二重になる可能性がありました。%1や%fのほうがいいかもしれないです。
[ ]
RE:08408 ファイルプレビュー用アプリ「QuickLook」との連携にNo.08410
mak_kawa さん 20/02/14 11:35 [ コメントを投稿する ]
  秀丸担当さん

>1つ気になったのが、ルートだと違うかもしれないです。
>c:\test.txtだと、%dが「c:\」で、%bは「\test.txt」なので、\が二重になる可能性がありました。%1や%fのほうがいいかもしれないです。

ご教示ありがとうございます.了解しました.

QuickLook + script 関連の動作報告です.

Photoshop のデータ(PSD形式)を秀丸ファイラからプレビューすると,2枚目以降は『QuickLookはすでに実行されている』というダイアログが出て,プレビューができなかったり,既存のプレビューが閉じずに増えていくという現象が起きます.

他のデータ形式では問題が出ていないので,おそらく QuickLook 側の処理の問題と思われますが,一応ご報告まで.
[ ]
RE:08410 ファイルプレビュー用アプリ「QuickLook」との連携にNo.08411
秀丸担当 さん 20/02/14 14:53 [ コメントを投稿する ]
 
今回の対応は選択が変更されたときにスクリプトが実行できるタイミングを得たことが主で、おそらくSpeceキーに割り当ててもタイミングなどでそうなる可能性があるのだと思います。
QuickLookとの直接のやりとりはexeを実行することのみで、秀丸ファイラーClassicとして対応するのは難しそうです。すみません。
[ ]
RE:08411 ファイルプレビュー用アプリ「QuickLook」との連携にNo.08412
mak_kawa さん 20/02/14 16:49 [ コメントを投稿する ]
  秀丸担当さん

>QuickLookとの直接のやりとりはexeを実行することのみで、秀丸ファイラーClassicとして対応するのは難しそうです。すみません。

そうですね.私は担当さんご提供の現状のスクリプトで十分に便利なので満足しています.感謝です.
[ ]
RE:08405 ファイルプレビュー用アプリ「QuickLook」との連携にNo.08413
mac さん 20/02/15 02:15 [ コメントを投稿する ]
  V1.52β8リリースありがとうございます!
どうやらお返事が遅れてしまったようで申し訳ありません。。。

早速サンプルスクリプトを登録して、ひとしきり動作確認をしてみました。
おおむね思い描いた通りに動作しており、大満足です。

ご対応ありがとうございました!!



尚、スクリプトの動作でいくつか気になる点がありましたので報告しておきます。

1) GetItemPath(iItem)にスペースが含まれると、QuickLook側で(mak_kawaさん報告と同様の)エラーが発生しました
→ GetItemPath(iItem)を「"」で囲むことで解決できました。

2) ファイルフォーカス遷移から「スクリプト内の objShell.Run 実行」までに僅かな時間差があるためか
   QuickLookウインドウ非オープン時にファイル選択→スペースキー即押し、と操作した場合に
   スクリプト側のobjShell.Run実行によってQuickLookウインドウが即閉じてしまうことがありました
   (スペースでプレビュー起動→スクリプトで同じパスでQuickLookが呼び出される→プレビュー閉じる)
→ objShell.Run実行直前に「if(hwnd != 0)」条件を追加して再現タイミングを狭めることができました
  完全に解消する手段があれば良いのですが、ひとまずこれで使っていこうと思います

3) Explorerとの連携と比較して反応がワンテンポ遅れている
→ もし叶うなら、反応速度を改善できると嬉しいです


<<修正版スクリプト>>
var hwnd = FindWindow("HwndWrapper[QuickLook.exe;;","",1);
if(hwnd != 0 && IsWindowVisible(hwnd)){
    var iItem = GetNextItem(-1,2);
    //Message(GetItemPath(iItem));
    if(iItem<0){
        //Message("選択がありません");
    } else {
        //Message("QuickLookあり");
        var objShell = new ActiveXObject("WScript.Shell");
        var exe = objShell.ExpandEnvironmentStrings("%LOCALAPPDATA%")
             + "\\Programs\\QuickLook\\QuickLook.exe"
             + ' "' + GetItemPath(iItem)+'"';
        if(hwnd != 0){
            objShell.Run( exe );
            objShell = null;
        }
    }
} else {
    //Message("QuickLookなし");
}
[ ]
RE:08405 ファイルプレビュー用アプリ「QuickLook」との連携にNo.08414
mac さん 20/02/15 02:48 [ コメントを投稿する ]
  mak_kawaさん、こんにちは

>このパラメータ,%f でもなく %1 でもないのは,何か利点というか理由があるのだと思いますが,ちょっと分かりませんでした.もちろん %d%b で問題なく動作するわけですが,よろしければご教示よろしく.

たしか、フォルダツリー上でスペースキーを押した場合にQuickLook側で(例の)エラーが出ていたので
いろいろ試行錯誤した上で%d%bにおちついた覚えがあります。
(それでもフォーカス状況によってはエラーが発生していましたが...)

完全にエラーフリーにするには、スペースキーに割り当てる機能を単なるコマンドではなくスクリプトにする必要がありそうです。
(たとえば、状況に応じて「パスを加工 or QuickLookを呼び出さない」ようにするとか)
[ ]
RE:08414 ファイルプレビュー用アプリ「QuickLook」との連携にNo.08415
mak_kawa さん 20/02/15 06:34 [ コメントを投稿する ]
  mac さん

>たしか、フォルダツリー上でスペースキーを押した場合にQuickLook側で(例の)エラーが出ていたので
>いろいろ試行錯誤した上で%d%bにおちついた覚えがあります。

了解しました.ご教示感謝します.
[ ]
RE:08413 ファイルプレビュー用アプリ「QuickLook」との連携にNo.08416
mak_kawa さん 20/02/15 06:40 [ コメントを投稿する ]
  mac さん

><<修正版スクリプト>>

さっそく入れ替えてみたところ,PSD ファイルでの例のエラーは出なくなりました.他のいくつかの状況でもテストしてみましたが,まったく問題なく動作しています.

素晴らしいスクリプトの提供に感謝します.もちろん,オリジナル提供の秀丸担当さんにも感謝.
秀丸ファイラーの世界が(私の中で)また一つ広がりました.
[ ]
RE:08416 ファイルプレビュー用アプリ「QuickLook」との連携にNo.08420
秀丸担当 さん 20/02/17 08:55 [ コメントを投稿する ]
 
遅くなる原因の1つとして、いちいちウィンドウを探したりしていることがあると思います。
一度取得した情報を再利用することもできるように、秀丸エディタのマクロにあるようなSetStaticVariableとかGetStaticVariableのようなメソッドがあったらいいかもしれないので、追加しようと思います。
今回の件に限らず、何かしら使い道はあると思います。
[ ]
RE:08420 ファイルプレビュー用アプリ「QuickLook」との連携にNo.08486
mac さん 20/03/05 09:18 [ コメントを投稿する ]
  V1.52β9でのメソッド追加ありがとうございました。
だいぶ時間が空いてしまいましたが、その後の報告です。


気になる点 2) で挙げたチャタリング問題について、V1.52β9で追加いただいたメソッドを利用することで解決できました。
尚、先にお伝えした追加条件 if(hwnd != 0) は実際には全く意味のないものでした...


また、気になる点 3) で挙げたExplorerと比較した場合の反応の遅れ問題についても
同じくV1.52β9で追加いただいたメソッドを利用することで(僅かではありますが)緩和させることができました。
だたし、現状では「スクリプト自体の処理時間」よりも「スクリプトが起動されるまでの時間」の方が支配的であるように感じました。
確認したところ、秀丸ファイラー組み込みのプレビュー表示機能にも同様の遅れが生じているようです。

<更新用スクリプトの先頭にBeep();を置いてタイミングを測定した結果>
・フォーカス遷移操作 → beep音: 600ms前後
・beep音 → プレビュー表示更新: 20ms前後

更新用スクリプトの起動ディレイ短縮によって顕在化する問題がなく、且つ技術的に可能であるなら
もう少しディレイを短くできると嬉しいです。


ちなみに、下記の修正版スクリプトではQuickLook.exeのパスを変数登録する機能を単独で切り出す構成にしています。
現在は手動で実行していますが、自動起動スクリプトとして「ファイル選択一覧の選択変更後」に加えて
「秀丸ファイラ起動時」を登録可能にしていただけると、他でも使いどころがある(?)かもしれません。

もっとも、本件に関して言えば実行時間の短縮効果は芳しくなかったので、素直に毎回exeパスを構築しても問題はありませんが...



<<修正版スクリプト(3つのスクリプトファイルに機能分割)>>
// QuickLook_Define.js
// ----------------------------
// 機能: QuickLook.exe のパスを静的変数 '_exe' に格納する
// 使い方: 秀丸ファイラー起動後、QuickLookのプレビュー表示操作の前に一度実行しておく
// ----------------------------
var objShell = new ActiveXObject("WScript.Shell");
var exe = objShell.ExpandEnvironmentStrings("%LOCALAPPDATA%")
        + "\\Programs\\QuickLook\\QuickLook.exe";
SetStaticVariable("_exe",exe);
//Message('QuickLook.exeのpathを登録しました\n'+GetStaticVariable('_exe'));


// QuickLook_Launch.js
// ----------------------------
// 機能: QuickLookのプレビュー表示を開始/終了する
// 使い方: ブックマークにスクリプトとして登録しておく(スペースキーへの割り当てを推奨)
// ----------------------------
//beep();
var iItem = GetNextItem(-1,2);
if(iItem>=0){
    //Message('フォーカスアイテムあり');
    var objShell = new ActiveXObject("WScript.Shell");
    objShell.Run( GetStaticVariable('_exe') + ' "' + GetItemPath(iItem)+'"');
    objShell = null;
    SetStaticVariable("_iItem",iItem);

    sleep(150);          // プレビュー表示の開始ディレイを考慮した調整(150ms前後を推奨)
    var hwnd = FindWindow("QuickLook.exe;;","",1);
    SetStaticVariable("_hwnd",hwnd);
}


// QuickLook_Update.js
// ----------------------------
// 機能: QuickLookのプレビュー表示を更新する
// 使い方: 自動起動スクリプトとして [ファイル一覧の選択変更後] に登録しておく
// ----------------------------
//beep();
var hwnd = GetStaticVariable('_hwnd');
var iItem = GetNextItem(-1,2);
if(hwnd != 0 && IsWindowVisible(hwnd) && iItem>=0){
    //Message('QuickLookプレビュー表示中 + フォーカスアイテムあり');
    if(iItem != GetStaticVariable('_iItem')){
        //Message("フォーカスアイテム更新\n----------------------------\n現: "+GetItemPath(GetStaticVariable("_iItem"))+"\n新: "+GetItemPath(iItem));
        var objShell = new ActiveXObject("WScript.Shell");
        objShell.Run( GetStaticVariable('_exe') + ' "' + GetItemPath(iItem)+'"');
        objShell = null;
        SetStaticVariable("_iItem",iItem);
    }
}
[ ]
RE:08486 ファイルプレビュー用アプリ「QuickLook」との連携にNo.08490
秀丸担当 さん 20/03/06 09:49 [ コメントを投稿する ]
 
いろいろスクリプトを調整していただいてありがとうございます。
スクリプトの起動は、リピートで連続実行させないように意図的に時間差がありました。
これは秀丸ファイラーClassic自身のプレビュー枠でも同様です。
秀丸エディタの場合は時間の設定や、スクリプトのON/OFFのチェックボックスがありますが、同じように時間やON/OFFもできるようにしようと思います。
[ ]
RE:08490 ファイルプレビュー用アプリ「QuickLook」との連携にNo.08499
mac さん 20/03/06 22:14 [ コメントを投稿する ]
  お返事、及びご検討ありがとうございます。

次のベータ版リリースを楽しみにしています。
[ ]
RE:08490 ファイルプレビュー用アプリ「QuickLook」との連携にNo.08512
mac さん 20/03/13 21:56 [ コメントを投稿する ]
  V1.52β9での遅延時間の実装ありがとうございました。

さっそく遅延時間を50(ミリ秒)に設定して使ってみたところ
ExploerからQuickLookを利用した場合と同等の挙動(遜色ない遅延)が再現できました。
さらに使い勝手がよくなって、とても嬉しいです。

特異な要望へのご対応、まことにありがとうございました。
[ ]

[ 新規に投稿する ]