Skip to content

Instantly share code, notes, and snippets.

@joeyschoblaska joeyschoblaska/note.rb
Last active Nov 29, 2019

Embed
What would you like to do?
#!/usr/bin/env ruby
require "rubygems"
require "fuzzy_match"
def find_match(str, opts = {})
notes = {}
Dir["#{ENV["HOME"]}/Dropbox/notes/**/*"].select { |n| n =~ /\./ }.each do |path|
key = path.split("Dropbox/notes/")[1]
notes[key] = path
end
matches = FuzzyMatch.new(notes.keys, opts).find(str)
if opts[:find_all_with_score]
matches.map do |match|
[notes[match[0]], match[1], match[2]]
end
else
notes[matches]
end
end
if ARGV.empty?
puts "Usage:"
puts "- note [name] | open note in vim"
puts "- note -s [name] | show matching notes"
puts "- note -c [name] | copy full path to clipboard"
puts "- note -p [name] | full path of best match (for use in scripts / pipes)"
puts "- note -t [name] | open note in typo"
elsif ARGV[0] == "-s"
puts
matches = find_match(ARGV[1..-1].join(" "), find_all_with_score: true)
matches.first(5).each do |match|
short = match[0].gsub("#{ENV["HOME"]}/Dropbox/notes/", "")
score = match[1].to_s[0, 5].ljust(5, " ")
puts "#{score} : #{short}"
end
puts
elsif ARGV[0] == "-t"
match = find_match(ARGV[1..-1].join(" "))
`typo "#{match}"`
elsif ARGV[0] == "-c"
match = find_match(ARGV[1..-1].join(" "))
exec("echo \"#{match.gsub(" ", "\\ ")}\" | tr -d '\n' | pbcopy")
elsif ARGV[0] == "-p"
match = find_match(ARGV[1..-1].join(" "))
exec("echo \"#{match.gsub(" ", "\\ ")}\" | tr -d '\n'")
else
match = find_match(ARGV.join(" "))
macvim = "/usr/local/opt/vim@7.4/bin/vim"
vim = File.exists?(macvim) ? macvim : "vim"
exec("#{vim} -c \"ProseMode\" \"#{match}\"")
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.