class Hiiro::TaskManager
def select_task_interactive(prompt = nil)
def select_task_interactive(prompt = nil) task_list = if scope == :subtask tasks.sort_by(&:short_name) else environment.all_tasks.sort_by(&:name) end mapping = {} all_data = task_list.map { |t| [t, t.display_data(scope: scope, environment: environment)] } name_col = all_data.map { |_, d| d[:name].length }.max || 0 tree_col = all_data.map { |_, d| d[:tree].length }.max || 0 branch_col = all_data.map { |_, d| d[:branch].length }.max || 0 all_data.each do |task, d| line = format("%-#{name_col}s %-#{tree_col}s %-#{branch_col}s %s", d[:name], d[:tree], d[:branch], d[:session]) mapping[line] = task end # Add non-task tmux sessions (exclude sessions that belong to tasks) if scope == :task task_session_names = environment.all_tasks.map(&:session_name) extra_sessions = environment.all_sessions.reject { |s| task_session_names.include?(s.name) } extra_sessions.sort_by(&:name).each do |session| line = format("%-25s (tmux session)", session.name) mapping[line] = session end end return nil if mapping.empty? selected = hiiro.fuzzyfind_from_map(mapping) selected end