class Rbnotes::Commands::Pick

Picks a timestamp with a picker program, like `fzf`.

Public Instance Methods

execute(args, conf) click to toggle source
# File lib/rbnotes/commands/pick.rb, line 14
def execute(args, conf)
  @opts = {}
  parse_opts(args)

  if args.empty?
    default_behavior = conf[:list_default] || DEFAULT_BEHAVIOR
    args << default_behavior
  end

  utils = Rbnotes.utils
  patterns = utils.read_timestamp_patterns(args, enum_week: @opts[:enum_week])

  repo = Textrepo.init(conf)

  stamps = utils.find_notes(patterns, repo)
  return if stamps.empty?

  list = []
  stamps.each { |timestamp|
    list << utils.make_headline(timestamp, repo.read(timestamp))
  }

  picker = conf[:picker]
  unless picker.nil?
    picker_opts = conf[:picker_option]
    cmds = [picker]
    cmds.concat(picker_opts.split) unless picker_opts.nil?

    require 'open3'
    result = Open3.pipeline_rw(cmds) { |stdin, stdout, _|
      stdin.puts list
      stdin.close
      stdout.read
    }
    puts result
  else
    puts list
  end
end