diff --git a/Support/environment.rb b/Support/environment.rb
index a47a953..05e3808 100644
--- a/Support/environment.rb
+++ b/Support/environment.rb
@@ -130,6 +130,31 @@ def update_pbfind(search)
IO.popen('pbcopy -pboard find', 'w') {|pbcopy| pbcopy.write @pbfind}
end
+ # read file type filter
+ def search_filetype_filter
+
+ unless @search_filetype_filter
+ filetype_filter_command = "defaults read com.macromates.textmate fileTypeString 2>/dev/null"
+ @search_filetype_filter = OSX::PropertyList::load(Base64.decode64(%x{#{filetype_filter_command}}))
+ end
+
+ @search_filetype_filter
+
+ rescue
+ @search_filetype_filter = [] # oh the humanity!
+ end
+
+ # update file type filter
+ def update_search_filetype_filter(filetype_filter)
+ search_filetype_filter = filetype_filter
+
+ filter_history = Base64.encode64(search_filetype_filter.to_plist)
+
+ history_command = %Q|defaults write com.macromates.textmate fileTypeString -string #{e_sh filter_history} 2>/dev/null|
+ %x{#{history_command}}
+ rescue
+ end
+
end
end
diff --git a/Support/lib/search.rb b/Support/lib/search.rb
index 1365f0e..5b048d1 100644
--- a/Support/lib/search.rb
+++ b/Support/lib/search.rb
@@ -4,7 +4,7 @@ class AckInProject::Search
include AckInProject::Environment
AckInProject::Environment.ghetto_include %w(escape), binding
- attr_accessor :plist, :current_file, :lines_matched, :files_matched
+ attr_accessor :plist, :current_file, :lines_matched, :files_matched, :filter
def initialize(plist)
self.plist = plist;
@@ -79,6 +79,7 @@ def scrub(content)
def prepare_search
# TODO: bail if the search term is empty
result = plist['result']
+ fileTypes = result['fileTypeString'].split(',') if result['fileTypeString']
options = %w(--group --color --flush)
options << '-w' if result['matchWholeWords'] == 1
@@ -87,13 +88,37 @@ def prepare_search
options << '-C' if result['showContext'] == 1
options << "--#{result['followSymLinks'] == 1 ? '' : 'no'}follow"
options << "--#{result['loadAckRC'] == 1 ? '' : 'no'}env"
+
+ # add file type filters
+ self.filter = ""
+ if result['fileTypeString']
+ fileTypes.each do |f|
+ f = f.gsub(/\s+/, "")
+ f = parse_filters(f)
+ # options << "#{f}" if f != self.filter
+ end
+ end
+
+ options << "-G '#{self.filter[0..self.filter.length-2]}'" if self.filter != ""
AckInProject.update_search_history result['returnArgument']
AckInProject.update_pbfind result['returnArgument']
+ AckInProject.update_search_filetype_filter result['fileTypeString'] || ''
%{cd #{e_sh search_directory}; #{e_sh ack} #{options.join(' ')} -- #{e_sh result['returnArgument']}}
end
+ # check to see it's a big filter or small filter
+ # update: only support small filter
+ # TODO: add more types support
+ def parse_filters(filter)
+ # if ['ruby', 'shell', 'rake', 'php', 'html', 'xml', 'yaml'].include?(filter)
+ # " --#{filter} "
+ # else
+ self.filter << "\\.#{filter}$|"
+ # end
+ end
+
def search
# tell ack about potential .ackrc files in the project directory
ENV['ACKRC'] = File.join(project_directory, '.ackrc')
diff --git a/Support/lib/search_dialog.rb b/Support/lib/search_dialog.rb
index aef8234..3e78815 100644
--- a/Support/lib/search_dialog.rb
+++ b/Support/lib/search_dialog.rb
@@ -9,6 +9,7 @@ def show(&block)
command = %Q{#{TM_DIALOG} -cm -p #{e_sh params.to_plist} -d #{e_sh defaults.to_plist} #{e_sh nib_file('AckInProjectSearch.nib')}}
plist = OSX::PropertyList::load(%x{#{command}})
+
if plist['result']
block.call(plist)
end
@@ -26,8 +27,10 @@ def defaults
def params
history = AckInProject.search_history
+ filetype_filter = AckInProject.search_filetype_filter
{
- #'contentHeight' => 168,
+ #'contentHeight' => 150,
+ 'fileTypeString' => filetype_filter,
'ackExpression' => AckInProject.pbfind,
'ackHistory' => history
}
diff --git a/Support/nibs/AckInProjectSearch.nib/classes.nib b/Support/nibs/AckInProjectSearch.nib/classes.nib
deleted file mode 100644
index a731b33..0000000
--- a/Support/nibs/AckInProjectSearch.nib/classes.nib
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- IBClasses = (
- {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
- {ACTIONS = {performButtonClick = id; }; CLASS = NSObject; LANGUAGE = ObjC; }
- );
- IBVersion = 1;
-}
\ No newline at end of file
diff --git a/Support/nibs/AckInProjectSearch.nib/designable.nib b/Support/nibs/AckInProjectSearch.nib/designable.nib
new file mode 100644
index 0000000..0b46d78
--- /dev/null
+++ b/Support/nibs/AckInProjectSearch.nib/designable.nib
@@ -0,0 +1,1575 @@
+
+
+
+ 1060
+ 10K549
+ 1306
+ 1038.36
+ 461.00
+
+
+ NSUserDefaultsController
+ NSObjectController
+ NSComboBoxCell
+ NSButton
+ NSButtonCell
+ NSTextFieldCell
+ NSBox
+ NSComboBox
+ NSMatrix
+ NSCustomObject
+ NSCustomView
+ NSView
+ NSWindowTemplate
+ NSTextField
+ NSDrawer
+
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+
+
+
+
+
+
+
+
+ searchString
+ performButtonClick
+ fileTypeString
+ ignoreCaseBoolean
+ useExtendedRegularExpressionBoolean
+ ackExpression
+ ackLiteral
+ ackIgnoreCase
+ ackWholeWords
+ ackLiteralMatch
+ ackMatchWholeWords
+ ackShowContext
+ ackFollowSymlinks
+ controller
+ showAdvanced
+ searchProject
+ contentHeight
+ ackHistory
+
+ YES
+
+
+
+ YES
+
+
+
+ {200, 124}
+ {50, 50}
+ {600, 400}
+ 0
+ 0.0
+ 15
+
+
+
+
+
+ 256
+
+
+
+ 288
+ {{17, 58}, {94, 18}}
+
+ YES
+
+ 67239424
+ 131072
+ Show context
+
+
+ 1211912703
+ 2
+
+
+
+ 200
+ 25
+
+
+
+
+ 288
+ {{17, 38}, {107, 18}}
+
+ YES
+
+ 67239424
+ 131072
+ Follow symlinks
+
+
+ 1211912703
+ 2
+
+
+
+ 200
+ 25
+
+
+
+
+ 256
+ {{17, 18}, {159, 18}}
+
+ YES
+
+ 67239424
+ 131072
+ Load defaults from .ackrc
+
+
+ 1211912703
+ 2
+
+
+
+ 200
+ 25
+
+
+
+ {194, 94}
+
+
+ NSView
+
+ NSResponder
+
+
+
+
+
+
+ contentObject: parameters
+
+
+
+
+
+ contentObject: parameters
+ contentObject
+ parameters
+ 2
+
+
+ 8
+
+
+
+ performButtonClick:
+
+
+
+ 90
+
+
+
+ enabled: selection.ackExpression
+
+
+
+
+
+ enabled: selection.ackExpression
+ enabled
+ selection.ackExpression
+
+ NSValueTransformerName
+ NSIsNotNil
+
+ 2
+
+
+ 100
+
+
+
+ value: selection.showAdvanced
+
+
+
+
+
+ value: selection.showAdvanced
+ value
+ selection.showAdvanced
+ 2
+
+
+ 169
+
+
+
+ parentWindow
+
+
+
+ 171
+
+
+
+ visible: selection.showAdvanced
+
+
+
+
+
+ visible: selection.showAdvanced
+ visible
+ selection.showAdvanced
+
+ NSNullPlaceholder
+
+
+ 2
+
+
+ 173
+
+
+
+ performClick:
+
+
+
+ 177
+
+
+
+ contentView
+
+
+
+ 188
+
+
+
+ value: values.ackShowContext
+
+
+
+
+
+ value: values.ackShowContext
+ value
+ values.ackShowContext
+ 2
+
+
+ 192
+
+
+
+ value: values.ackFollowSymlinks
+
+
+
+
+
+ value: values.ackFollowSymlinks
+ value
+ values.ackFollowSymlinks
+ 2
+
+
+ 194
+
+
+
+ value: values.ackLoadAckRC
+
+
+
+
+
+ value: values.ackLoadAckRC
+ value
+ values.ackLoadAckRC
+ 2
+
+
+ 197
+
+
+
+ contentValues: selection.ackHistory
+
+
+
+
+
+ contentValues: selection.ackHistory
+ contentValues
+ selection.ackHistory
+ 2
+
+
+ 215
+
+
+
+ value: selection.ackExpression
+
+
+
+
+
+ value: selection.ackExpression
+ value
+ selection.ackExpression
+
+ NSContinuouslyUpdatesValue
+
+
+
+ 2
+
+
+ 216
+
+
+
+ contentHeight: selection.contentHeight
+
+
+
+
+
+ contentHeight: selection.contentHeight
+ contentHeight
+ selection.contentHeight
+
+ NSNullPlaceholder
+
+ 0
+ 1
+ NO
+ YES
+ 1
+ kAAAAAAAAAAAAAAAAAAAAA
+
+
+ 2
+
+
+ 226
+
+
+
+ value: values.ackLiteralMatch
+
+
+
+
+
+ value: values.ackLiteralMatch
+ value
+ values.ackLiteralMatch
+ 2
+
+
+ 228
+
+
+
+ value: values.ackIgnoreCase
+
+
+
+
+
+ value: values.ackIgnoreCase
+ value
+ values.ackIgnoreCase
+ 2
+
+
+ 230
+
+
+
+ value: values.ackMatchWholeWords
+
+
+
+
+
+ value: values.ackMatchWholeWords
+ value
+ values.ackMatchWholeWords
+ 2
+
+
+ 232
+
+
+
+ value: selection.fileTypeString
+
+
+
+
+
+ value: selection.fileTypeString
+ value
+ selection.fileTypeString
+ 2
+
+
+ 306
+
+
+
+ argument: selection.ackExpression
+
+
+
+
+
+ argument: selection.ackExpression
+ argument
+ selection.ackExpression
+
+ NSSelectorName
+ returnArgument:literalMatch:ignoreCase:matchWholeWords:showContext:followSymLinks:loadAckRC:fileTypeString:
+
+ 2
+
+
+ 323
+
+
+
+ argument2: values.ackLiteralMatch
+
+
+
+
+
+ argument2: values.ackLiteralMatch
+ argument2
+ values.ackLiteralMatch
+
+ NSSelectorName
+ returnArgument:literalMatch:ignoreCase:matchWholeWords:showContext:followSymLinks:loadAckRC:fileTypeString:
+
+
+ 2
+
+
+ 324
+
+
+
+ argument3: values.ackIgnoreCase
+
+
+
+
+
+ argument3: values.ackIgnoreCase
+ argument3
+ values.ackIgnoreCase
+
+ NSSelectorName
+ returnArgument:literalMatch:ignoreCase:matchWholeWords:showContext:followSymLinks:loadAckRC:fileTypeString:
+
+
+ 2
+
+
+ 325
+
+
+
+ argument4: values.ackMatchWholeWords
+
+
+
+
+
+ argument4: values.ackMatchWholeWords
+ argument4
+ values.ackMatchWholeWords
+
+ NSSelectorName
+ returnArgument:literalMatch:ignoreCase:matchWholeWords:showContext:followSymLinks:loadAckRC:fileTypeString:
+
+
+ 2
+
+
+ 326
+
+
+
+ argument5: values.ackShowContext
+
+
+
+
+
+ argument5: values.ackShowContext
+ argument5
+ values.ackShowContext
+
+ NSSelectorName
+ returnArgument:literalMatch:ignoreCase:matchWholeWords:showContext:followSymLinks:loadAckRC:fileTypeString:
+
+
+ 2
+
+
+ 327
+
+
+
+ argument6: values.ackFollowSymlinks
+
+
+
+
+
+ argument6: values.ackFollowSymlinks
+ argument6
+ values.ackFollowSymlinks
+
+ NSSelectorName
+ returnArgument:literalMatch:ignoreCase:matchWholeWords:showContext:followSymLinks:loadAckRC:fileTypeString:
+
+
+ 2
+
+
+ 328
+
+
+
+ argument7: values.ackLoadAckRC
+
+
+
+
+
+ argument7: values.ackLoadAckRC
+ argument7
+ values.ackLoadAckRC
+
+ NSSelectorName
+ returnArgument:literalMatch:ignoreCase:matchWholeWords:showContext:followSymLinks:loadAckRC:fileTypeString:
+
+
+ 2
+
+
+ 329
+
+
+
+ argument8: selection.fileTypeString
+
+
+
+
+
+ argument8: selection.fileTypeString
+ argument8
+ selection.fileTypeString
+
+
+ returnArgument:literalMatch:ignoreCase:matchWholeWords:showContext:followSymLinks:loadAckRC:fileTypeString:
+
+
+ 2
+
+
+ 333
+
+
+
+ target: selection.controller
+
+
+
+
+
+ target: selection.controller
+ target
+ selection.controller
+
+ NSSelectorName
+ returnArgument:literalMatch:ignoreCase:matchWholeWords:showContext:followSymLinks:loadAckRC:fileTypeString:
+
+
+ 2
+
+
+ 334
+
+
+
+
+
+ 0
+
+
+
+
+
+ -2
+
+
+ File's Owner
+
+
+ -1
+
+
+ First Responder
+
+
+ 5
+
+
+
+
+
+ Window
+
+
+ 6
+
+
+
+
+
+
+
+
+
+
+
+ 11
+
+
+
+
+
+
+
+ 40
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 89
+
+
+
+
+
+
+
+ 168
+
+
+
+
+
+
+
+ 176
+
+
+
+
+
+
+
+ 7
+
+
+ Parameters
+
+
+ 120
+
+
+ Shared Defaults
+
+
+ 170
+
+
+ AdvancedDrawer
+
+
+ 185
+
+
+
+
+
+
+
+ AdvancedOptions
+
+
+ 186
+
+
+
+
+
+
+
+ 187
+
+
+
+
+
+
+
+ 195
+
+
+
+
+
+
+
+ 234
+
+
+
+
+ 240
+
+
+
+
+ 241
+
+
+
+
+ 242
+
+
+
+
+ 243
+
+
+
+
+ 244
+
+
+
+
+ 245
+
+
+
+
+ -3
+
+
+ Application
+
+
+ 43
+
+
+
+
+
+
+
+ 235
+
+
+
+
+ 210
+
+
+
+
+
+
+
+ 236
+
+
+
+
+ 220
+
+
+
+
+
+
+
+
+
+ 246
+
+
+
+
+ 222
+
+
+
+
+ 221
+
+
+
+
+ 223
+
+
+
+
+
+
+
+ 237
+
+
+
+
+ 224
+
+
+
+
+
+
+
+ 238
+
+
+
+
+ 225
+
+
+
+
+
+
+
+ 239
+
+
+
+
+ 247
+
+
+
+
+
+
+
+ 248
+
+
+
+
+ 249
+
+
+
+
+
+
+
+ 250
+
+
+
+
+ 251
+
+
+
+
+
+
+
+ 252
+
+
+
+
+
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+
+
+
+
+
+ 334
+
+
+ 0
+ IBCocoaFramework
+
+ com.apple.InterfaceBuilder.CocoaPlugin.macosx
+
+
+ YES
+ 3
+
+
diff --git a/Support/nibs/AckInProjectSearch.nib/info.nib b/Support/nibs/AckInProjectSearch.nib/info.nib
deleted file mode 100644
index 97c8dd1..0000000
--- a/Support/nibs/AckInProjectSearch.nib/info.nib
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
- IBDocumentLocation
- 425 98 703 386 0 0 1680 1028
- IBEditorPositions
-
- 185
- 756 617 214 136 0 0 1680 1028
-
- IBFramework Version
- 443.0
- IBOpenObjects
-
- 5
- 185
-
- IBSystem Version
- 8S2167
-
-
diff --git a/Support/nibs/AckInProjectSearch.nib/keyedobjects.nib b/Support/nibs/AckInProjectSearch.nib/keyedobjects.nib
index 5489a5c..4f9ace4 100644
Binary files a/Support/nibs/AckInProjectSearch.nib/keyedobjects.nib and b/Support/nibs/AckInProjectSearch.nib/keyedobjects.nib differ