The Script:
|
-- specify the search item(s):
-- (which can be an alias to a single file or folder as well as a *list* of aliases to any
-- combination of files, folders, file groups, or even applescripts that return a list of aliases!)
set SearchItems to choose folder with prompt "Choose a search folder:" -- ask the user to specify a search folder, or, alternatively,
-- use something like alias "Disk:folder:file" or {alias "Disk:folder:", alias "Disk:folder:file1", alias "Disk:folder:file2"} instead
-- specify the search pattern:
set SearchPattern to "</?body[^>]*>" -- this example grep pattern will find body tags (within html files)
tell application "BBEdit 6.1"
-- specify various search options (adopt to your needs):
set SearchWithGrep to grep -- replace 'grep' with 'literal' in order to search without grep
-- set the following variables to either 'true' or 'false':
set SearchCaseSensitive to true
set MatchEntireWords to true
set DisplayResultsWindow to true
set ReturnResults to true
-- now, build the proper record of search options:
set SearchOptions to {search mode:SearchWithGrep, case sensitive:SearchCaseSensitive, match words:MatchEntireWords, showing results:DisplayResultsWindow, returning results:ReturnResults}
-- finally, call the search routine:
set TheHitList to my DoMultiFileSearch(SearchItems, SearchPattern, SearchOptions)
-- gives examples how one could proceed with the results returned by the search routine:
if not found of TheHitList then -- nothing found
activate -- bring BBEdit to the front
-- inform the user that nothing matched the search query:
display dialog "Couldn't find any matches for \"" & SearchPattern & "\"" with icon note buttons {"OK"} default button 1
else -- something was found
if DisplayResultsWindow then -- BBEdit will pop up a search results window
activate -- bring BBEdit to the front
-- this shows how to get a reference to the particular browser window that holds your search results:
set SearchResultsWindowRef to match list window of TheHitList
-- ... now you could do whatever you want with this window :-)
-- as an example, lets zoom the results window to full screen:
tell application "Finder" to copy bounds of window of desktop to screenSize -- get the screen dimensions
tell SearchResultsWindowRef -- set properties of search results window:
set bounds to {0, 41, item 3 of screenSize, item 4 of screenSize} -- zoom window to full screen
end tell
end if
if ReturnResults then -- BBEdit will return a list of records:
--this shows how you could extract all elements of a particular record item into a list:
set MatchedItemList to {message, message_script, result_file, result_kind, result_line, start_offset, end_offset} of item 1 of found matches of TheHitList
-- or, if SearchItems contains an alias to a *single* file, the following
-- will open this file and select the first match found:
(*
set {SelStart, SelEnd} to {start_offset, end_offset} of item 1 of found matches of TheHitList
activate -- bring BBEdit to the front
open SearchItems -- open the file
select (characters SelStart thru SelEnd) of text window 1 -- select a particular match
*)
end if
end if
end tell
-- perform a multi-file search with BBEdit 6.x:
-- (for simple applications its actually not necessary to put this into
-- an extra routine but we do it here in order to generalize it a bit :-)
on DoMultiFileSearch(SearchItems, SearchPattern, SearchOptions)
tell application "BBEdit 6.1"
-- this line does the actual work:
set TheHitList to find SearchPattern searching in SearchItems options SearchOptions
return TheHitList -- this line won't be necessary in this case but I do for clarity reasons
end tell
end DoMultiFileSearch
|