/******************************************************************************/ /* マクロ名 : このファイルから検索.jsee */ /* 機能概要 : カーソル位置の文字列、または選択された文字列を現在のファイル */ /* から検索する。 */ /* ファイルから検索ダイアログで指定されている以下のオプションを */ /* 引き継ぐ。 */ /* ・大文字と小文字を区別する */ /* ・単語のみ検索する */ /******************************************************************************/ var C_TITLE = "EmEditor - このファイルから検索"; var C_OK_ONLY = 0; var C_OK_CANCEL = 1; var C_ABORT_RETRY_IGNORE = 2; var C_YES_NO_CANCEL = 3; var C_YES_NO = 4; var C_RETRY_CANCEL = 5; var C_CRITICAL = 16; var C_QUESTION = 32; var C_EXCLAMATION = 48; var C_INFORMATION = 64; var C_DEFAULT_BUTTON_1 = 0; var C_DEFAULT_BUTTON_2 = 256; var C_DEFAULT_BUTTON_3 = 512; var C_DEFAULT_BUTTON_4 = 768; var C_OK = 1; var C_CANCEL = 2; var C_ABORT = 3; var C_RETRY = 4; var C_IGNORE = 5; var C_YES = 6; var C_NO = 7; var C_FIND_STRING_MAX_LEN = 1024; var objWshShell = new ActiveXObject( "WScript.Shell" ); var strEmEditor = Editor.FullName; var intPosX = Window.Document.Selection.GetActivePointX( eePosLogical ); var intPosY = Window.Document.Selection.GetActivePointY( eePosLogical ); var strFileName; var strSelText, strFindText, strStatusText; var strFindChar, strHexCode; var intYenCount; var strRegData; var intFindFlag; var strCommand; var i; Window.Status = ""; strSelText = Window.Document.Selection.Text; if( strSelText.length == 0 ) { Window.Document.Selection.SelectWord(); strSelText = Window.Document.Selection.Text; Window.Document.Selection.SetActivePoint( eePosLogical, intPosX, intPosY, false ); if( strSelText.length == 0 ) { Window.Status = "検索する文字列を指定してください。"; Window.Quit(); } } strFileName = Window.Document.FullName; if( Window.Document.Saved == false ) { if( strFileName.length != 0 ) { intRet = objWshShell.Popup( strFileName + " への変更を保存しますか?", 0, C_TITLE, C_YES_NO_CANCEL + C_EXCLAMATION + C_DEFAULT_BUTTON_2 ); } else { intRet = objWshShell.Popup( "無題 への変更を保存しますか?", 0, C_TITLE, C_YES_NO_CANCEL + C_EXCLAMATION + C_DEFAULT_BUTTON_2 ); } switch( intRet ) { case C_YES : try { Window.Document.Save( strFileName ); } catch( e ) { Window.Status = "キャンセルしました。"; Window.Quit(); } if( strFileName.length == 0 ) { strFileName = Window.Document.FullName; } break; case C_NO : break; default : Window.Status = "キャンセルしました。"; Window.Quit(); break; } } if( strFileName.length == 0 ) { Window.Status = "無題 のファイルは検索できません。"; Window.Quit(); } strSelText = strSelText.replace(/\r\n/g, "\n"); strSelText = strSelText.replace(/\r/g, "\n"); strFindText = ""; strStatusText = ""; intYenCount = 0; for( i = 0; i < strSelText.length; i ++ ) { if( strSelText.charAt(i) == "\\" ) { strFindText += "\\\\"; strStatusText += "\\\\"; intYenCount ++; } else if( strSelText.charAt(i) == "\"" ) { while( intYenCount > 0 ) { strFindText += "\\\\"; intYenCount --; } strFindText += "\\\""; strStatusText += "\""; intYenCount = 0; } else { switch( strSelText.charCodeAt(i) ) { case 0x0007 : strFindChar = "\\a"; break; case 0x0008 : strFindChar = "\\b"; break; case 0x0009 : strFindChar = "\\t"; break; case 0x000A : strFindChar = "\\n"; break; case 0x000B : strFindChar = "\\v"; break; case 0x000C : strFindChar = "\\f"; break; case 0x000D : strFindChar = "\\r"; break; default : if( (strSelText.charCodeAt(i) >= 0x0000 && strSelText.charCodeAt(i) <= 0x001F) || strSelText.charCodeAt(i) == 0x007F ) { strHexCode = strSelText.charCodeAt(i).toString(16); strHexCode = ("0000".substr(0, 4 - strHexCode.length)) + strHexCode; strFindChar = "\\x" + strHexCode; } else { strFindChar = strSelText.charAt(i); } break; } strFindText += strFindChar; strStatusText += strFindChar; intYenCount = 0; } } while( intYenCount > 0 ) { strFindText += "\\\\"; intYenCount --; } if( strFindText.length > C_FIND_STRING_MAX_LEN ) { Window.Status = "検索する文字列の長さが制限を超えています。"; Window.Quit(); } try { strRegData = objWshShell.RegRead( "HKEY_CURRENT_USER\\Software\\EmSoft\\EmEditor v3\\Common\\FindFlag" ); if( isNaN( strRegData ) == false ) { intFindFlag = Number( strRegData ); } else { intFindFlag = 0x0000; } } catch( e ) { intFindFlag = 0x0000; } strCommand = "\"" + strEmEditor + "\""; if( (intFindFlag & 0x0002) != 0x0000 ) { strCommand = strCommand + " /fc \"" + strFindText + "\""; } else { strCommand = strCommand + " /fi \"" + strFindText + "\""; } if( (intFindFlag & 0x0040) != 0x0000 ) { strCommand = strCommand + " /fw"; } strCommand = strCommand + " \"" + strFileName + "\""; try { objWshShell.Run( strCommand, 1, true ); } catch( e ) { objWshShell.Popup( "検索に失敗しました。 (" + (e.number & 0xFFFF).toString() + ")", 0, C_TITLE, C_OK_ONLY + C_CRITICAL + C_DEFAULT_BUTTON_1 ); Window.Quit(); } Editor.ExecuteCommandByID( 4325 ); Window.Status = "\"" + strStatusText + "\" を検索しました。";