Class: FileFinder
- Inherits:
-
Object
- Object
- FileFinder
- Defined in:
- lib/vimamsa/file_finder.rb
Class Method Summary collapse
Instance Method Summary collapse
- #filter_files(search_str) ⇒ Object
- #gui_file_finder_select_callback(search_str, idx) ⇒ Object
- #gui_file_finder_update_callback(search_str = "") ⇒ Object
-
#initialize ⇒ FileFinder
constructor
A new instance of FileFinder.
- #save ⇒ Object
- #start_gui ⇒ Object
Constructor Details
#initialize ⇒ FileFinder
Returns a new instance of FileFinder.
16 17 18 19 |
# File 'lib/vimamsa/file_finder.rb', line 16 def initialize() vma.hook.register(:shutdown, self.method("save")) @@dir_list = vma.marshal_load("file_index") end |
Class Method Details
.recursively_find_files ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/vimamsa/file_finder.rb', line 66 def self.recursively_find_files() debug("START find files") dlist = [] for d in $search_dirs debug("FIND FILEs IN #{d}") dlist = dlist + Dir.glob("#{d}/**/*").select { |e| File.file?(e) and $find_extensions.include?(File.extname(e)) } debug("FIND FILEs IN #{d} END") end @@dir_list = dlist debug("END find files") return @@dir_list end |
.update_index ⇒ Object
8 9 10 11 12 13 14 |
# File 'lib/vimamsa/file_finder.rb', line 8 def self.update_index() ("Start updating file index") Thread.new { recursively_find_files() ("Finnish updating file index") } end |
Instance Method Details
#filter_files(search_str) ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/vimamsa/file_finder.rb', line 80 def filter_files(search_str) dir_hash = {} scores = Parallel.map(@@dir_list, in_threads: 8) do |file| [file, srn_dst(search_str, file)] end for s in scores dir_hash[s[0]] = s[1] if s[1] > 0 end # debug scores dir_hash = dir_hash.sort_by { |k, v| -v } dir_hash = dir_hash[0..20] dir_hash.map do |file, d| debug "D:#{d} #{file}" end return dir_hash end |
#gui_file_finder_select_callback(search_str, idx) ⇒ Object
59 60 61 62 63 64 |
# File 'lib/vimamsa/file_finder.rb', line 59 def gui_file_finder_select_callback(search_str, idx) selected_file = @file_search_list[idx][0] debug "FILE FINDER SELECT CALLBACK: s=#{search_str},i=#{idx}: #{selected_file}" gui_select_window_close(0) open_new_file(selected_file) end |
#gui_file_finder_update_callback(search_str = "") ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/vimamsa/file_finder.rb', line 47 def gui_file_finder_update_callback(search_str = "") debug "FILE FINDER UPDATE CALLBACK: #{search_str}" if (search_str.size > 1) files = filter_files(search_str) @file_search_list = files return files #debug files.inspect #return files.values end return [] end |
#save ⇒ Object
21 22 23 24 |
# File 'lib/vimamsa/file_finder.rb', line 21 def save() debug "SAVE FILE INDEX", 2 vma.marshal_save("file_index", @@dir_list) end |
#start_gui ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/vimamsa/file_finder.rb', line 26 def start_gui() if $search_dirs.empty? ("FileFinder: No $search_dirs defined") return end l = [] $select_keys = ["h", "l", "f", "d", "s", "a", "g", "z"] if @@dir_list == nil Thread.new { FileFinder.recursively_find_files() } end # select_callback = proc { |search_str, idx| gui_file_finder_select_callback(search_str, idx) } select_callback = self.method("gui_file_finder_select_callback") update_callback = self.method("gui_file_finder_update_callback") gui_select_update_window(l, $select_keys.collect { |x| x.upcase }, # "gui_file_finder_select_callback", select_callback, update_callback) end |