// SQUEEZE // // // 2006-08-31 (Thr) 高橋半魚 hangyo@kanazawa-bidai.ac.jp // // 機能: 現在アクティブなファイル(*1)に対して文字列を検索し、タグジャ // ンプの一覧を作ります。その一覧を編集してください。もう一度マク // ロを起動すると、ジャンプ先の本体ファイルへ編集内容が還元されま // す。 // 検索文字列の設定は、すでに設定してあればそれを検索したタグジャンプの一覧を // 作りますし、設定してなければ設定ダイアログが開きますので自分で設定します。 // 編集の際、タグの部分(ファイル名と行数、コロン)はいじらないでください。 // ただし、行数とコロンとの間にタブなどを入れるのは大丈夫です。 // また、タグジャンプの一覧の内、編集・還元する必要のない行は、 // 一行そのまま(論理行単位で)削除してください。本体ファイルへは何も反映しません。 // 還元せずにやめる時は、タグジャンプ一覧ウィンドウを終了すればOKです。 // 本マクロ用のイニシャライズファイル(変数の$ini)を作ります。(多少 // 無駄かもしれませんけど) // (*1) デフォルトでは、「現在アクティブなファイル」のみを対象としていますが、 // 複数のファイルを対象に編集・還元を行うこともできます。この場合、ふつうに // grep をかけてタグジャンプの一覧を作り(一覧1)、検索文字列の設定を保持した // ままそのファイル(一覧1)に対してこのマクロを実行し、その結果のファイル(一覧2)を // 編集してください。一覧2の編集が終わったらこのマクロを再度実行すれば、 // 編集結果が還元されます。一覧1は、なにもせずに終了してください。 // // かつてVzマクロで、squeeze というものがありました。ドキュメント等をなくしてしまったの // で、作者名とかは分からなくなっています。ともかく、たいへん便利に使わせてもらっていま // したので、似たようなものをhidemaruで作りました。オリジナルのVz版では、削除指定なども // ありました。優れたアイディアに感謝します。 $ini = currentmacrodirectory + "\\squeeze.ini"; // 検索結果ファイルが既にあれば、[還元]へ // #c_work = getininum ( $ini, "SQUEEZE", "workWindowhandle"); setactivehidemaru #c_work ; if( result ) goto REWRITTING; // 現在行・桁の保存 // #x = column; #y_mainlineno = lineno; writeininum $ini,"SQUEEZE","mainWindowhandle",hidemaruhandle(0); writeininum $ini,"SQUEEZE","original_cursor_y",#y_mainlineno; writeininum $ini,"SQUEEZE","original_cursor_x",#x; // 検索文字列の設定、検索結果の表示 // if( ! foundhilighting){ find; if( !result ) endmacroall; } localgrep searchbuffer ,regular; // execmacro "grep.mac"; writeininum $ini,"SQUEEZE","workWindowhandle",hidemaruhandle(0); endmacroall; // 還元 // REWRITTING: #c_main = getininum ( $ini, "SQUEEZE", "mainwindowhandle"); // setactivehidemaru #c_main ; // showwindow 0; setactivehidemaru #c_work ; hilightfound 1; question "Squeeze: 還元しますか?"; if( !result ) endmacroall; showwindow 0; gofiletop; while( ! code == eof ){ gofiletop; while( ! code == ':' ) right; right 2; #x_begin = x; #y_begin = y; golineend2; #x_end = x; #y_end = y; $str = gettext( #x_begin, #y_begin, #x_end, #y_end); tagjump; deleteafter; insert $str; backtagjump; golinetop2; deleteafter; delete; // deleteline ではダメ } // カーソル位置を戻す // setactivehidemaru #c_main ; #jump_x = getininum ( $ini, "SQUEEZE", "original_cursor_x"); #jump_y = getininum ( $ini, "SQUEEZE", "original_cursor_y"); movetolineno #jump_x, #jump_y; // setactivehidemaru #c_main ; showwindow 1; setactivehidemaru #c_work ; exit;