◀一般トップへ
  • 6171 タグファイルを開く方法は?
    • 6173 RE: タグファイルを開く方法は?
      • 6174 Re2: タグファイルを開く方法は?
    • 6175 Re:タグファイルを開く方法は?
      • 6176 Re2:タグファイルを開く方法は?
        • 6177 Re3:タグファイルを開く方法は?
          • 6178 Re4:タグファイルを開く方法は?
          • 6181 Re4:タグファイルを開く方法は?
  • [6171] タグファイルを開く方法は? see 2007年07月27日 06:50

    Grepした時に開く検索結果ウィンドウ(虫眼鏡のアイコン)ではダブルクリックでタグジャンプ出来ますが、このモードでファイルを開く方法を教えてください。
    自分で作ったタグファイルや保存しておいた検索結果を再表示するのに使いたいのですが方法が分かりません。
    マクロから「TraceOut」の結果が表示されるアウトプットウインドウも同じようにダブルクリックでタグジャンプ出来るようですが、何か設定があるのでしょうか?
    コマンドラインの「-GREPMODE 」は検索起動専用のようです。
    • [6173] RE: タグファイルを開く方法は? すい 2007年07月28日 02:47

      >Grepした時に開く検索結果ウィンドウ(虫眼鏡のアイコン)ではダブルクリックでタグジャンプ出来ますが、このモードでファイルを開く方法を教えてください。
      >自分で作ったタグファイルや保存しておいた検索結果を再表示するのに使いたいのですが方法が分かりません。

      無理。
      その機能はGrep結果ウィンドウのためだけの専用機能ですから。
      設定 - 共通設定 - [検索]タブにて、逆にその機能を off にする事ならできますけど。
      私はその機能が邪魔なので、エンターキーもダブルクリックもoffにしています。

      どうしても、というならば
      共通設定 - [キー割り当て] タブにて、
      「ダブルクリックにタグジャンプの機能を割り当てる」
      という方法ならあります。(常にダブルクリックでタグジャンプしてしまう)

      「特定のファイル(特定の拡張子のファイルとか)でだけ、
       タグジャンプさせたい」
      ならば、マクロを使えば可能でしょう。

      次のようなマクロを用意する。

      「現在編集中のファイル名を取得する。S_GetFilename()
       ファイル名が特定の条件を満たしているならタグジャンプする。
       条件を満たしていないなら「現在位置の単語選択」するとか。」

      で、ダブルクリックに↑このマクロを登録する。
      • [6174] Re2: タグファイルを開く方法は? see 2007年07月28日 08:35

        ▼ すいさん
        > >Grepした時に開く検索結果ウィンドウ(虫眼鏡のアイコン)ではダブルクリックでタグジャンプ出来ますが、このモードでファイルを開く方法を教えてください。
        ---略---
        > 無理。
        > その機能はGrep結果ウィンドウのためだけの専用機能ですから。
        ---略---

        回答ありがとうございます。無理ですか・・・。
        Grep結果は検索即使用が原則という事でしょうか・・・

        ダブルクリックをマクロに割り付けタグジャンプさせた場合はマクロ板の「[380] ダブルクリックにマクロを割り付けた時の挙動について」にあるような「変な反転表示状態」になります。
        ジャンプ先のファイルがタグファイルに重ならないで開く場合には大丈夫な様ですが、新たに開く場合や最小化状態から復帰する場合にダブルクリックしたマウス位置が隠れる様にして開いた場合にはかなりの確率でおかしくなります。

        かといってダブルクリックでタグジャンプできるアウトプットウインドウにタグファイルの内容を書き出すマクロを作るのも少し違和感がありますし、1つしか開けないのも問題です。
        マクロでGrep結果ウインドウを作成・出力する機能でもあればまだ何とかなるのですが・・・
    • [6175] Re:タグファイルを開く方法は? じゅうじ 2007年07月28日 13:32

      ▼ seeさん
      > Grepした時に開く検索結果ウィンドウ(虫眼鏡のアイコン)ではダブルクリックでタグジャンプ出来ますが、このモードでファイルを開く方法を教えてください。
      > 自分で作ったタグファイルや保存しておいた検索結果を再表示するのに使いたいのですが方法が分かりません。

      1.適当なGrepして、選択画面に目的のファイルを全選択して貼り付けるとか出来ます。
      2.ダブルクリックにこだわらなければ、F12キーなら、普通の画面でもタグジャンプ出来ます。
      • [6176] Re2:タグファイルを開く方法は? see 2007年07月30日 10:38

        ▼ じゅうじさん
        > ▼ seeさん
        > > Grepした時に開く検索結果ウィンドウ(虫眼鏡のアイコン)ではダブルクリックでタグジャンプ出来ますが、このモードでファイルを開く方法を教えてください。
        > > 自分で作ったタグファイルや保存しておいた検索結果を再表示するのに使いたいのですが方法が分かりません。
        >
        > 1.適当なGrepして、選択画面に目的のファイルを全選択して貼り付けるとか出来ます。
        > 2.ダブルクリックにこだわらなければ、F12キーなら、普通の画面でもタグジャンプ出来ます。
        ありがとうございます。おかげさまで「1の方法」でgrepウインドウにタグ情報を(PerlScriptマクロで)貼り付ける事が出来るようになりました。
        具体的には以下の手順で実現しました。
        (1)現在のクリップボードの内容を保存
        (2)クリップボードに作成したタグ情報をコピー
        (3)適当にgrep
        (4)grepウインドウをアクティブに
        (5)sleepで少し待つ
        (6)sendkeyで「全て選択」「貼り付け」(^a^v)
        (7)貼り付けが完了するまで適当な時間待つ
        (8)クリップボードに保存した内容を戻す(書き込む)
        (注)クリップボードは「Win32::Clipboard」オブジェクトを使用

        このような力技はあまり好きではありませんが、何故かダブルクリックへのこだわりが抜けないものですからやむを得ません。
        ただ(5)の待ち時間が微妙で短くすると編集中のウインドウに貼りついてしまい冷や汗ものですし、長くすると待ちきれずに他のウインドウをクリックしてしまった場合にロスしたり上書きしたりします。また(7)も微妙です。
        (確実な方法は何か無いのでしょうか?どなたか教えてください)

        ところで、マクロのヘルプの「PerlScriptについて」にある「KeySend.pls」サンプルの「$WshShell->Sleep( 3000 );」の命令は3秒待つどころか1瞬で通過してしまい貼り付けミスが多発しましたのでperl自身のsleep命令(又はselect命令)に置き換えました。
        正確には「$WScript->Sleep( 3000 );」だと思うのですが、$WScriptが使えないのでエラーになります。しかし、「$WshShell->Sleep( 3000 );」がエラーにもならず黙って無視してくれるのには困りました。(何か設定でもあるのかナ?)
        • [6177] Re3:タグファイルを開く方法は? すい 2007年07月30日 22:41

          >ただ(5)の待ち時間が微妙で短くすると編集中のウインドウに貼りついてしまい冷や汗ものですし、長くすると待ちきれずに他のウインドウをクリックしてしまった場合にロスしたり上書きしたりします。また(7)も微妙です。
          >(確実な方法は何か無いのでしょうか?どなたか教えてください)

          (4) で、どうやってアクティブにしているのでしょう?

          もし、Grepウィンドウのウィンドウハンドルを調べてやっているなら、
          (6) で sendkey なんぞでキー操作を送るような事はせず、そのウィンドウハンドルあてに
          SendMessage で直接コマンドを送っちゃった方が確実かと。

          sleep も不要になるかもしれませんし、キー割り当てが変更されても影響されません。
          # 「(3)適当にGrep」が完了するまでは待たなくては駄目かも。

          そもそも Grepウィンドウをアクティブにする必要も無くなるのではないかと。

          ↓こんなの
          SendMessage( Grepのウィンドウハンドル , 0x0111 , 30401 , 0 ) //すべて選択
          SendMessage( Grepのウィンドウハンドル , 0x0111 , 30604 , 0 ) //貼り付け(クリップボードから貼り付け)

          ・30401 が F_SELECTALL 「すべて選択」
          ・30604 が F_PASTE 「貼り付け」
          です。

          これらのコマンドはサクラエディタのソース中の
          ssrc_2007-07-08\sakura_core\Funccode.h を参照すれば分かります。

          # もっとも perl から SendMessage するのは面倒か?
          • [6178] Re4:タグファイルを開く方法は? すい 2007年07月30日 23:16

            言い忘れた件、追加。

            0x0111 は WM_COMMAND で、メニューなどのコマンドを送る場合の合図。

            あと、SendMessage は、コマンドを送られたウィンドウが処理完了するまで待つので、

            >(7)貼り付けが完了するまで適当な時間待つ
               チョキチョキチョキ
                "(V)..(V)"
                 ミ( 略 )ミ
            >また(7)も微妙です。

            も解決するんじゃないかなぁ、と。

            エディタを外部から操作するなら SendMessage がお勧めよ。
          • [6181] Re4:タグファイルを開く方法は? see 2007年08月01日 08:04

            すいさん(さん)アドバイスありがとうございます。
            SendMessageはかなりハードルが高いのでこれからじっくり腰を落ち着けて勉強します。

            > (4) で、どうやってアクティブにしているのでしょう?
            →grepウインドウは検索条件がタイトルに表示されるのでダミーのgrepで指定した検索条件をWScript.ShellのAppActivateのタイトルに指定しています。ウィンドウハンドルを扱うほど技術力がありませんので・・・

            > # 「(3)適当にGrep」が完了するまでは待たなくては駄目かも。
            ひょっとしてgrepは完了まで待たない?という事で少しテストしたところやはり色々間違っていました。
            ・AppActivateの失敗を考慮していなかった。失敗の場合にリトライさせることで(5)の「sleepで少し待つ」処理は不要。
            ・その代わりに「適当にGrepが完了する」までは待たなければならない。(完了しなくても制御は次の命令に移る)
            これを踏まえ手順を以下のように修正しました。
            (1)現在のクリップボードの内容を保存
            (2)作成した(或いは読み込んだ)タグ情報をクリップボードにコピー
            (3)適当にgrep
            (4)grep(結果)ウインドウがアクティブになるまで待つ(起動確認)
            (5)「grep実行中」ウインドウが消える(アクティブがエラーになる)まで待つ
            (6)grep(結果)ウインドウをアクティブに
            (7)ほんの少し待たせる(0.1秒程度待たせなければやはり不安定)
            (8)sendkeyで「全て選択」「貼り付け」「先頭へ」(^a^v^{HOME})
            (9)貼り付けが完了するまで適当な時間待つ(0.1秒程度でほぼOK)
            (10)(1)で保存した内容をクリップボードに戻す(書き込む)
            これで安全を見て余分にsleepする必要もなくなってかなり早くなるとともに動作も安定しました。
            同一のタイトルのウインドウがあってはならないなど制約がまだまだありますが何とか実用レベルになりました。
            根本的な解決(更なる安定化、制約の解除)はターゲットを特定した「SendMessage」を使う、という事で今後の課題にします。

            【開発しておられる方へ】
             やはりタグファイルの読み込みは正式サポートがあった方がいいんじゃないかと思いますので、いつか実現していただければありがたく思います。